import java.applet.*; import java.awt.*; import java.awt.event.*; public class hopover extends Applet implements Runnable{ Thread th = null; Image os; Graphics og; Image kd[] = new Image[2]; Image ad[] = new Image[8]; int md[][] = {{1,1,1,3,3}, {1,1,1,3,3}, {1,1,0,2,2}, {3,3,2,2,2}, {3,3,2,2,2}}; int td[][] = new int[5][5]; int mx,my; int px = 2,py = 2; int sx = 2,sy = 2; int sw = 0,ms = 0; Button rep,und; Label spa; public void init(){ os = createImage(260,260); og = os.getGraphics(); setBackground(Color.white); for(int diy = 0;diy < 5;diy ++){ for(int dix = 0;dix < 5;dix ++){ td[diy][dix] = md[diy][dix]; } } kd[0] = getImage(getDocumentBase(),"Picture/kuro.gif"); kd[1] = getImage(getDocumentBase(),"Picture/siro.gif"); for(int ii = 0;ii < 8;ii ++){ ad[ii] = getImage(getDocumentBase(),"Picture/ar"+(ii+5)+".gif"); } setLayout(new BorderLayout()); Panel pan = new Panel(); pan.setLayout(new FlowLayout()); pan.add(und = new Button(" undo ")); pan.add(spa = new Label(" ")); pan.add(rep = new Button(" replay ")); add("South",pan); addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ if(ms == 1){ td[sy][sx] = td[my][mx]; td[my][mx] = 0; px = sx;py = sy; sx = mx;sy = my; ms = 0;sw = 0; } repaint(); } } ); addMouseMotionListener( new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ mx = (e.getX() - 30) / 40; my = (e.getY() - 30) / 40; if((sx == mx+1)&&(sy == my)&&(td[my][mx] == 1)){ sw = 1;ms = 1; }else if((sx == mx)&&(sy == my+1)&&(td[my][mx] == 1)){ sw = 2;ms = 1; }else if((sx == mx-1)&&(sy == my)&&(td[my][mx] == 2)){ sw = 3;ms = 1; }else if((sx == mx)&&(sy == my-1)&&(td[my][mx] == 2)){ sw = 4;ms = 1; }else if((sx == mx+2)&&(sy == my)&&(td[my][mx] == 1)&&(td[my][mx+1] == 2)){ sw = 5;ms = 1; }else if((sx == mx)&&(sy == my+2)&&(td[my][mx] == 1)&&(td[my+1][mx] == 2)){ sw = 6;ms = 1; }else if((sx == mx-2)&&(sy == my)&&(td[my][mx-1] == 1)&&(td[my][mx] == 2)){ sw = 7;ms = 1; }else if((sx == mx)&&(sy == my-2)&&(td[my-1][mx] == 1)&&(td[my][mx] == 2)){ sw = 8;ms = 1; }else{ sw = 0;ms = 0; } repaint(); } } ); rep.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ for(int diy = 0;diy < 5;diy ++){ for(int dix = 0;dix < 5;dix ++){ td[diy][dix] = md[diy][dix]; } } sx = 2;sy = 2;px = 2;py = 2; repaint(); } }); und.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ td[sy][sx] = td[py][px]; td[py][px] = 0; sx = px;sy = py; repaint(); } }); } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,260,260); og.setColor(new Color(255,204,255)); for(int dly = 0;dly < 3;dly ++){ for(int dlx = 0;dlx < 3;dlx ++){ og.fill3DRect(40*dlx+30,40*dly+30,40,40,true); og.fill3DRect(40*dlx+110,40*dly+110,40,40,true); } } switch(sw){ case 0 : break; case 1 : og.drawImage(ad[1],40*mx+50,40*my+28,this) ; break; case 2 : og.drawImage(ad[3],40*mx+32,40*my+50,this) ; break; case 3 : og.drawImage(ad[0],40*mx+10,40*my+28,this) ; break; case 4 : og.drawImage(ad[2],40*mx+26,40*my+10,this) ; break; } for(int iy = 0;iy < 5;iy ++){ for(int ix = 0;ix < 5;ix ++){ if((td[iy][ix] > 0)&&(td[iy][ix] < 3)){ og.drawImage(kd[td[iy][ix]-1],40*ix+35,40*iy+35,this); } } } switch(sw){ case 0 : break; case 5 : og.drawImage(ad[5],40*mx+65,40*my+28,65,43,this) ; break; case 6 : og.drawImage(ad[7],40*mx+32,40*my+65,43,65,this) ; break; case 7 : og.drawImage(ad[4],40*mx-29,40*my+28,65,43,this) ; break; case 8 : og.drawImage(ad[6],40*mx+26,40*my-28,43,65,this) ; break; } 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) ; } }