import java.applet.*; import java.awt.*; import java.awt.event.*; public class c_panel extends Applet implements Runnable{ int cd[][][] = {{{1,2,0},{0,0,3},{0,4,0}}, {{0,2,0},{0,0,4},{3,0,1}}, {{1,0,0},{0,2,0},{0,3,4}}, {{0,2,0},{0,4,0},{3,0,1}}}; int xt[] = {30,30,270,270}; int yt[] = {30,150,30,150}; int csw[] = {0,0,0,0}; int sn,fg,cf; int px,py,pn,en; int upn[] = {4,4,4,4}; int rep[][] = new int[3][3]; int che[][] = new int[3][3]; Thread th = null; Image os; Graphics og; public void init(){ os = createImage(390,270); og = os.getGraphics(); setBackground(Color.white); addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ px = e.getX(); py = e.getY(); if((px > 30) && (px < 120)){ if((py > 30) && (py < 120)){ pn = 0; }else if((py > 150) && (py < 240)){ pn = 1; }else{ pn = 5; } }else if((px > 150) && (px < 240)){ if((py > 90) && (py < 180)){ en = pn ; pn = 4; }else{ pn = 5; } }else if((px > 270) && (px < 360)){ if((py > 30) && (py < 120)){ pn = 2; }else if((py > 150) && (py < 240)){ pn = 3; }else{ pn = 5; } } if(fg == 0){ if(pn == 4){ if(upn[3] != 4){ csw[upn[3]] = 0; upn[3] = 4; fg = 0; }else if(upn[2] != 4){ csw[upn[2]] = 0; upn[2] = 4; fg = 0; }else if(upn[1] != 4){ csw[upn[1]] = 0; upn[1] = 4; fg = 0; }else if(upn[0] != 4){ csw[upn[0]] = 0; upn[0] = 4; fg = 0; }else{ fg = 0; } }else{ sn = pn; fg = 1; } }else if(fg == 1){ if(pn == 5){ fg = 0; }else if(pn == 4){ if((upn[0] == 4) && (csw[en] == 0)){ upn[0] = en; csw[en] = 1; fg = 0; }else if((upn[1] == 4) && (csw[en] == 0)){ upn[1] = en; csw[en] = 1; fg = 0; }else if((upn[2] == 4) && (csw[en] == 0)){ upn[2] = en; csw[en] = 1; fg = 0; }else if((upn[3] == 4) && (csw[en] == 0)){ upn[3] = en; csw[en] = 1; fg = 0; }else{ fg = 0; } }else if(sn != pn){ sn = pn; }else if((sn == pn) && (csw[pn] == 0)){ for(int k1 = 0;k1 < 3;k1 ++){ for(int k2 = 0;k2 < 3;k2 ++){ rep[k2][k1] = cd[sn][k1][2-k2]; } } for(int k1 = 0;k1 < 3;k1 ++){ for(int k2 = 0;k2 < 3;k2 ++){ cd[sn][k2][k1] = rep[k2][k1]; } } } } repaint(); } } ); } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,390,270); if((fg == 1) && (sn == 4)){ og.setColor(Color.darkGray); }else{ og.setColor(Color.lightGray); } og.fill3DRect(145,85,100,100,true); og.setColor(Color.white); og.fillRect(150,90,90,90); for(int i1 = 0;i1 < 4;i1 ++){ if((fg == 1) && (sn == i1)){ og.setColor(Color.darkGray); }else{ og.setColor(Color.lightGray); } og.fill3DRect(xt[i1]-5,yt[i1]-5,100,100,true); og.setColor(Color.white); og.fillRect(xt[i1],yt[i1],90,90); if(csw[i1] == 0){ for(int i2 = 0;i2 < 3;i2 ++){ for(int i3 = 0;i3 < 3;i3 ++){ switch(cd[i1][i3][i2]){ case 1 : og.setColor(Color.red);break; case 2 : og.setColor(Color.green);break; case 3 : og.setColor(Color.yellow);break; case 4 : og.setColor(Color.blue);break; default : break; } if(cd[i1][i3][i2] != 0){ og.fill3DRect(30*i2+xt[i1],30*i3+yt[i1],30,30,true); } } } } } for(int c = 0;c < 4;c ++){ if(upn[c] != 4){ for(int k1 = 0;k1 < 3;k1 ++){ for(int k2 = 0;k2 < 3;k2 ++){ if(cd[upn[c]][k2][k1] != 0){ switch(cd[upn[c]][k2][k1]){ case 1 : og.setColor(Color.red);break; case 2 : og.setColor(Color.green);break; case 3 : og.setColor(Color.yellow);break; case 4 : og.setColor(Color.blue);break; default : break; } og.fill3DRect(30*k1+150,30*k2+90,30,30,true); } } } } } for(int c1 = 0;c1 < 3;c1 ++){ for(int c2 = 0;c2 < 3;c2 ++){ for(int c3 = 0;c3 < 4;c3 ++){ if((upn[3] != 4) && (cd[upn[3]][c2][c1] != 0)){ che[c2][c1] = cd[upn[3]][c2][c1]; }else if((upn[2] != 4) && (cd[upn[2]][c2][c1] != 0)){ che[c2][c1] = cd[upn[2]][c2][c1]; }else if((upn[1] != 4) && (cd[upn[1]][c2][c1] != 0)){ che[c2][c1] = cd[upn[1]][c2][c1]; }else if((upn[0] != 4) && (cd[upn[0]][c2][c1] != 0)){ che[c2][c1] = cd[upn[0]][c2][c1]; }else{ che[c2][c1] = 0; } } } } cf = 1; for(int c1 = 0;c1 < 3;c1 ++){ for(int c2 = 0;c2 < 3;c2 ++){ cf = cf * che[c2][c1]; } } if(cf != 0){ if((che[1][1] != che[1][0]) && (che[1][1] != che[2][1]) && (che[1][1] != che[1][2]) && (che[1][1] != che[0][1])){ if((che[0][0] != che[0][1]) && (che[0][0] != che[1][0])){ if((che[0][2] != che[0][1]) && (che[0][2] != che[1][2])){ if((che[2][2] != che[2][1]) && (che[2][2] != che[1][2])){ if((che[2][0] != che[1][0]) && (che[2][0] != che[2][1])){ og.setColor(Color.red); og.drawRect(144,84,102,102); og.drawRect(142,82,106,106); } } } } } } g.drawImage(os,0,0,this); } public void start(){ if(th == null){ th = new Thread(this); th.start(); } } public void stop(){ th = null; } public void run(){ while(th != null){ try{ Thread.sleep(100); } catch (InterruptedException e){ } } } public void update( Graphics g ){ paint( g ) ; } }