📄 boxman.txt
字号:
package boxman;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.util.Stack;
public class BoxMan {
public static void main(String[] args) {
new Frame();
}
}
class Frame extends JFrame implements ActionListener{
Panel p;
JButton brestart=new JButton("重玩");
JButton bundo=new JButton("撤销");
JButton bredo=new JButton("恢复");
MenuItem mlast=new MenuItem("上一关");
MenuItem mnext=new MenuItem("下一关") ;
MenuItem mchoose=new MenuItem("自由选关");
MenuItem mtheme=new MenuItem("帮助主题");
MenuItem mabout=new MenuItem("关于推箱子");
MenuItem mexit=new MenuItem("退出程序");
Menu m1=new Menu("选关");
Menu m2=new Menu("帮助");
Menu m3=new Menu("退出");
MenuBar bar=new MenuBar();
Frame(){
super("推箱子");
setSize(720,720);
setVisible(true);
setResizable(false);
setLocation(300,20);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c=getContentPane();
c.setLayout(null);
c.setBackground(Color.white);
m1.add(mlast);
m1.add(mnext);
m1.add(mchoose);
m2.add(mtheme);
m2.add(mabout);
m3.add(mexit);
bar.add(m1);
bar.add(m2);
bar.add(m3);
mlast.addActionListener(this);
mnext.addActionListener(this);
mchoose.addActionListener(this);
mtheme.addActionListener(this);
mabout.addActionListener(this);
mexit.addActionListener(this);
add(brestart);
add(bundo);
add(bredo);
brestart.setBounds(625,100,80,30);
bundo.setBounds(625,150,80,30);
bredo.setBounds(625,200,80,30);
brestart.addActionListener(this);
bundo.addActionListener(this);
bredo.addActionListener(this);
setMenuBar(bar);
p=new Panel();
add(p);
p.getData(p.level);
p.requestFocus();
validate();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==mlast){
p.level--;
if(p.level<1){
p.level++;
JOptionPane.showMessageDialog(this,"本关是第一关!");
p.requestFocus();
}
else {
p.getData(p.level);
p.requestFocus();
}
p.remove();
}
else if(e.getSource()==mnext){
p.level++;
if(p.level>20){
p.level--;
JOptionPane.showMessageDialog(this,"本关是最后一关");
p.requestFocus();
}
else {
p.getData(p.level);
p.requestFocus();
}
p.remove();
}
else if(e.getSource()==mchoose){
String lel=JOptionPane.showInputDialog(this,"请输入所选关数:(1~20)");
p.level=Integer.parseInt(lel);
p.remove();
if(p.level>20||p.level<1){
JOptionPane.showMessageDialog(this, "此关不存在");
p.requestFocus();
}
else{
p.getData(p.level);
p.requestFocus();
}
}
else if(e.getSource()==mtheme){
JOptionPane.showMessageDialog(this, "游戏规则:可以用鼠标和键盘来控制“小破孩”的移动,使其将所有玫瑰花推到“小丫”所处的位置~");
}
else if(e.getSource()==mabout){
JOptionPane.showMessageDialog(this, "推箱子\n开发者:王忆心\nEmail: hilary_eden@hotmail.com");
}
else if(e.getSource()==mexit) System.exit(0);
else if(e.getSource()==brestart){
p.getData(p.level);
p.requestFocus();
p.remove();
}
else if(e.getSource()==bundo){
if(p.isUndoEmpty())JOptionPane.showMessageDialog(this, "还未移动");
else{
switch(p.getUndoPop()){
case 10:p.undoup(10);break;
case 11:p.undoup(11);break;
case 20:p.undodown(20);break;
case 21:p.undodown(21);break;
case 30:p.undoleft(30);break;
case 31:p.undoleft(31);break;
case 40:p.undoright(40);break;
case 41:p.undoright(41);break;
}
}
p.requestFocus();
}
else if(e.getSource()==bredo){
if(p.isRedoEmpty())JOptionPane.showMessageDialog(this, "还未撤销");
else{
switch(p.getRedoPop()){
case 1:p.moveup();break;
case 2:p.movedown();break;
case 3:p.moveleft();break;
case 4:p.moveright();break;
}
}
p.requestFocus();
}
}
}
class Panel extends JPanel implements KeyListener,MouseListener{
int[][] map,mapinit;
int manX,manY,boxnum;
int steps;
Image[] myImage;
Readmap Levelmap;
Readmap Levelmapinit;
int len=30;
public int level=1;
Stack s1=new Stack();
Stack s2=new Stack();
Panel(){
setBounds(15,50,600,600);
setBackground(Color.blue);
addKeyListener(this);
addMouseListener(this);
myImage=new Image[10];
for(int i=0; i<10; i++)
{
myImage[i] = Toolkit.getDefaultToolkit().getImage("pic\\"+i+".jpg");
}
setVisible(true);
}
void getData(int i)
{
Levelmap=new Readmap(i);
Levelmapinit=new Readmap(i);
map=Levelmap.getmap();
manX=Levelmap.getmanX();
manY=Levelmap.getmanY();
mapinit=Levelmapinit.getmap();
repaint();
}
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(Color.red);
g.setFont(new Font("幼圆",Font.BOLD,20));
g.drawString("移动步数:",220,60);
g.drawString(String.valueOf(steps),340,60);
g.drawString("第",200,30);
g.drawString(String.valueOf(level),290,30);
g.drawString("关",360,30);
}
public void keyPressed(KeyEvent e){
s2.removeAllElements();
if(e.getKeyCode()==KeyEvent.VK_UP){moveup();}
if(e.getKeyCode()==KeyEvent.VK_DOWN){movedown();}
if(e.getKeyCode()==KeyEvent.VK_LEFT){moveleft();}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){moveright();}
if(iswin()){
if(level==20){JOptionPane.showMessageDialog(this, "小丫和小破孩幸福地生活在一起^^");
}
else{
String s="恭喜小破孩通过了小丫的第"+level+"道考验!!!还接着挑战么?";
int type=JOptionPane.YES_NO_OPTION;
int choice=0;
choice=JOptionPane.showConfirmDialog(null,s,"过关",type);
if(choice==1)System.exit(0);
else if(choice==0){
level++;
getData(level);
}
}
remove();steps=0;
}
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public void mousePressed(MouseEvent e){
double px=e.getX();
double py=e.getY();
double x=manX*30;
double y=manY*30;
if(px>x&&px<(x+30)&&py>(y-30)&&py<y){moveup();}
else if(px>x&&px<(x+30)&&py>(y+30)&&py<(y+60)){movedown();}
else if(px>(x-30)&&px<x&&py>y&&py<(y+30)){moveleft();}
else if(px>(x+30)&&px<(x+60)&&py>y&&py<(y+30)){moveright();}
if(iswin()){
if(level==20){JOptionPane.showMessageDialog(this, "小丫和小破孩幸福地生活在一起^^");
}
else{
String s="恭喜小破孩通过了小丫的第"+level+"道考验!!!还接着挑战么?";
int type=JOptionPane.YES_NO_OPTION;
int choice=0;
choice=JOptionPane.showConfirmDialog(null,s,"过关",type);
if(choice==1)System.exit(0);
else if(choice==0){
level++;
getData(level);
}
}
remove();
}
}
public void mouseClicked(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
void remove(){s1.removeAllElements();s2.removeAllElements();}
int getUndoPop(){ return (Integer)s1.pop();}
int getRedoPop(){ return (Integer)s2.pop();}
boolean isUndoEmpty(){return s1.isEmpty();}
boolean isRedoEmpty(){return s2.isEmpty();}
void moveup()
{
if(map[manY-1][manX]==2||map[manY-1][manX]==4)
{
if(mapinit[manY][manX]==4||mapinit[manY][manX]==9)
map[manY][manX]=4;
else map[manY][manX]=2;
map[manY-1][manX]=8;
repaint();manY--;s1.push(10);
}
else if(map[manY-1][manX]==3)
{
if(map[manY-2][manX]==4)
{
if(mapinit[manY][manX]==4||mapinit[manY][manX]==9)
map[manY][manX]=4;
else map[manY][manX]=2;
map[manY-1][manX]=8;
map[manY-2][manX]=9;
repaint();manY--;s1.push(11);steps++;
}
else if(map[manY-2][manX]==2)
{
if(mapinit[manY][manX]==4||mapinit[manY][manX]==9)
map[manY][manX]=4;
else map[manY][manX]=2;
map[manY-1][manX]=8;
map[manY-2][manX]=3;
repaint();manY--;s1.push(11);steps++;
}
else {map[manY][manX]=8;repaint();}
}
else if(map[manY-1][manX]==9)
{
if(map[manY-2][manX]==4)
{
if(mapinit[manY][manX]==4||mapinit[manY][manX]==9)
map[manY][manX]=4;
else map[manY][manX]=2;
map[manY-1][manX]=8;
map[manY-2][manX]=9;
repaint();manY--;s1.push(11);steps++;
}
else if(map[manY-2][manX]==2)
{
if(mapinit[manY][manX]==4||mapinit[manY][manX]==9)
map[manY][manX]=4;
else map[manY][manX]=2;
map[manY-1][manX]=8;
map[manY-2][manX]=3;
repaint();manY--;s1.push(11);steps++;
}
else {map[manY][manX]=8;repaint();}
}
else if(map[manY-1][manX]==1)
{
map[manY][manX]=8;repaint();
}
}
void undoup(int t)
{
int n=t;
if(n==10)
{
if(mapinit[manY][manX]==4||mapinit[manY][manX]==9)
{
map[manY][manX]=4;
}
else map[manY][manX]=2;
}
else if(n==11)
{ steps++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -