import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Stack;
import javax.swing.JOptionPane;
import javax.swing.JPanel;class mainpanel extends JPanel
implements KeyListener
{ int max;
int map[][];
int maptmp[][];
int manX;
int manY;
int boxnum;
Image myImage[];
int len;
public int level;
Stack mystack; mainpanel()
{
max = 50;
len = 30;
level = 1;
mystack = new Stack();
setBounds(15, 50, 600, 600);
setBackground(Color.white);
addKeyListener(this);
myImage = new Image[10];
for (int i = 0; i < 10; i++)
myImage[i] = Toolkit.getDefaultToolkit().getImage((new StringBuilder()).append("pic\\").append(i).append(".gif").toString()); setVisible(true);
}
int maxlevel()
{
return max;
} public void paint(Graphics g)
{
for (int i = 0; i < 20; i++)
{
for (int j = 0; j < 20; j++)
g.drawImage(myImage[map[j][i]], i * len, j * len, this); } g.setColor(new Color(0, 0, 0));
g.setFont(new Font("楷体_2312", 1, 30));
g.drawString("现在是第", 150, 40);
g.drawString(String.valueOf(level), 310, 40);
g.drawString("关", 360, 40);
} public void keyPressed(KeyEvent keyevent)
{
if (keyevent.getKeyCode() == 38)
moveup();
if (keyevent.getKeyCode() == 40)
movedown();
if (keyevent.getKeyCode() == 37)
moveleft();
if (keyevent.getKeyCode() == 39)
moveright();
if (iswin())
{
if (level == max)
{
JOptionPane.showMessageDialog(this, "恭喜您通过最后一关!!!");
} else
{
String s = (new StringBuilder()).append("恭喜您通过第").append(level).append("关!!!\n是否要进入下一关?").toString();
int i = 0;
String s1 = "过关";
int j = 0;
j = JOptionPane.showConfirmDialog(null, s, s1, i);
if (j == 1)
System.exit(0);

}
mystack.removeAllElements();
}
} public void keyTyped(KeyEvent keyevent)
{
} public void keyReleased(KeyEvent keyevent)
{
} boolean isMystackEmpty()
{
return mystack.isEmpty();
} int back()
{
return ((Integer)mystack.pop()).intValue();
} void remove()
{
mystack.removeAllElements();
} void moveup()
{
if (map[manY - 1][manX] == 2 || map[manY - 1][manX] == 4)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY - 1][manX] = 8;
repaint();
manY--;
mystack.push(Integer.valueOf(10));
} else
if (map[manY - 1][manX] == 3)
{
if (map[manY - 2][manX] == 4)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY - 1][manX] = 8;
map[manY - 2][manX] = 9;
repaint();
manY--;
mystack.push(Integer.valueOf(11));
} else
if (map[manY - 2][manX] == 2)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY - 1][manX] = 8;
map[manY - 2][manX] = 3;
repaint();
manY--;
mystack.push(Integer.valueOf(11));
} else
{
map[manY][manX] = 8;
repaint();
}
} else
if (map[manY - 1][manX] == 9)
if (map[manY - 2][manX] == 4)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY - 1][manX] = 8;
map[manY - 2][manX] = 9;
repaint();
manY--;
mystack.push(Integer.valueOf(11));
} else
if (map[manY - 2][manX] == 2)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY - 1][manX] = 8;
map[manY - 2][manX] = 3;
repaint();
manY--;
mystack.push(Integer.valueOf(11));
} else
{
map[manY][manX] = 8;
repaint();
}
if (map[manY - 1][manX] == 1)
{
map[manY][manX] = 8;
repaint();
}
} void backup(int i)
{
int j = i;
if (j == 10)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
} else
if (j == 11)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 9;
else
map[manY][manX] = 3;
if (maptmp[manY - 1][manX] == 4 || maptmp[manY - 1][manX] == 9)
map[manY - 1][manX] = 4;
else
map[manY - 1][manX] = 2;
}
map[manY + 1][manX] = 8;
repaint();
manY++;
} void movedown()
{
if (map[manY + 1][manX] == 2 || map[manY + 1][manX] == 4)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY + 1][manX] = 5;
repaint();
manY++;
mystack.push(Integer.valueOf(20));
} else
if (map[manY + 1][manX] == 3)
{
if (map[manY + 2][manX] == 4)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY + 1][manX] = 5;
map[manY + 2][manX] = 9;
repaint();
manY++;
mystack.push(Integer.valueOf(21));
} else
if (map[manY + 2][manX] == 2)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY + 1][manX] = 5;
map[manY + 2][manX] = 3;
repaint();
manY++;
mystack.push(Integer.valueOf(21));
} else
{
map[manY][manX] = 5;
repaint();
}
} else
if (map[manY + 1][manX] == 9)
{
if (map[manY + 2][manX] == 4)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY + 1][manX] = 5;
map[manY + 2][manX] = 9;
repaint();
manY++;
mystack.push(Integer.valueOf(21));
} else
if (map[manY + 2][manX] == 2)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY + 1][manX] = 5;
map[manY + 2][manX] = 3;
repaint();
manY++;
mystack.push(Integer.valueOf(21));
} else
{
map[manY][manX] = 5;
repaint();
}
} else
if (map[manY + 1][manX] == 1)
{
map[manY][manX] = 5;
repaint();
}
}
void moveleft()
{
if (map[manY][manX - 1] == 2 || map[manY][manX - 1] == 4)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY][manX - 1] = 6;
repaint();
manX--;
mystack.push(Integer.valueOf(30));
} else
if (map[manY][manX - 1] == 3)
{
if (map[manY][manX - 2] == 4)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY][manX - 1] = 6;
map[manY][manX - 2] = 9;
repaint();
manX--;
mystack.push(Integer.valueOf(31));
} else
if (map[manY][manX - 2] == 2)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY][manX - 1] = 6;
map[manY][manX - 2] = 3;
repaint();
manX--;
mystack.push(Integer.valueOf(31));
} else
{
map[manY][manX] = 6;
repaint();
}
} else
if (map[manY][manX - 1] == 9)
{
if (map[manY][manX - 2] == 4)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY][manX - 1] = 6;
map[manY][manX - 2] = 9;
repaint();
manX--;
mystack.push(Integer.valueOf(31));
} else
if (map[manY][manX - 2] == 2)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
map[manY][manX - 1] = 6;
map[manY][manX - 2] = 3;
repaint();
manX--;
mystack.push(Integer.valueOf(31));
} else
{
map[manY][manX] = 6;
repaint();
}
} else
if (map[manY][manX - 1] == 1)
{
map[manY][manX] = 6;
repaint();
}
} void backleft(int i)
{
int j = i;
if (j == 30)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
} else
if (j == 31)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 9;
else
map[manY][manX] = 3;
if (maptmp[manY][manX - 1] == 4 || maptmp[manY][manX - 1] == 9)
map[manY][manX - 1] = 4;
else
map[manY][manX - 1] = 2;
}
map[manY][manX + 1] = 6;
repaint();
manX++;
}
void backright(int i)
{
int j = i;
if (j == 40)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 4;
else
map[manY][manX] = 2;
} else
if (j == 41)
{
if (maptmp[manY][manX] == 4 || maptmp[manY][manX] == 9)
map[manY][manX] = 9;
else
map[manY][manX] = 3;
if (maptmp[manY][manX + 1] == 4 || maptmp[manY][manX + 1] == 9)
map[manY][manX + 1] = 4;
else
map[manY][manX + 1] = 2;
}
map[manY][manX - 1] = 7;
repaint();
manX--;
} boolean iswin()
{
boolean flag = false;
label0:
for (int i = 0; i < 20; i++)
{
int j = 0;
do
{
if (j >= 20)
continue label0;
if (maptmp[i][j] == 4 || maptmp[i][j] == 9)
if (map[i][j] == 9)
{
flag = true;
} else
{
flag = false;
break label0;
}
j++;
} while (true);
} return flag;
}
public static void main(String args[]){
new mainpanel();
}
}