import java.applet.*; import java.awt.*; import java.awt.event.*; public class r_block extends Applet implements Runnable{ Image os; Graphics og; Thread th = null; int td[][] = new int[8][8]; int bd[][][] = {{{ 1, 0, 0,-1, 0, 0,-1, 0}, { 0, 0, 0,-1,-1, 0, 0, 0}, {-1, 0, 0, 0, 0, 0, 0, 0}, {-1, 0,-1,-1, 0, 0, 0, 0}, { 0, 0, 0, 0,-1,-1, 0,-1}, { 0, 0, 0, 0, 0, 0, 0,-1}, { 0, 0, 0,-1,-1, 0, 0, 0}, { 0,-1, 0, 0,-1, 0, 0, 2}}, {{ 1, 0, 0, 0, 0, 0, 0, -1}, { 0, 0, 0, 0,-1, 0, 0, 0}, { 0, 0,-1, 0, 0, 0, 0, 0}, { 0, 0, 0, 0,-1,-1, 0, 0}, { 0,-1, 0, 0,-1,-1, 0,-1}, { 0,-1, 0,-1,-1, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0,-1, 0, 0, 2}}, {{ 0, 0, 0, 0, 0,-1, 0, 0}, { 0,-1,-1, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0,-1, 0, 0}, { 0, 2, 1,-1, 0, 0, 0, 0}, {-1, 0, 0,-1, 0, 0, 0,-1}, {-1, 0,-1, 0, 0,-1, 0, 0}, { 0, 0, 0, 0,-1, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}}, {{ 0, 0, 0, 0, 0, 0, 0, 0}, { 1, 0,-1, 0, 0, 2, 0, 0}, { 0, 0, 0, 0,-1, 0,-1, 0}, { 0,-1, 0, 0, 0, 0, 0, 0}, { 0,-1, 0,-1, 0, 0, 0, 0}, { 0, 0, 0, 0, 0,-1,-1, 0}, { 0, 0, 0,-1, 0, 0, 0, 0}, {-1, 0, 0, 0, 0, 0, 0, 0}}}; Color wo = new Color(102,132,132); Color bg = new Color(224,224,204); Image ar[] = new Image[4]; int no = 0,fg = 0,st = 1; int bx,by,dd,px,py,gx,gy; double pi = 3.141592,r2 = 1.414214,r5 = 2.236068,ang; int x1,y1,x2,y2,lx1,ly1,lx2,ly2; public void init(){ os = createImage(500,360); og = os.getGraphics(); setBackground(Color.white); R_set(); ar[0] = getImage(getDocumentBase(),"Picture/arw.gif"); ar[1] = getImage(getDocumentBase(),"Picture/are.gif"); ar[2] = getImage(getDocumentBase(),"Picture/arn.gif"); ar[3] = getImage(getDocumentBase(),"Picture/ars.gif"); addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ px = e.getX(); py = e.getY(); if(fg == 0){ if((Math.abs(px-370)<20)&&(Math.abs(py-170)<20)){ if((st == 1)&&(td[by][bx+1] >= 0)&&(td[by][bx+2] >= 0)){ dd = 1;fg = 1;th.resume(); }else if((st == 2)&&(td[by][bx+2] >= 0)){ dd = 5;fg = 1;th.resume(); }else if((st == 3)&&(td[by][bx+1] >= 0)&&(td[by+1][bx+1] >= 0)){ dd = 9;fg = 1;th.resume(); } }else if((Math.abs(px-340)<20)&&(Math.abs(py-120)<20)){ if((st == 1)&&(td[by-1][bx] >= 0)&&(td[by-2][bx] >= 0)){ dd = 2;fg = 1;th.resume(); }else if((st == 2)&&(td[by-1][bx] >= 0)&&(td[by-1][bx+1] >= 0)){ dd = 6;fg = 1;th.resume(); }else if((st == 3)&&(td[by-1][bx] >= 0)){ dd = 10;fg = 1;th.resume(); } }else if((Math.abs(px-310)<20)&&(Math.abs(py-170)<20)){ if((st == 1)&&(td[by][bx-1] >= 0)&&(td[by][bx-2] >= 0)){ dd = 3;fg = 1;th.resume(); }else if((st == 2)&&(td[by][bx-1] >= 0)){ dd = 7;fg = 1;th.resume(); }else if((st == 3)&&(td[by][bx-1] >= 0)&&(td[by+1][bx-1] >= 0)){ dd = 11;fg = 1;th.resume(); } }else if((Math.abs(px-340)<20)&&(Math.abs(py-220)<20)){ if((st == 1)&&(td[by+1][bx] >= 0)&&(td[by+2][bx] >= 0)){ dd = 4;fg = 1;th.resume(); }else if((st == 2)&&(td[by+1][bx] >= 0)&&(td[by+1][bx+1] >= 0)){ dd = 8;fg = 1;th.resume(); }else if((st == 3)&&(td[by+2][bx] >= 0)){ dd = 12;fg = 1;th.resume(); } }else if((Math.abs(px-340)<50)&&(Math.abs(py-268)<13)){ no ++ ; if(no > 3)no = 0 ; R_set() ; } } repaint(); } } ); } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,500,360); if((bx == gx)&&(by == gy)&&(st == 1)){ og.setColor(Color.red); }else{ og.setColor(wo); } og.fill3DRect(20,20,260,260,true); og.setColor(bg); og.fillRect(30,30,240,240); for(int px = 0;px < 8;px ++){ for(int py = 0;py < 8;py ++){ if(td[py][px] == -1){ og.setColor(wo); og.fill3DRect(px*30+30,py*30+30,30,30,true); }else if(td[py][px] == 1){ og.setColor(Color.red); og.drawRect(px*30+35,py*30+35,20,20); }else if(td[py][px] == 2){ og.setColor(Color.blue); og.drawRect(px*30+35,py*30+35,20,20); } } } og.drawImage(ar[0],290,150,this); og.drawImage(ar[1],350,150,this); og.drawImage(ar[2],320,100,this); og.drawImage(ar[3],320,200,this); og.setColor(Color.red); og.drawRect(290,25,20,20); og.setColor(Color.blue); og.drawRect(290,65,20,20); og.setFont(new Font("",Font.BOLD,16)); og.setColor(Color.black); og.drawString("START",320,40); og.drawString("GOAL",320,80); og.drawRect(290,255,100,25); og.drawString("NO."+(no+1),325,273); og.setColor(Color.yellow); og.fillRect(x1,y1,lx1,ly1); og.fillRect(x2,y2,lx2,ly2); og.setColor(Color.black); og.drawRect(x1,y1,lx1,ly1); og.drawRect(x2,y2,lx2,ly2); g.drawImage(os,0,0,this); } public void R_set(){ for(int idx = 0;idx < 8;idx ++){ for(int idy = 0;idy < 8;idy ++){ td[idy][idx] = bd[no][idy][idx]; if(td[idy][idx] == 1){ bx = idx ; by = idy ; } if(td[idy][idx] == 2){ gx = idx ; gy = idy ; } } } ang = 0.5; dd = 1; x1 = bx * 30 + 30 ; y1 = by * 30 + 30 ; x2 = x1 ; y2 = y1 ; lx1 = 0 ; ly1 = 30 ; lx2 = 30 ; ly2 = 30 ; } 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{ ang = ang + pi / 90; if(ang > pi / 2){ switch(dd){ case 1 : bx = bx + 1 ; st = 2 ; break ; case 2 : by = by - 2 ; st = 3 ; break ; case 3 : bx = bx - 2 ; st = 2 ; break ; case 4 : by = by + 1 ; st = 3 ; break ; case 5 : bx = bx + 2 ; st = 1 ; break ; case 6 : by = by - 1 ; st = 2 ; break ; case 7 : bx = bx - 1 ; st = 1 ; break ; case 8 : by = by + 1 ; st = 2 ; break ; case 9 : bx = bx + 1 ; st = 3 ; break ; case 10 : by = by - 1 ; st = 1 ; break ; case 11 : bx = bx - 1 ; st = 3 ; break ; case 12 : by = by + 2 ; st = 1 ; break ; } fg = 0 ; ang = 0 ; th.suspend(); } if(dd == 1){ x1 = bx * 30 + 60 - (int)(Math.round(30 * Math.cos(ang))); y1 = by * 30 + 30; x2 = bx * 30 + 60 - (int)(Math.round(30 * r5 * Math.cos(ang + 1.10715))); y2 = by * 30 + 30; lx1 = x2 - x1; ly1 = 30; lx2 = bx * 30 + 60 + (int)(Math.round(60 * Math.cos(pi/2 - ang))) - x2; ly2 = 30; }else if(dd == 2){ x1 = bx * 30 + 30; y1 = by * 30 + 30 - (int)(Math.round(60 * Math.cos(pi/2 - ang))); x2 = bx * 30 + 30; y2 = by * 30 + 30 + (int)(Math.round(30 * r5 * Math.cos(ang + 1.10715))); lx1 = 30; ly1 = y2 - y1; lx2 = 30; ly2 = by * 30 + 30 + (int)(Math.round(30 * Math.cos(ang))) - y2; }else if(dd == 3){ x1 = bx * 30 + 30 - (int)(Math.round(60 * Math.cos(pi/2 - ang))); y1 = by * 30 + 30; x2 = bx * 30 + 30 + (int)(Math.round(30 * r5 * Math.cos(ang + 1.10715))); y2 = by * 30 + 30; lx1 = x2 - x1; ly1 = 30; lx2 = bx * 30 + 30 + (int)(Math.round(30 * Math.cos(ang))) - x2; ly2 = 30; }else if(dd == 4){ x1 = bx * 30 + 30; y1 = by * 30 + 60 - (int)(Math.round(30 * Math.cos(ang))); x2 = bx * 30 + 30; y2 = by * 30 + 60 - (int)(Math.round(30 * r5 * Math.cos(ang + 1.10715))); lx1 = 30; ly1 = y2 - y1; lx2 = 30; ly2 = by * 30 + 60 + (int)(Math.round(60 * Math.cos(pi/2 - ang))) - y2; }else if(dd == 5){ x1 = bx * 30 + 90 - (int)(Math.round(60 * Math.cos(ang))); y1 = by * 30 + 30; x2 = bx * 30 + 90 - (int)(Math.round(30 * r5 * Math.cos(ang + 0.4636476))); y2 = by * 30 + 30; lx1 = x2 - x1; ly1 = 30; lx2 = bx * 30 + 90 + (int)(Math.round(30 * Math.cos(pi/2 - ang))) - x2; ly2 = 30; }else if(dd == 6){ x1 = bx * 30 + 30; y1 = by * 30 + 30 - (int)(Math.round(30 * Math.cos(pi/2 - ang))); x2 = bx * 30 + 30; y2 = by * 30 + 30 + (int)(Math.round(30 * r2 * Math.cos(ang + pi/4))); lx1 = 60; ly1 = y2 - y1; lx2 = 60; ly2 = by * 30 + 30 + (int)(Math.round(30 * Math.cos(ang))) - y2; }else if(dd == 7){ x1 = bx * 30 + 30 - (int)(Math.round(30 * Math.cos(pi/2 - ang))); y1 = by * 30 + 30; x2 = bx * 30 + 30 + (int)(Math.round(30 * r5 * Math.cos(ang + 0.4636476))); y2 = by * 30 + 30; lx1 = x2 - x1; ly1 = 30; lx2 = bx * 30 + 30 + (int)(Math.round(60 * Math.cos(ang))) - x2; ly2 = 30; }else if(dd == 8){ x1 = bx * 30 + 30; y1 = by * 30 + 60 - (int)(Math.round(30 * Math.cos(ang))); x2 = bx * 30 + 30; y2 = by * 30 + 60 - (int)(Math.round(30 * r2 * Math.cos(ang + pi/4))); lx1 = 60; ly1 = y2 - y1; lx2 = 60; ly2 = by * 30 + 60 + (int)(Math.round(30 * Math.cos(pi/2 - ang))) - y2; }else if(dd == 9){ x1 = bx * 30 + 60 - (int)(Math.round(30 * Math.cos(ang))); y1 = by * 30 + 30; x2 = bx * 30 + 60 - (int)(Math.round(30 * r2 * Math.cos(ang + pi/4))); y2 = by * 30 + 30; lx1 = x2 - x1; ly1 = 60; lx2 = bx * 30 + 60 + (int)(Math.round(30 * Math.cos(pi/2 - ang))) - x2; ly2 = 60; }else if(dd == 10){ x1 = bx * 30 + 30; y1 = by * 30 + 30 - (int)(Math.round(30 * Math.cos(pi/2 - ang))); x2 = bx * 30 + 30; y2 = by * 30 + 30 + (int)(Math.round(30 * r5 * Math.cos(ang + 0.4636476))); lx1 = 30; ly1 = y2 - y1; lx2 = 30; ly2 = by * 30 + 30 + (int)(Math.round(60 * Math.cos(ang))) - y2; }else if(dd == 11){ x1 = bx * 30 + 30 - (int)(Math.round(30 * Math.cos(pi/2 - ang))); y1 = by * 30 + 30; x2 = bx * 30 + 30 + (int)(Math.round(30 * r2 * Math.cos(ang + pi/4))); y2 = by * 30 + 30; lx1 = x2 - x1; ly1 = 60; lx2 = bx * 30 + 30 + (int)(Math.round(30 * Math.cos(ang))) - x2; ly2 = 60; }else if(dd == 12){ x1 = bx * 30 + 30; y1 = by * 30 + 90 - (int)(Math.round(60 * Math.cos(ang))); x2 = bx * 30 + 30; y2 = by * 30 + 90 - (int)(Math.round(30 * r5 * Math.cos(ang + 0.4636476))); lx1 = 30; ly1 = y2 - y1; lx2 = 30; ly2 = by * 30 + 90 + (int)(Math.round(30 * Math.cos(pi/2 - ang))) - y2; } Thread.sleep(30); } catch (InterruptedException e){} repaint(); } } public void update( Graphics g ){ paint( g ) ; } }