import java.applet.*; import java.awt.*; import java.awt.event.*; import java.lang.Math; public class r_cube extends Applet implements Runnable{ Thread th = null; int mtd[][] = new int[3][3]; int ccd[][] = {{1,1,1,1},{1,1,0,0},{1,0,0,1},{0,0,1,1},{0,1,1,0},{0,0,0,0}}; int tc[][] = {{2,1,4,3},{1,5,1,0},{5,2,0,2},{3,0,3,5},{0,4,5,4},{4,3,2,1}}; Color cc[] = new Color[2]; double r2 = 1.414214 , pi = 3.141592; double ang; int sx = 2,sy = 1; int dx = 1,dy = 1; int cx,cy,p1x,p1y,p2x,p2y,p3x,p3y,l1,l2; int swx = 1 , swy = 0 , fg = 1; int sn = 0 , dn = 4; Button rep; Image os; Graphics og; public void init(){ setBackground(Color.white); os = createImage(220,240); og = os.getGraphics(); ang = pi / 2; for(int ix = 0;ix < 3;ix ++){ for(int iy = 0;iy < 3;iy ++){ mtd[iy][ix] = 0; } } mtd[1][1] = -1 ; mtd[1][2] = -1 ; cc[0] = new Color(200,20,20); cc[1] = new Color(250,250,250); setLayout(new BorderLayout()); Panel pan = new Panel(); pan.setLayout(new FlowLayout()); pan.add(rep = new Button(" replay ")); add("South",pan); addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ if(fg == 0){ dx = (e.getX() - 20) / 60; dy = (e.getY() - 20) / 60; if((sx == dx) && (sy == dy + 1)){ swx = 0 ; swy = 1 ; dn = mtd[dy][dx] ; sn = tc[mtd[dy][dx]][3]; mtd[dy][dx] = -1;mtd[sy][sx] = -1; ang = 0;fg = 1; th.resume(); } if((sx == dx) && (sy == dy - 1)){ swx = 0 ; swy = -1 ; dn = mtd[dy][dx] ; sn = tc[mtd[dy][dx]][1]; mtd[dy][dx] = -1;mtd[sy][sx] = -1; ang = 0;fg = 1; th.resume(); } if((sx == dx + 1) && (sy == dy)){ swx = 1 ; swy = 0 ; dn = mtd[dy][dx] ; sn = tc[mtd[dy][dx]][0]; mtd[dy][dx] = -1;mtd[sy][sx] = -1; ang = 0;fg = 1; th.resume(); } if((sx == dx - 1) && (sy == dy)){ swx = -1 ; swy = 0 ; dn = mtd[dy][dx] ; sn = tc[mtd[dy][dx]][2]; mtd[dy][dx] = -1;mtd[sy][sx] = -1; ang = 0;fg = 1; th.resume(); } } } } ); rep.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ for(int ix = 0;ix < 3;ix ++){ for(int iy = 0;iy < 3;iy ++){ mtd[iy][ix] = 0; } } mtd[1][1] = -1 ; mtd[1][2] = -1 ; sx = 2 ; sy = 1; dx = 1 ; dy = 1; swx = 1 ; swy = 0 ; fg = 1; sn = 0 ; dn = 4; ang = pi / 2; th.resume(); } }); } public void paint(Graphics g){ og.setColor(Color.darkGray); og.fill3DRect(10,10,200,200,true); og.setColor(Color.lightGray); og.fillRect(20,20,180,180); for(int px = 0;px < 3;px ++){ for(int py = 0;py < 3;py ++){ if(mtd[py][px] > -1){ og.setColor(cc[ccd[mtd[py][px]][1]]); og.fillRect(px * 60 + 20,py * 60 + 20,30,30); og.setColor(cc[ccd[mtd[py][px]][2]]); og.fillRect(px * 60 + 20,py * 60 + 50,30,30); og.setColor(cc[ccd[mtd[py][px]][0]]); og.fillRect(px * 60 + 50,py * 60 + 20,30,30); og.setColor(cc[ccd[mtd[py][px]][3]]); og.fillRect(px * 60 + 50,py * 60 + 50,30,30); og.setColor(Color.black); og.drawRect(px * 60 + 20,py * 60 + 20,60,60); } } } if(swx == -1){ cx = dx * 60 + 20 ; cy = dy * 60 + 20; p1x = cx + (int)(Math.round((60 * Math.cos(ang + (pi / 2))))) ; p1y = cy; p2x = cx + (int)(Math.round((r2 * 60 * Math.cos(ang + (pi / 4))))) ; p2y = cy; p3x = cx + (int)(Math.round((60 * Math.cos(ang)))) ; p3y = cy; l1 = p2x - p1x ; l2 = p3x - p2x; }else if(swx == 1){ cx = sx * 60 + 20 ; cy = sy * 60 + 20; p1x = cx - (int)(Math.round((r2 * 60 * Math.cos(ang + (pi / 4))))) ; p1y = cy; p2x = cx - (int)(Math.round((60 * Math.cos(ang)))) ; p2y = cy; p3x = cx - (int)(Math.round((60 * Math.cos(ang + (pi / 2))))) ; p3y = cy; l1 = p3x - p1x ; l2 = p1x - p2x; }else if(swy == -1){ cx = dx * 60 + 20 ; cy = dy * 60 + 20; p1x = cx ; p1y = cy + (int)(Math.round((60 * Math.cos(ang + (pi / 2))))); p2x = cx ; p2y = cy + (int)(Math.round((r2 * 60 * Math.cos(ang + (pi / 4))))); p3x = cx ; p3y = cy + (int)(Math.round((60 * Math.cos(ang)))); l1 = p2y - p1y ; l2 = p3y - p2y; }else if(swy == 1){ cx = sx * 60 + 20 ; cy = sy * 60 + 20; p1x = cx ; p1y = cy - (int)(Math.round((r2 * 60 * Math.cos(ang + (pi / 4))))); p2x = cx ; p2y = cy - (int)(Math.round((60 * Math.cos(ang)))); p3x = cx ; p3y = cy - (int)(Math.round((60 * Math.cos(ang + (pi / 2))))); l1 = p3y - p1y ; l2 = p1y - p2y; } if((swx == 0) && (fg == 1)){ og.setColor(cc[ccd[dn][1]]); og.fillRect(p1x,p1y,30,l1 / 2); og.setColor(cc[ccd[dn][2]]); og.fillRect(p1x,p1y + l1 / 2,30,l1 / 2); og.setColor(cc[ccd[dn][0]]); og.fillRect(p1x + 30,p1y,30,l1 / 2); og.setColor(cc[ccd[dn][3]]); og.fillRect(p1x + 30,p1y + l1 / 2,30,l1 / 2); og.setColor(cc[ccd[sn][1]]); og.fillRect(p2x,p2y,30,l2 / 2); og.setColor(cc[ccd[sn][2]]); og.fillRect(p2x,p2y + l2 / 2,30,l2 / 2); og.setColor(cc[ccd[sn][0]]); og.fillRect(p2x + 30,p2y,30,l2 / 2); og.setColor(cc[ccd[sn][3]]); og.fillRect(p2x + 30,p2y + l2 / 2,30,l2 / 2); og.setColor(Color.black); og.drawRect(p1x,p1y,60,l1); og.drawRect(p2x,p2y,60,l2); }else if((swy == 0) && (fg == 1)){ og.setColor(cc[ccd[dn][1]]); og.fillRect(p1x,p1y,l1 / 2,30); og.setColor(cc[ccd[dn][2]]); og.fillRect(p1x,p1y + 30,l1 / 2,30); og.setColor(cc[ccd[dn][0]]); og.fillRect(p1x + l1 / 2,p1y,l1 / 2,30); og.setColor(cc[ccd[dn][3]]); og.fillRect(p1x + l1 / 2,p1y + 30,l1 / 2,30); og.setColor(cc[ccd[sn][1]]); og.fillRect(p2x,p2y,l2 / 2,30); og.setColor(cc[ccd[sn][2]]); og.fillRect(p2x,p2y + 30,l2 / 2,30); og.setColor(cc[ccd[sn][0]]); og.fillRect(p2x + l2 / 2,p2y,l2 / 2,30); og.setColor(cc[ccd[sn][3]]); og.fillRect(p2x + l2 / 2,p1y + 30,l2 / 2,30); og.setColor(Color.black); og.drawRect(p1x,p1y,l1,60); og.drawRect(p2x,p2y,l2,60); } 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 { ang = ang + pi / 50; if(ang > pi / 2){ mtd[sy][sx] = sn; sx = dx ; sy = dy; fg = 0; th.suspend(); } Thread.sleep(50); } catch (InterruptedException e){ } repaint(); } } public void update( Graphics g ) { paint( g ) ; } }