import java.applet.*; import java.awt.*; import java.awt.event.*; public class stuff_s extends Applet implements Runnable{ Thread th = null; Image os; Graphics og; double pi = 3.141592; int td[] = {1,1,1,1,0}; int tx[] = {-40,20,40,-20,-40},ty[] = {160,160,140,140,160}; int dx[] = new int[5],dy[] = new int[5]; int px,sw,sp=4; int mx,my,md; Button sel = new Button(" >>> "); public void init(){ os = createImage(360,180); og = os.getGraphics(); add(sel); addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ if(sw == 0){ if((e.getX()>30)&&(e.getX()<330)&&(e.getY()>90)&&(e.getY()<150)){ px = (e.getX()-30)/60; if((td[px] != 0)&&(Math.abs(sp-px) != 1)){ mx = px * 60 + 60; my = 120; sw = 1; repaint(); } } } } } ); sel.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ td[sp] = 1; sp = sp + 1; if(sp > 4)sp = 1; td[sp] = 0; for(int d1 = 0;d1 < 5;d1 ++){ if(td[d1] == -1)td[d1] = 1; } repaint(); } }); } public void paint(Graphics g){ og.setColor(new Color(235,255,255)); og.fillRect(0,0,360,180); for(int d1 = 0;d1 < 5;d1 ++){ dx[d1] = tx[d1]; dy[d1] = ty[d1]; } for(int d1 = 0;d1 < 5;d1 ++){ for(int d2 = 0;d2 < 5;d2 ++){ dx[d2] = dx[d2]+60; } og.setColor(Color.green); og.fillPolygon(dx,dy,5); og.setColor(Color.black); og.drawPolygon(dx,dy,5); } if(sw == 0){ for(int d1 = 0;d1 < 5;d1 ++){ if(td[d1] != 0){ if(td[d1] == 1){ draw_b(d1*60+60,120,0); }else if(td[d1] == -1){ draw_b(d1*60+60,120,180); } } } }else{ if(td[px] == 1){ draw_b(mx,my,0); }else{ draw_b(mx,my,180); } for(int d1 = 0;d1 < 5;d1 ++){ if((px-d1)*(sp-d1) < 0){ md = (360 + (int)(Math.atan2(mx-(d1*60+60),my-120)*180/pi)) % 360 - 90; if(px < sp){ if(td[d1] == 1){ draw_b(d1*60+60,120,md-180); }else if(td[d1] == -1){ draw_b(d1*60+60,120,md); } }else{ if(td[d1] == 1){ draw_b(d1*60+60,120,md); }else if(td[d1] == -1){ draw_b(d1*60+60,120,180-md); } } }else if((px-d1)*(sp-d1) > 0){ if(td[d1] == 1){ draw_b(d1*60+60,120,0); }else if(td[d1] == -1){ draw_b(d1*60+60,120,180); } } } } if((td[1]==1)&&(td[2]==1)&&(td[3]==1)&&(td[4]==1)){ og.setColor(Color.red); og.setFont(new Font("",Font.BOLD,48)); og.drawString("clear!!",120,80); } g.drawImage(os,0,0,this); } public void draw_b(int dx,int dy,int dr){ og.setColor(Color.white); og.fillOval(dx-30,dy-30,60,60); og.setColor(Color.black); og.drawOval(dx-30,dy-30,60,60); og.setColor(Color.yellow); og.fillOval(dx+(int)(15*Math.cos(dr*pi/180))-15,dy-(int)(15*Math.sin(dr*pi/180))-15,30,30); og.setColor(Color.black); og.drawOval(dx+(int)(15*Math.cos(dr*pi/180))-15,dy-(int)(15*Math.sin(dr*pi/180))-15,30,30); og.fillOval(dx+(int)(25*Math.cos(dr*pi/180))-5,dy-(int)(25*Math.sin(dr*pi/180))-5,10,10); } public void start(){ if(th == null){ th = new Thread(this); th.start(); } } public void stop(){ th = null; } public void run(){ while(th != null){ try{ switch(sw){ case 1 : my = my - 3; if(my < 60){ my = 60; sw = 2; } break; case 2 : if(px < sp){ mx = mx + 3; if(mx > sp * 60 + 60){ mx = sp * 60 + 60; sw = 3; } }else{ mx = mx - 3; if(mx < sp * 60 + 60){ mx = sp * 60 + 60; sw = 3; } } break; case 3 : my = my + 3; if(my > 120){ my = 120; td[sp] = td[px]; if(px < sp){ for(int t1 = px + 1;t1 < sp;t1 ++){ td[t1] = td[t1] * (-1); } }else{ for(int t1 = sp + 1;t1 < px;t1 ++){ td[t1] = td[t1] * (-1); } } td[px] = 0;sp = px; sw = 0; } break; } Thread.sleep(10); } catch (InterruptedException e){ } repaint(); } } public void update( Graphics g ){ paint( g ) ; } }