import java.applet.*; import java.awt.*; import java.awt.event.*; public class push_out extends Applet implements Runnable{ Thread th = null; Image os; Graphics og; int td[][] = {{0,0,0,0,0},{0,2,1,2,1},{0,3,4,3,4},{0,2,1,2,1},{0,3,4,3,4}}; int arx[] = {10,30,30,60,60,30,30,10},ary[] = {30,10,20,20,40,40,50,30}; int dax[] = new int[8],day[] = new int[8]; int br=1,sw=0,mn,cs=0; int mx1,my1,mx2,my2,mt1; public void init(){ os = createImage(420,360); og = os.getGraphics(); addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ if(cs == 0){ if((e.getX()>330)&&(e.getX()<390)){ sw = (e.getY()-90)/60+1; } switch (sw){ case 1 : mx1 = 90;my1 = 90;mt1 = 1;break; case 2 : mx1 = 90;my1 = 150;mt1 = 1;mx2 = 270;my2 = 90;break; case 3 : mx1 = 90;my1 = 210;mt1 = 1;mx2 = 270;my2 = 150;break; case 4 : mx1 = 90;my1 = 270;mt1 = 1;mx2 = 270;my2 = 210;break; } cs = 1; repaint(); } } } ); } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,420,360); for(int d1 = 1;d1 < 5;d1 ++){ for(int d2 = 1;d2 < 5;d2 ++){ if(mt1 == 1){ if(sw != d2)d_cube(td[d2][d1],d1*60+30,d2*60+30); }else if(mt1 == 2){ if((d1 != 4)||(d2 > sw))d_cube(td[d2][d1],d1*60+30,d2*60+30); }else{ d_cube(td[d2][d1],d1*60+30,d2*60+30); } } } for(int d1 = 0;d1 < 4;d1 ++){ for(int d2 = 0;d2 < 8;d2 ++){ dax[d2] = arx[d2]+333;day[d2] = ary[d2]+92+d1*60; } og.setColor(Color.black); og.fillPolygon(dax,day,8); for(int d2 = 0;d2 < 8;d2 ++){ dax[d2] = arx[d2]+330;day[d2] = ary[d2]+90+d1*60; } og.setColor(Color.red); og.fillPolygon(dax,day,8); } for(int d1 = 0;d1 < 24;d1 ++){ if(d1%2 == 0){ if(br == 1){ og.setColor(Color.darkGray); }else{ og.setColor(Color.white); } }else{ if(br == 1){ og.setColor(Color.white); }else{ og.setColor(Color.darkGray); } } og.drawLine(50,10*d1+100,60,10*d1+90); og.drawLine(60,10*d1+90,70,10*d1+100); og.drawLine(10*d1+90,50,10*d1+100,60); og.drawLine(10*d1+100,60,10*d1+90,70); if(d1 < 6){ og.drawLine((int)(-40*Math.cos(0.262*d1)+90),(int)(-40*Math.sin(0.262*d1)+90), (int)(-30*Math.cos(0.262*d1)+10*Math.sin(0.262*d1)+90),(int)(-30*Math.sin(0.262*d1)-10*Math.cos(0.262*d1)+90)); og.drawLine((int)(-30*Math.cos(0.262*d1)+10*Math.sin(0.262*d1)+90),(int)(-30*Math.sin(0.262*d1)-10*Math.cos(0.262*d1)+90), (int)(-20*Math.cos(0.262*d1)+90),(int)(-20*Math.sin(0.262*d1)+90)); } } if(sw != 0){ if(mt1 == 1){ for(int d1 = 0;d1 < 4;d1 ++){ d_cube(td[sw][d1+1],mx1+d1*60,my1); } }else{ d_cube(mn,mx1,my1); if(mt1 == 2){ if(sw != 1){ for(int d2 = sw-1;d2 > 0;d2 --){ d_cube(td[d2][4],mx2,my2-60*(sw-d2-1)); } } } } } g.drawImage(os,0,0,this); } public void d_cube(int no,int dx,int dy){ if(no != 0){ og.setColor(Color.orange); og.fillRoundRect(dx,dy,60,60,5,5); switch (no){ case 1 : og.setColor(Color.black);og.fillArc(dx-60,dy,120,120,0,90); og.setColor(Color.orange);og.fillArc(dx-50,dy+10,100,100,0,90);break; case 2 : og.setColor(Color.black);og.fillArc(dx,dy,120,120,90,90); og.setColor(Color.orange);og.fillArc(dx+10,dy+10,100,100,90,90);break; case 3 : og.setColor(Color.black);og.fillArc(dx,dy-60,120,120,180,90); og.setColor(Color.orange);og.fillArc(dx+10,dy-50,100,100,180,90);break; case 4 : og.setColor(Color.black);og.fillArc(dx-60,dy-60,120,120,270,90); og.setColor(Color.orange);og.fillArc(dx-50,dy-50,100,100,270,90);break; } og.setColor(Color.lightGray); og.drawRoundRect(dx,dy,60,60,5,5); } } public void start(){ if(th == null){ th = new Thread(this); th.start(); } } public void stop(){ th = null; } public void run(){ while(th != null){ try{ br = br*(-1); switch (mt1){ case 1 : mx1 = mx1 - 5; if(mx1 < 30){ mx1 = 30; mn = td[sw][1]; td[sw][1] = td[sw][2];td[sw][2] = td[sw][3];td[sw][3] = td[sw][4];td[sw][4] = 0; mt1 = 2; } break; case 2 : my1 = my1 - 5; my2 = my2 + 5; if(my1 < 30){ mx1 = 30;my1 = 30;mt1 = 3; for(int d2 = sw;d2 > 1;d2 --){ td[d2][4] = td[d2-1][4]; } td[1][4] = 0; } if(my2 > sw*60+30)my2 = sw*60+30; break; case 3 : mx1 = mx1 + 5; if(mx1 > 270){ mx1 = 270;my1 = 30;mt1 = 4; } break; case 4 : my1 = my1 + 5; if(my1 > 90){ td[1][4] = mn; sw = 0; cs = 0; } break; } Thread.sleep(10); } catch (InterruptedException e){ } repaint(); } } public void update( Graphics g ){ paint( g ) ; } }