import java.applet.*; import java.awt.*; import java.awt.event.*; public class r_chart extends Applet implements Runnable{ Thread th = null; Image os; Graphics og; double pi = 3.141592; int td[][][] = {{{2,3},{4,4}}, {{6,2},{4,3}}, {{5,5},{3,2}}, {{3,5},{2,4}}, {{2,4},{3,5}}, {{3,4},{5,2}}, {{5,5},{2,4}}, {{2,6},{4,4}}}; int px[] = new int[5]; int py[] = new int[5]; double kt; int pn,sn,sf,sw,af; public void init(){ os = createImage(320,320); og = os.getGraphics(); sf = 1; addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ pn = (13-(int)((Math.atan2(e.getX()-160,e.getY()-160)+pi)*4/pi))%8; if(sf == 1){ sn = pn; sf = 2; }else{ if(pn == sn){ sw = td[pn][0][0] ; td[pn][0][0] = td[pn][1][1] ; td[pn][1][1] = sw ; sw = td[pn][0][1] ; td[pn][0][1] = td[pn][1][0] ; td[pn][1][0] = sw ; sf = 1; }else{ sw = td[pn][0][0] ; td[pn][0][0] = td[sn][0][0] ; td[sn][0][0] = sw ; sw = td[pn][0][1] ; td[pn][0][1] = td[sn][0][1] ; td[sn][0][1] = sw ; sw = td[pn][1][0] ; td[pn][1][0] = td[sn][1][0] ; td[sn][1][0] = sw ; sw = td[pn][1][1] ; td[pn][1][1] = td[sn][1][1] ; td[sn][1][1] = sw ; sf = 1; } } repaint(); } } ); } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,320,320); for(int rt = 0;rt < 8;rt ++){ og.setColor(new Color(255,190,190)); kt = Math.atan((td[rt][1][0]*Math.sin(rt*pi/4)-td[rt][1][1]*Math.sin((rt+1)*pi/4))/(td[rt][1][0]*Math.cos(rt*pi/4)-td[rt][1][1]*Math.cos((rt+1)*pi/4))); px[0] = 160+(int)(20*td[rt][1][0]*Math.cos(rt*pi/4))+(int)(3*Math.cos(kt+pi/2)); py[0] = 160+(int)(20*td[rt][1][0]*Math.sin(rt*pi/4))+(int)(3*Math.sin(kt+pi/2)); px[1] = 160+(int)(20*td[rt][1][0]*Math.cos(rt*pi/4))+(int)(3*Math.cos(kt-pi/2)); py[1] = 160+(int)(20*td[rt][1][0]*Math.sin(rt*pi/4))+(int)(3*Math.sin(kt-pi/2)); px[2] = 160+(int)(20*td[rt][1][1]*Math.cos((rt+1)*pi/4))+(int)(3*Math.cos(kt-pi/2)); py[2] = 160+(int)(20*td[rt][1][1]*Math.sin((rt+1)*pi/4))+(int)(3*Math.sin(kt-pi/2)); px[3] = 160+(int)(20*td[rt][1][1]*Math.cos((rt+1)*pi/4))+(int)(3*Math.cos(kt+pi/2)); py[3] = 160+(int)(20*td[rt][1][1]*Math.sin((rt+1)*pi/4))+(int)(3*Math.sin(kt+pi/2)); px[4] = px[0] ; py[4] = py[0] ; og.fillPolygon(px,py,5); } for(int rt = 0;rt < 8;rt ++){ og.setColor(Color.lightGray); for(int yl = 2;yl < 7;yl ++){ og.drawLine(160+(int)(20*yl*Math.cos(rt*pi/4)),160+(int)(20*yl*Math.sin(rt*pi/4)), 160+(int)(20*yl*Math.cos((rt+1)*pi/4)),160+(int)(20*yl*Math.sin((rt+1)*pi/4))); } og.setColor(Color.black); og.drawLine(160+(int)(20*Math.cos(rt*pi/4)),160+(int)(20*Math.sin(rt*pi/4)), 160+(int)(140*Math.cos(rt*pi/4)),160+(int)(140*Math.sin(rt*pi/4))); og.drawLine(160+(int)(20*Math.cos(rt*pi/4)),160+(int)(20*Math.sin(rt*pi/4)), 160+(int)(20*Math.cos((rt+1)*pi/4)),160+(int)(20*Math.sin((rt+1)*pi/4))); og.drawLine(160+(int)(140*Math.cos(rt*pi/4)),160+(int)(140*Math.sin(rt*pi/4)), 160+(int)(140*Math.cos((rt+1)*pi/4)),160+(int)(140*Math.sin((rt+1)*pi/4))); og.setColor(Color.red); kt = Math.atan((td[rt][0][0]*Math.sin(rt*pi/4)-td[rt][0][1]*Math.sin((rt+1)*pi/4))/(td[rt][0][0]*Math.cos(rt*pi/4)-td[rt][0][1]*Math.cos((rt+1)*pi/4))); px[0] = 160+(int)(20*td[rt][0][0]*Math.cos(rt*pi/4))+(int)(3*Math.cos(kt+pi/2)); py[0] = 160+(int)(20*td[rt][0][0]*Math.sin(rt*pi/4))+(int)(3*Math.sin(kt+pi/2)); px[1] = 160+(int)(20*td[rt][0][0]*Math.cos(rt*pi/4))+(int)(3*Math.cos(kt-pi/2)); py[1] = 160+(int)(20*td[rt][0][0]*Math.sin(rt*pi/4))+(int)(3*Math.sin(kt-pi/2)); px[2] = 160+(int)(20*td[rt][0][1]*Math.cos((rt+1)*pi/4))+(int)(3*Math.cos(kt-pi/2)); py[2] = 160+(int)(20*td[rt][0][1]*Math.sin((rt+1)*pi/4))+(int)(3*Math.sin(kt-pi/2)); px[3] = 160+(int)(20*td[rt][0][1]*Math.cos((rt+1)*pi/4))+(int)(3*Math.cos(kt+pi/2)); py[3] = 160+(int)(20*td[rt][0][1]*Math.sin((rt+1)*pi/4))+(int)(3*Math.sin(kt+pi/2)); px[4] = px[0] ; py[4] = py[0] ; og.fillPolygon(px,py,5); } if(sf == 2){ og.setColor(Color.blue); px[0] = 160+(int)(20*Math.cos(sn*pi/4)); py[0] = 160+(int)(20*Math.sin(sn*pi/4)); px[1] = 160+(int)(140*Math.cos(sn*pi/4)); py[1] = 160+(int)(140*Math.sin(sn*pi/4)); px[2] = 160+(int)(140*Math.cos((sn+1)*pi/4)); py[2] = 160+(int)(140*Math.sin((sn+1)*pi/4)); px[3] = 160+(int)(20*Math.cos((sn+1)*pi/4)); py[3] = 160+(int)(20*Math.sin((sn+1)*pi/4)); px[4] = px[0] ; py[4] = py[0] ; og.drawPolygon(px,py,5); } af = 1; for(int ch = 0;ch < 7;ch ++){ if(td[ch][0][1] != td[ch+1][0][0])af = 0; } if(td[7][0][1] != td[0][0][0])af = 0; og.setFont(new Font("",Font.BOLD,36)); og.setColor(Color.blue); if(af == 1)og.drawString("clear!!",100,290); 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 ) ; } }