import java.applet.*; import java.awt.*; public class Hakoiri extends Applet implements Runnable{ int md[][] = {{-2,-2,-2,-2,-2,-2,-2}, {-2, 1, 1, 3, 3, 6,-2}, {-2, 0, 0, 5, 7,-1,-2}, {-2, 0, 0, 5, 8,-1,-2}, {-2, 2, 2, 4, 4, 9,-2}, {-2,-2,-2,-2,-2,-2,-2}}; int mdc[][]= {{0,0,0,0,0,0,0}, {0,0,0,0,0,0,0}, {0,0,0,0,0,0,0}, {0,0,0,0,0,0,0}, {0,0,0,0,0,0,0}, {0,0,0,0,0,0,0}}; int px[] = {2,1,4,1,4,2,1,2,3,4}; int py[] = {1,1,1,3,3,3,5,4,4,5}; int pxc[] = {0,0,0,0,0,0,0,0,0,0}; int pyc[] = {0,0,0,0,0,0,0,0,0,0}; int sx,sy; int cx,cy; int bx[] = {10,230,230,170,170,220,220,20, 20, 70, 70, 10,10}; int by[] = {10, 10,280,280,270,270, 20,20,270,270,280,280,10}; int pd; int count = 0; Image p1,p2,p3,p4; Button rep = new Button(" replay "); Thread th = null; Image os; Graphics og; public void init(){ setLayout(new BorderLayout()); Panel pan = new Panel(); pan.setLayout(new FlowLayout()); pan.add(rep); add("South",pan); p1 = getImage(getDocumentBase(),"Picture/p_dai.gif"); p2 = getImage(getDocumentBase(),"Picture/p_tate.gif"); p3 = getImage(getDocumentBase(),"Picture/p_yoko.gif"); p4 = getImage(getDocumentBase(),"Picture/p_syo.gif"); setBackground(Color.white); os = createImage(240,330); og = os.getGraphics(); for(int i = 0;i < 7;i ++){ for(int j = 0;j < 6;j ++){ mdc[j][i] = md[j][i]; } } for(int k = 0;k < 10;k ++){ pxc[k] = px[k]; pyc[k] = py[k]; } } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,240,330); og.setColor(Color.black); og.setColor(Color.darkGray); og.fillPolygon(bx,by,13); og.setFont(new Font("Century",Font.PLAIN,48)); og.setColor(Color.red); og.drawString("exit",85,260); og.drawImage(p1,(px[0]-1)*50+20,(py[0]-1)*50+20,this); for(int i = 1;i < 5;i ++){ og.drawImage(p2,(px[i]-1)*50+20,(py[i]-1)*50+20,this); } og.drawImage(p3,(px[5]-1)*50+20,(py[5]-1)*50+20,this); for(int i = 6;i < 10;i ++){ og.drawImage(p4,(px[i]-1)*50+20,(py[i]-1)*50+20,this); } og.setFont(new Font("Century",Font.PLAIN,16)); og.setColor(Color.black); og.drawString("Count = "+count,140,295); g.drawImage(os,0,0,this); } public boolean mouseDown(Event e,int x,int y){ cx = (x - 20) / 50 + 1; cy = (y - 20) / 50 + 1; pd = md[cx][cy]; if(pd == 0){ sx = (px[pd]-1)*50+20 + 50; sy = (py[pd]-1)*50+20 + 50; if((x - sx > sy - y) && (x - sx > y - sy) && (md[px[pd]+2][py[pd]] == -1) && (md[px[pd]+2][py[pd]+1] == -1)){ md[px[pd]][py[pd]] = -1; md[px[pd]][py[pd]+1] = -1; md[px[pd]+2][py[pd]] = pd; md[px[pd]+2][py[pd]+1] = pd; px[pd] ++; count ++; }else if((x - sx < sy - y) && (x - sx > y - sy) && (md[px[pd]][py[pd]-1] == -1) && (md[px[pd]+1][py[pd]-1] == -1)){ md[px[pd]][py[pd]+1] = -1; md[px[pd]+1][py[pd]+1] = -1; md[px[pd]][py[pd]-1] = pd; md[px[pd]+1][py[pd]-1] = pd; py[pd] --; count ++; }else if((x - sx > sy - y) && (x - sx < y - sy) && (md[px[pd]][py[pd]+2] == -1) && (md[px[pd]+1][py[pd]+2] == -1)){ md[px[pd]][py[pd]] = -1; md[px[pd]+1][py[pd]] = -1; md[px[pd]][py[pd]+2] = pd; md[px[pd]+1][py[pd]+2] = pd; py[pd] ++; count ++; }else if((x - sx < sy - y) && (x - sx < y - sy) && (md[px[pd]-1][py[pd]] == -1) && (md[px[pd]-1][py[pd]+1] == -1)){ md[px[pd]+1][py[pd]] = -1; md[px[pd]+1][py[pd]+1] = -1; md[px[pd]-1][py[pd]] = pd; md[px[pd]-1][py[pd]+1] = pd; px[pd] --; count ++; }else{ } }else if((pd > 0) && (pd < 5)){ sx = (px[pd]-1)*50+20 + 25; sy = (py[pd]-1)*50+20 + 50; if((x - sx > 2*(sy - y)) && (x - sx > 2*(y - sy)) && (md[px[pd]+1][py[pd]] == -1) && (md[px[pd]+1][py[pd]+1] == -1)){ md[px[pd]][py[pd]] = -1; md[px[pd]][py[pd]+1] = -1; md[px[pd]+1][py[pd]] = pd; md[px[pd]+1][py[pd]+1] = pd; px[pd] ++; count ++; }else if((x - sx < 2*(sy - y)) && (x - sx > 2*(y - sy)) && (md[px[pd]][py[pd]-1] == -1)){ md[px[pd]][py[pd]+1] = -1; md[px[pd]][py[pd]-1] = pd; py[pd] --; count ++; }else if((x - sx > 2*(sy - y)) && (x - sx < 2*(y - sy)) && (md[px[pd]][py[pd]+2] == -1)){ md[px[pd]][py[pd]] = -1; md[px[pd]][py[pd]+2] = pd; py[pd] ++; count ++; }else if((x - sx < 2*(sy - y)) && (x - sx < 2*(y - sy)) && (md[px[pd]-1][py[pd]] == -1) && (md[px[pd]-1][py[pd]+1] == -1)){ md[px[pd]][py[pd]] = -1; md[px[pd]][py[pd]+1] = -1; md[px[pd]-1][py[pd]] = pd; md[px[pd]-1][py[pd]+1] = pd; px[pd] --; count ++; }else{ } }else if(pd == 5){ sx = (px[pd]-1)*50+20 + 50; sy = (py[pd]-1)*50+20 + 25; if((2*(x - sx) > sy - y) && (2*(x - sx) > y - sy) && (md[px[pd]+2][py[pd]] == -1)){ md[px[pd]][py[pd]] = -1; md[px[pd]+2][py[pd]] = pd; px[pd] ++; count ++; }else if((2*(x - sx) < sy - y) && (2*(x - sx) > y - sy) && (md[px[pd]][py[pd]-1] == -1) && (md[px[pd]+1][py[pd]-1] == -1)){ md[px[pd]][py[pd]] = -1; md[px[pd]+1][py[pd]] = -1; md[px[pd]][py[pd]-1] = pd; md[px[pd]+1][py[pd]-1] = pd; py[pd] --; count ++; }else if((2*(x - sx) > sy - y) && (2*(x - sx) < y - sy) && (md[px[pd]][py[pd]+1] == -1) && (md[px[pd]+1][py[pd]+1] == -1)){ md[px[pd]][py[pd]] = -1; md[px[pd]+1][py[pd]] = -1; md[px[pd]][py[pd]+1] = pd; md[px[pd]+1][py[pd]+1] = pd; py[pd] ++; count ++; }else if((2*(x - sx) < sy - y) && (2*(x - sx) < y - sy) && (md[px[pd]-1][py[pd]] == -1)){ md[px[pd]+1][py[pd]] = -1; md[px[pd]-1][py[pd]] = pd; px[pd] --; count ++; }else{ } }else if((pd > 5) && (pd < 10)){ sx = (px[pd]-1)*50+20 + 25; sy = (py[pd]-1)*50+20 + 25; if((x - sx > sy - y) && (x - sx > y - sy) && (md[px[pd]+1][py[pd]] == -1)){ md[px[pd]][py[pd]] = -1; md[px[pd]+1][py[pd]] = pd; px[pd] ++; count ++; }else if((x - sx < sy - y) && (x - sx > y - sy) && (md[px[pd]][py[pd]-1] == -1)){ md[px[pd]][py[pd]] = -1; md[px[pd]][py[pd]-1] = pd; py[pd] --; count ++; }else if((x - sx > sy - y) && (x - sx < y - sy) && (md[px[pd]][py[pd]+1] == -1)){ md[px[pd]][py[pd]] = -1; md[px[pd]][py[pd]+1] = pd; py[pd] ++; count ++; }else if((x - sx < sy - y) && (x - sx < y - sy) && (md[px[pd]-1][py[pd]] == -1)){ md[px[pd]][py[pd]] = -1; md[px[pd]-1][py[pd]] = pd; px[pd] --; count ++; }else{ } }else{ } repaint(); return true; } public boolean action(Event e,Object o){ if(e.target == rep){ for(int i = 0;i < 7;i ++){ for(int j = 0;j < 6;j ++){ md[j][i] = mdc[j][i]; } } for(int k = 0;k < 10;k ++){ px[k] = pxc[k]; py[k] = pyc[k]; } } count = 0; repaint(); return true; } 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 ) ; } }