⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boxman.txt

📁 一款经典小游戏的源码 还有许多需要改进的地方
💻 TXT
📖 第 1 页 / 共 2 页
字号:
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 + -