import java.applet.*; import java.awt.*; import java.awt.event.*; import java.lang.Math; public class reverse extends Applet implements Runnable{ Thread th = null; double r2 = 1.4142; double pi = 3.1415; int mR = 120; int cx = 200,cy = 200; int cR,nn = 0,co = 0; int dx,dy; double px,py; boolean cp[] = {false,false,false,false,false,false,false,false,false}; Button shu = new Button(" shuffle "); Color c1,c2; Image os; Graphics og; public void init(){ setBackground(Color.white); os = createImage(400, 380); og = os.getGraphics(); cR = (int)(mR * Math.sin(pi / 8)) - 10; setLayout(new FlowLayout()); add(shu); addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ px = (double)(e.getX() - cx) ; py = (double)(e.getY() - cy); nn = (10 - (int)(Math.ceil(Math.atan2(px,py) / (pi / 4)))) % 8; if(((px * px + py * py) > (mR - cR) * (mR - cR)) && ((px * px + py * py) < (mR + cR) * (mR + cR))){ cp[nn] = !cp[nn]; cp[(nn + 1) % 8] = !cp[(nn + 1) % 8]; cp[(nn + 7) % 8] = !cp[(nn + 7) % 8]; th.resume(); } } } ); shu.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ for(int k = 0;k < 8;k++){ if(Math.random() < 0.5){ cp[k] = true; }else{ cp[k] = false; } } repaint(); } }); } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,400,380); og.setColor(Color.black); for(int k = 0;k < 8;k ++){ if((k != nn) && (k != ((nn + 1) % 8)) && (k != ((nn + 7) % 8))){ dx = (int)(mR * Math.cos((2 * k + 1) * pi / 8)) - cR + cx; dy = (int)(mR * Math.sin((2 * k + 1) * pi / 8)) - cR + cy; if(cp[k] == false){ og.setColor(Color.red); }else{ og.setColor(Color.blue); } og.fillOval(dx,dy,2 * cR,2 * cR); }else{ if(cp[nn] == false){ c1 = Color.blue ; c2 = Color.red; }else{ c1 = Color.red ; c2 = Color.blue; } dx = (int)(mR * Math.cos((2 * nn + 1) * pi / 8)) - cR + cx; dy = (int)(mR * Math.sin((2 * nn + 1) * pi / 8)) - cR + cy; if(co == 0){ og.setColor(c2); og.fillOval(dx + co,dy,2 * (cR - co),2 * cR); }else if(co < cR){ og.setColor(c1); og.fillOval(dx + co,dy,2 * (cR - co),2 * cR); }else{ og.setColor(c2); og.fillOval(dx + 2 * cR - co,dy,2 * (co - cR),2 * cR); } if(cp[(nn + 1) % 8] == false){ c1 = Color.blue ; c2 = Color.red; }else{ c1 = Color.red ; c2 = Color.blue; } dx = (int)(mR * Math.cos((2 * ((nn + 1) % 8) + 1) * pi / 8)) - cR + cx; dy = (int)(mR * Math.sin((2 * ((nn + 1) % 8) + 1) * pi / 8)) - cR + cy; if(co == 0){ og.setColor(c2); og.fillOval(dx + co,dy,2 * (cR - co),2 * cR); }else if(co < cR){ og.setColor(c1); og.fillOval(dx + co,dy,2 * (cR - co),2 * cR); }else{ og.setColor(c2); og.fillOval(dx + 2 * cR - co,dy,2 * (co - cR),2 * cR); } if(cp[(nn + 7) % 8] == false){ c1 = Color.blue ; c2 = Color.red; }else{ c1 = Color.red ; c2 = Color.blue; } dx = (int)(mR * Math.cos((2 * ((nn + 7) % 8) + 1) * pi / 8)) - cR + cx; dy = (int)(mR * Math.sin((2 * ((nn + 7) % 8) + 1) * pi / 8)) - cR + cy; if(co == 0){ og.setColor(c2); og.fillOval(dx + co,dy,2 * (cR - co),2 * cR); }else if(co < cR){ og.setColor(c1); og.fillOval(dx + co,dy,2 * (cR - co),2 * cR); }else{ og.setColor(c2); og.fillOval(dx + 2 * cR - co,dy,2 * (co - cR),2 * cR); } } } g.drawImage(os,0,0,this ); } 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 { co ++; if(co > 2 * cR){ th.suspend(); co = 0; } Thread.sleep(20); } catch (InterruptedException e){ } repaint(); } } public void update( Graphics g ) { paint( g ) ; } }