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) ;
}
}
