import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.Math;
public class tilt extends Applet implements Runnable{
Thread th = null;
Image os;
Graphics og;
Choice cho = new Choice();
Button rep;
Label spa;
int td[][] = new int[6][6];
int yw[][] = new int[5][6];
int tw[][] = new int[6][5];
int psx[][] = {{0,3},{4,3},{3,1},{1,4},{0,0}};
int psy[][] = {{3,2},{5,5},{4,5},{3,3},{1,0}};
int pex[][] = {{5,2},{1,2},{2,4},{4,1},{5,5}};
int pey[][] = {{3,2},{5,5},{1,0},{2,2},{5,4}};
int ywd[][][] = {{{0,0,0,0,0,0},{1,0,0,0,0,1},{0,0,1,1,0,0},{1,0,0,0,0,1},{0,0,0,0,0,0}},
{{1,0,0,0,0,0},{0,1,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,1,0},{0,0,0,0,0,1}},
{{0,0,1,0,0,0},{0,0,0,0,0,1},{0,1,0,0,1,0},{1,0,0,0,0,0},{0,0,0,1,0,0}},
{{0,1,1,0,0,0},{0,0,0,1,0,1},{0,1,0,0,1,0},{1,0,1,0,0,0},{0,0,0,1,1,0}},
{{0,0,1,0,0,0},{1,0,0,1,0,0},{0,1,0,0,1,0},{0,0,1,0,0,1},{0,0,0,1,0,0}}};
int twd[][][] = {{{0,0,1,0,0},{1,0,0,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,0,0,1},{0,0,1,0,0}},
{{0,0,1,0,0},{0,0,0,0,1},{0,0,0,1,0},{0,1,0,0,0},{1,0,0,0,0},{0,0,1,0,0}},
{{0,0,0,1,0},{1,0,0,0,0},{0,0,1,0,1},{1,0,1,0,0},{0,0,0,0,1},{0,1,0,0,0}},
{{0,0,0,1,0},{1,0,1,0,0},{1,0,0,0,0},{0,0,0,0,1},{0,0,1,0,1},{0,1,0,0,0}},
{{0,0,0,1,0},{0,0,1,0,0},{0,1,0,0,1},{1,0,0,1,0},{0,0,1,0,0},{0,1,0,0,0}}};
int no = 0;
int ax1 , ay1 , ax2 , ay2;
int mx1 = 0 , my1 = 0 , mx2 = 0 , my2 = 0;
int sw1 = 0 , sw2 = 0;
int dd = 4;
public void init(){
os = createImage(320,320);
og = os.getGraphics();
setBackground(new Color(200,250,200));
setLayout(new BorderLayout());
Panel pan = new Panel();
pan.setLayout(new FlowLayout());
pan.add(rep = new Button(" replay "));
pan.add(spa = new Label(" "));
pan.add(cho);
cho.addItem(" No.1 ");
cho.addItem(" No.2 ");
cho.addItem(" No.3 ");
cho.addItem(" No.4 ");
cho.addItem(" No.5 ");
cho.addItemListener(new MyListener());
add("South",pan);
R_set();
rep.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
R_set();
repaint();
}
});
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
if((sw1 == 0) && (sw2 == 0)){
if((e.getY() < e.getX()) && (e.getY() > 320 - e.getX())){
dd =1 ; sw1 = 1 ; sw2 = 1 ; th.resume();
}else if((e.getY() > e.getX()) && (e.getY() > 320 - e.getX())){
dd = 2 ; sw1 = 1 ; sw2 = 1 ; th.resume();
}else if((e.getY() > e.getX()) && (e.getY() < 320 - e.getX())){
dd = 3 ; sw1 = 1 ; sw2 = 1 ; th.resume();
}else if((e.getY() < e.getX()) && (e.getY() < 320 - e.getX())){
dd = 4 ; sw1 = 1 ; sw2 = 1 ; th.resume();
}
}
}
}
);
}
class MyListener implements ItemListener{
public void itemStateChanged(ItemEvent e){
Choice cho = (Choice)e.getSource();
switch(cho.getSelectedIndex()){
case 0 : no = 0 ; R_set() ; repaint() ; break;
case 1 : no = 1 ; R_set() ; repaint() ; break;
case 2 : no = 2 ; R_set() ; repaint() ; break;
case 3 : no = 3 ; R_set() ; repaint() ; break;
case 4 : no = 4 ; R_set() ; repaint() ; break;
}
}
}
public void paint(Graphics g){
og.setColor(new Color(200,250,200));
og.fillRect(0,0,320,320);
og.setColor(Color.white);
og.fillRect(10,10,300,300);
og.setColor(new Color(52,52,52));
og.fill3DRect(38,38,245,245,true);
og.setColor(new Color(245,240,250));
og.fillRect(41,41,239,239);
og.setColor(Color.black);
for(int dx = 0;dx < 6;dx ++){
for(int dy = 0;dy < 5;dy ++){
if(yw[dy][dx] == 1){
og.fill3DRect(dx*40+40,dy*40+79,40,2,true);
}
}
}
for(int dx = 0;dx < 5;dx ++){
for(int dy = 0;dy < 6;dy ++){
if(tw[dy][dx] == 1){
og.fill3DRect(dx*40+79,dy*40+40,2,40,true);
}
}
}
og.setColor(Color.red);
og.drawRect(pex[no][0]*40+50,pey[no][0]*40+50,20,20);
og.setColor(Color.blue);
og.drawRect(pex[no][1]*40+50,pey[no][1]*40+50,20,20);
og.setColor(Color.red);
og.fill3DRect(ax1*40+43+mx1,ay1*40+43+my1,34,34,true);
og.setColor(Color.blue);
og.fill3DRect(ax2*40+43+mx2,ay2*40+43+my2,34,34,true);
g.drawImage(os,0,0,this);
}
public void R_set(){
for(int idx = 0;idx < 6;idx ++){
for(int idy = 0;idy < 6;idy ++){
td[idy][idx] = 0;
}
}
ax1 = psx[no][0] ; ay1 = psy[no][0] ;
ax2 = psx[no][1] ; ay2 = psy[no][1] ;
td[ay1][ax1] = 1;
td[ay2][ax2] = 2;
for(int idx = 0;idx < 6;idx ++){
for(int idy = 0;idy < 5;idy ++){
yw[idy][idx] = ywd[no][idy][idx];
}
}
for(int idx = 0;idx < 5;idx ++){
for(int idy = 0;idy < 6;idy ++){
tw[idy][idx] = twd[no][idy][idx];
}
}
return;
}
public void start(){
if(th == null){
th = new Thread(this);
th.start();
}
th.suspend();
}
public void stop(){
th = null;
}
public void run(){
while (th != null){
try{
if((sw1 == 0) && (sw2 == 0)){
th.suspend();
}else{
if(dd == 1){
if((ax1 + mx1 / 40 == 5) || ((td[ay1][ax1 + mx1 / 40 + 1] != 0) && (sw2 == 0)) || (tw[ay1][ax1 + mx1 / 40] == 1)){
sw1 = 0;
td[ay1][ax1 + mx1 / 40] = 1;
if(mx1 / 40 > 0)td[ay1][ax1] = 0;
ax1 = ax1 + mx1 / 40;
mx1 = 0;
}else if(sw1 == 1){
mx1 = mx1 + 4;
}
if((ax2 + mx2 / 40 == 5) || ((td[ay2][ax2 + mx2 / 40 + 1] != 0) && (sw1 == 0)) || (tw[ay2][ax2 + mx2 / 40] == 1)){
sw2 = 0;
td[ay2][ax2 + mx2 / 40] = 2;
if(mx2 / 40 > 0)td[ay2][ax2] = 0;
ax2 = ax2 + mx2 / 40;
mx2 = 0;
}else if(sw2 == 1){
mx2 = mx2 + 4;
}
}else if(dd == 2){
if((ay1 + my1 / 40 == 5) || ((td[ay1 + my1 / 40 + 1][ax1] != 0) && (sw2 == 0)) || (yw[ay1 + my1 / 40][ax1] == 1)){
sw1 = 0;
td[ay1 + my1 / 40][ax1] = 1;
if(my1 / 40 > 0)td[ay1][ax1] = 0;
ay1 = ay1 + my1 / 40;
my1 = 0;
}else if(sw1 == 1){
my1 = my1 + 4;
}
if((ay2 + my2 / 40 == 5) || ((td[ay2 + my2 / 40 + 1][ax2] != 0) && (sw1 == 0)) || (yw[ay2 + my2 / 40][ax2] == 1)){
sw2 = 0;
td[ay2 + my2 / 40][ax2] = 2;
if(my2 / 40 > 0)td[ay2][ax2] = 0;
ay2 = ay2 + my2 / 40;
my2 = 0;
}else if(sw2 == 1){
my2 = my2 + 4;
}
}else if(dd == 3){
if((ax1 + mx1 / 40 == 0) || ((td[ay1][ax1 + mx1 / 40 - 1] != 0) && (sw2 == 0)) || (tw[ay1][ax1 + mx1 / 40 - 1] == 1)){
sw1 = 0;
td[ay1][ax1 + mx1 / 40] = 1;
if(mx1 / 40 < 0)td[ay1][ax1] = 0;
ax1 = ax1 + mx1 / 40;
mx1 = 0;
}else if(sw1 == 1){
mx1 = mx1 - 4;
}
if((ax2 + mx2 / 40 == 0) || ((td[ay2][ax2 + mx2 / 40 - 1] != 0) && (sw1 == 0)) || (tw[ay2][ax2 + mx2 / 40 - 1] == 1)){
sw2 = 0;
td[ay2][ax2 + mx2 / 40] = 2;
if(mx2 / 40 < 0)td[ay2][ax2] = 0;
ax2 = ax2 + mx2 / 40;
mx2 = 0;
}else if(sw2 == 1){
mx2 = mx2 - 4;
}
}else if(dd == 4){
if((ay1 + my1 / 40 == 0) || ((td[ay1 + my1 / 40 - 1][ax1] != 0) && (sw2 == 0)) || (yw[ay1 + my1 / 40 - 1][ax1] == 1)){
sw1 = 0;
td[ay1 + my1 / 40][ax1] = 1;
if(my1 / 40 < 0)td[ay1][ax1] = 0;
ay1 = ay1 + my1 / 40;
my1 = 0;
}else if(sw1 == 1){
my1 = my1 - 4;
}
if((ay2 + my2 / 40 == 0) || ((td[ay2 + my2 / 40 - 1][ax2] != 0) && (sw1 == 0)) || (yw[ay2 + my2 / 40 - 1][ax2] == 1)){
sw2 = 0;
td[ay2 + my2 / 40][ax2] = 2;
if(my2 / 40 < 0)td[ay2][ax2] = 0;
ay2 = ay2 + my2 / 40;
my2 = 0;
}else if(sw2 == 1){
my2 = my2 - 4;
}
}
}
Thread.sleep(30);
}
catch (InterruptedException e){ }
repaint();
}
}
public void update(Graphics g){
paint(g) ;
}
}
