用JAVA制作小游戏——推箱子(四)

本篇博客是推箱子完整代码的展示

详细代码讲解:
用JAVA制作小游戏——推箱子(一)
用JAVA制作小游戏——推箱子(二)
用JAVA制作小游戏——推箱子(三)
最下方附整个程序的文件下载链接

代码展示

主界面

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class game_tui_1 extends JFrame implements ActionListener{
    
    
	JButton jb1=new JButton("开始游戏"); 
	JButton jb2=new JButton("地图编辑器");
	public game_tui_1() {
    
    
		JLayeredPane layeredPane=new JLayeredPane(); 
		ImageIcon image=new ImageIcon("shiyan4_image/background.png");      
		JLabel jl=new JLabel(image);  
		jl.setBounds(0,0,image.getIconWidth(),image.getIconHeight());//设置jl的位置和大小
		jb1.setBounds(150,350,100,50);//jb1的位置和大小
		jb1.addActionListener(this);//jb1添加监听器
		jb1.setBackground(new Color(140,199,181));//设置jb1按钮的背景
		jb2.setBounds(350,350,100,50);//jb2的位置和大小
		jb2.addActionListener(this);//jb2添加监听器
		jb2.setBackground(new Color(140,199,181));//设置jb2按钮的背景
       //将jl放到最底层。                                    /*层次关系可见下面的注释*/
		layeredPane.add(jl,JLayeredPane.DEFAULT_LAYER);  
       //将jb1,jb2放到高一层的地方  
		layeredPane.add(jb1,JLayeredPane.MODAL_LAYER);  
		layeredPane.add(jb2,JLayeredPane.MODAL_LAYER); 
       //设置窗口属性
		this.setTitle("推箱子");//设置窗口题目
       this.setLayeredPane(layeredPane);//窗口添加layeredPane
       this.setSize(image.getIconWidth(),image.getIconHeight());//窗口大小
       this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);//窗口关闭
       this.setLocationRelativeTo(null); //窗口位置
       this.setResizable(false);//窗口不可最大化
       this.setVisible(true);//窗口可视
	}
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		new game_tui_1();
	}
	@Override
	public void actionPerformed(ActionEvent e) {
    
    
		// TODO Auto-generated method stub
		if(e.getSource()==jb1) {
    
    new game_tui_2();dispose();}
		else {
    
    new game_tui_3();dispose();}
	}
}

游戏界面

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.*;
public class game_tui_2 extends JFrame{
    
    
	JLabel[][] jl=new JLabel[20][20];//20*20的label,用于显示地图
	int[][] mymap =new int[20][20];//二维数组,用于存储地图数据
	JLabel jb_title =new JLabel();//显示第几关
	JLabel jb_step=new JLabel();//显示第几步
	JMenuBar menuBar = new JMenuBar();//菜单栏
	int level=1,player_x=0,player_y=0;
	int pd=0,step=0,MAX_level=11;
	public game_tui_2() {
    
    
		for(int i=0;i<20;i++) {
    
    //实例化label数组,并设置各label的大小和位置
			for(int j=0;j<20;j++) {
    
    
				jl[i][j]=new JLabel();
				this.add(jl[i][j]);
				jl[i][j].setBounds(i*30, j*30+40, 30, 30);
			}
		}
		//向窗体添加控件
		this.add(jb_title);
		this.add(jb_step);
		this.add(menuBar);
		jb_title.setBounds(670, 300, 100, 40);
		jb_title.setFont(new java.awt.Font("Dialog", 1, 30));//设置字体
		jb_step.setBounds(660, 400, 150, 40);
		jb_step.setFont(new java.awt.Font("Dialog", 1, 20));//设置字体
		//自己定义的函数
		MENU();//设置菜单的内容
		read_paint_map(level);
		//添加键盘事件
		this.addKeyListener(new KeyListener() {
    
    
			@Override
			public void keyTyped(KeyEvent e) {
    
    
				// TODO Auto-generated method stub				
			}
			@Override
			public void keyPressed(KeyEvent e) {
    
    
				if(pd_victory()==1) {
    
    }
				else if(e.getKeyCode()==KeyEvent.VK_UP) {
    
    step++;jb_step.setText("本关走了:"+step+"步");key_up();}
				else if(e.getKeyCode()==KeyEvent.VK_DOWN) {
    
    step++;jb_step.setText("本关走了:"+step+"步");key_down();}
				else if(e.getKeyCode()==KeyEvent.VK_LEFT) {
    
    step++;jb_step.setText("本关走了:"+step+"步");key_left();}
				else if(e.getKeyCode()==KeyEvent.VK_RIGHT) {
    
    step++;jb_step.setText("本关走了:"+step+"步");key_right();}	
			}
			@Override
			public void keyReleased(KeyEvent e) {
    
    
				// TODO Auto-generated method stub
			}	
		});
		//窗体属性
		this.setTitle("推箱子");//窗体名称
		this.setSize(900, 730);//窗体大小
		this.setDefaultCloseOperation(3);//窗体关闭按钮功能
		this.setLocationRelativeTo(null);//窗体居中
		this.setResizable(false);//窗体不可拉伸
		this.setLayout(null);//null可以使控件放到任意位置
		this.setVisible(true);//窗体可视
	}
	public int pd_victory() {
    
    //判断胜利条件是否满足
		for(int i=0;i<20;i++) {
    
    
			for(int j=0;j<20;j++) {
    
    
				if(mymap[i][j]==4||mymap[i][j]==3)  {
    
    return 0;}
			}
		}
		return 1;
	}
	public void MENU() {
    
    
		//菜单栏位置和大小
		menuBar.setBounds(0, 0, 900, 20);
		//菜单栏内容
		JMenu menu_1 = new JMenu("菜单(E)");
		JMenu menu_2 = new JMenu("更多(T)");
		//快捷键
		menu_1.setMnemonic(KeyEvent.VK_E);
		menu_2.setMnemonic(KeyEvent.VK_T);
		//菜单条目
		JMenuItem menuItem_1 = new JMenuItem("下一关(V)");
		JMenuItem menuItem_5 = new JMenuItem("上一关(B)");
		JMenuItem menuItem_2 = new JMenuItem("重新开始(N)");
		JMenuItem menuItem_3 = new JMenuItem("返回首页(M)");
		JMenuItem menuItem_4 = new JMenuItem("关于我们(H)");
		//快捷键
		menuItem_1.setMnemonic(KeyEvent.VK_V);
		menuItem_5.setMnemonic(KeyEvent.VK_B);
		menuItem_2.setMnemonic(KeyEvent.VK_N);
		menuItem_3.setMnemonic(KeyEvent.VK_M);
		menuItem_4.setMnemonic(KeyEvent.VK_H);
		//添加控件
		menuBar.add(menu_1);
		menuBar.add(menu_2);
		menu_1.add(menuItem_1);
		menu_1.add(menuItem_5);
		menu_1.add(menuItem_2);
		menu_1.add(menuItem_3);
		menu_2.add(menuItem_4);
		//每一栏添加事件
		menuItem_1.addActionListener(new ActionListener() {
    
    //下一关
			public void actionPerformed(ActionEvent arg0) {
    
    
				if(level!=MAX_level) {
    
    read_paint_map(++level);}
				else JOptionPane.showMessageDialog(null, "已经是最后一关了!!", "警告",JOptionPane.WARNING_MESSAGE);
			}
		});
		menuItem_5.addActionListener(new ActionListener() {
    
    //上一关
			public void actionPerformed(ActionEvent arg0) {
    
    
				if(level!=1) {
    
    read_paint_map(--level);}
				else JOptionPane.showMessageDialog(null, "已经是第一关了!!", "警告",JOptionPane.WARNING_MESSAGE);
			}
		});
		menuItem_2.addActionListener(new ActionListener() {
    
    //重新开始
			public void actionPerformed(ActionEvent arg0) {
    
    
				read_paint_map(level);
			}
		});
		menuItem_3.addActionListener(new ActionListener() {
    
    //返回首页
			public void actionPerformed(ActionEvent e) {
    
    
				new game_tui_1();
				dispose();
			}
		});	
		menuItem_4.addActionListener(new ActionListener() {
    
    //关于我们
			public void actionPerformed(ActionEvent e) {
    
    
				JOptionPane.showMessageDialog(null, "java小游戏\n经供参考\n版本:7.1.5\n", "关于我们",JOptionPane.PLAIN_MESSAGE);
			}
		});
	}
	public void read_paint_map(int k) {
    
    //读取与绘制地图
		step=0;
		jb_step.setText("本关走了:"+step+"步");
		jb_title.setText("第"+k+"关");
		readmap(k);//读取地图文件
		for(int i=0;i<20;i++) {
    
    
			for(int j=0;j<20;j++) {
    
    
				if(mymap[i][j]==5) {
    
    
					player_x=i;player_y=j;//获取玩家操控人物的位置
				}
			}
		}
		paint();//绘制地图
	}
	public void paint() {
    
    //绘制地图
		ImageIcon[] icon = new ImageIcon[7];//icon数组
		//各种图片路径设置,根据实际自行修改
		icon[0] = new ImageIcon(); 
		icon[1] = new ImageIcon("shiyan4_image/wall.png"); //墙
	    icon[2] = new ImageIcon(); 
	    icon[3] = new ImageIcon("shiyan4_image/box1.png"); //箱子
	    icon[4] = new ImageIcon("shiyan4_image/destination.png"); //目的地
	    icon[5] = new ImageIcon("shiyan4_image/player.png");  //玩家
	    icon[6] = new ImageIcon("shiyan4_image/box2.png"); //到达目的地的箱子
	    //显示地图内容
		for(int i=0;i<20;i++) {
    
    
			for(int j=0;j<20;j++) {
    
    			
					jl[i][j].setIcon(icon[mymap[i][j]]);
			}
		}
		if(pd_victory()==1) {
    
    
		JOptionPane.showMessageDialog(null, "                         恭喜你通过本关!!", "消息",
				JOptionPane.PLAIN_MESSAGE);
		if(level!=MAX_level) {
    
    read_paint_map(++level);}
		else JOptionPane.showMessageDialog(null, "                    你已经完成所有关卡!!!", "恭喜",
						JOptionPane.PLAIN_MESSAGE);}
	}
	public void readmap(int k) {
    
    //读取第k关的地图
		BufferedReader br = null;
		String bb="";
		int c=0;
		String s;
			try
			{
    
    	File f;
				if(k>=10) {
    
    
				f=new File("shiyan4_maps\\"+k+".map");//地图文件地址
				} 
				else {
    
    f=new File("shiyan4_maps\\0"+k+".map");}
				br=new BufferedReader(new FileReader(f));
				while ((s=br.readLine())!=null)//读取文件每一行,不为空添加到bb中
				{
    
    
					bb=bb+s;	
				}
			}
			catch (IOException e)//异常抛出
			{
    
    
				System.out.println(e);
			}
			byte[] d=bb.getBytes();//读取bb中的每一个字节,存放到d数组中
			int[] x=new int[bb.length()];
			for(int i=0;i<bb.length();i++)x[i]=d[i]-48;//每个字节从char数字变成int数字
			for(int i=0;i<20;i++)
			{
    
    
				for(int j=0;j<20;j++)//将数据存到mymap数组中
			    {
    
    
					mymap[j][i]=x[c];
			        c++;
			    }
		    }
	}
	public void key_up() {
    
    //上移
		int x=player_x;
		int y=player_y;
		if(mymap[x][y-1]==1) {
    
    step--;}
		else if(mymap[x][y-1]==3) {
    
    
			if(mymap[x][y-2]==1||mymap[x][y-2]==3||mymap[x][y-2]==6) {
    
    step--;}
			else if(pd==1) {
    
    if(mymap[x][y-2]==4) {
    
    mymap[x][y-2]=6;mymap[x][y-1]=5;mymap[x][y]=4;y=y-1;pd=0;}
							else {
    
    mymap[x][y-2]=3;mymap[x][y-1]=5;mymap[x][y]=4;y=y-1;pd=0;}}
			else {
    
    if(mymap[x][y-2]==4) {
    
    mymap[x][y-2]=6;mymap[x][y-1]=5;mymap[x][y]=2;y=y-1;}
			else {
    
    mymap[x][y-2]=3;mymap[x][y-1]=5;mymap[x][y]=2;y=y-1;}}
		}
		else if(mymap[x][y-1]==6) {
    
    
			if(mymap[x][y-2]==1||mymap[x][y-2]==3||mymap[x][y-2]==6) {
    
    step--;}
			else if(pd==1) {
    
    if(mymap[x][y-2]==4) {
    
    mymap[x][y-2]=6;mymap[x][y-1]=5;mymap[x][y]=4;y=y-1;}
							else {
    
    mymap[x][y-2]=3;mymap[x][y-1]=5;mymap[x][y]=4;y=y-1;}}
			else {
    
    if(mymap[x][y-2]==4){
    
    mymap[x][y-2]=6;mymap[x][y-1]=5;mymap[x][y]=2;y=y-1;pd=1;}
			else {
    
    mymap[x][y-2]=3;mymap[x][y-1]=5;mymap[x][y]=2;y=y-1;pd=1;}}
			}
		else if(mymap[x][y-1]==4) {
    
    if(pd==1) {
    
    mymap[x][y-1]=5;mymap[x][y]=4;y=y-1;}else {
    
    mymap[x][y-1]=5;mymap[x][y]=2;y=y-1;pd=1;}}
		else {
    
    if(pd==1) {
    
    mymap[x][y-1]=5;mymap[x][y]=4;y=y-1;pd=0;}
		else {
    
    mymap[x][y-1]=5;mymap[x][y]=2;y=y-1;}}
		player_x=x;
		player_y=y;
		paint();
	}
	public void key_down() {
    
    //下移
		int x=player_x;
		int y=player_y;
		if(mymap[x][y+1]==1) {
    
    step--;}
		else if(mymap[x][y+1]==3) {
    
    
			if(mymap[x][y+2]==1||mymap[x][y+2]==3||mymap[x][y+2]==6) {
    
    step--;}
			else if(pd==1) {
    
    if(mymap[x][y+2]==4) {
    
    mymap[x][y+2]=6;mymap[x][y+1]=5;mymap[x][y]=4;y=y+1;pd=0;}
							else {
    
    mymap[x][y+2]=3;mymap[x][y+1]=5;mymap[x][y]=4;y=y+1;pd=0;}}
			else {
    
    if(mymap[x][y+2]==4) {
    
    mymap[x][y+2]=6;mymap[x][y+1]=5;mymap[x][y]=2;y=y+1;}
			else {
    
    mymap[x][y+2]=3;mymap[x][y+1]=5;mymap[x][y]=2;y=y+1;}}
		}
		else if(mymap[x][y+1]==6) {
    
    
			if(mymap[x][y+2]==1||mymap[x][y+2]==3||mymap[x][y+2]==6) {
    
    step--;}
			else if(pd==1) {
    
    if(mymap[x][y+2]==4) {
    
    mymap[x][y+2]=6;mymap[x][y+1]=5;mymap[x][y]=4;y=y+1;}
							else {
    
    mymap[x][y+2]=3;mymap[x][y+1]=5;mymap[x][y]=4;y=y+1;}}
			else {
    
    if(mymap[x][y+2]==4){
    
    mymap[x][y+2]=6;mymap[x][y+1]=5;mymap[x][y]=2;y=y+1;pd=1;}
			else {
    
    mymap[x][y+2]=3;mymap[x][y+1]=5;mymap[x][y]=2;y=y+1;pd=1;}}
			}
		else if(mymap[x][y+1]==4) {
    
    if(pd==1) {
    
    mymap[x][y+1]=5;mymap[x][y]=4;y=y+1;}else {
    
    mymap[x][y+1]=5;mymap[x][y]=2;y=y+1;pd=1;}}
		else {
    
    if(pd==1) {
    
    mymap[x][y+1]=5;mymap[x][y]=4;y=y+1;pd=0;}
		else {
    
    mymap[x][y+1]=5;mymap[x][y]=2;y=y+1;}}
		player_x=x;
		player_y=y;
		paint();
	}
	public void key_left() {
    
    //左移
		int x=player_x;
		int y=player_y;
		if(mymap[x-1][y]==1) {
    
    step--;}
		else if(mymap[x-1][y]==3) {
    
    
			if(mymap[x-2][y]==1||mymap[x-2][y]==3||mymap[x-2][y]==6) {
    
    step--;}
			else if(pd==1) {
    
    if(mymap[x-2][y]==4) {
    
    mymap[x-2][y]=6;mymap[x-1][y]=5;mymap[x][y]=4;x=x-1;pd=0;}
							else {
    
    mymap[x-2][y]=3;mymap[x-1][y]=5;mymap[x][y]=4;x=x-1;pd=0;}}
			else {
    
    if(mymap[x-2][y]==4) {
    
    mymap[x-2][y]=6;mymap[x-1][y]=5;mymap[x][y]=2;x=x-1;}
			else {
    
    mymap[x-2][y]=3;mymap[x-1][y]=5;mymap[x][y]=2;x=x-1;}}
		}
		else if(mymap[x-1][y]==6) {
    
    
			if(mymap[x-2][y]==1||mymap[x-2][y]==3||mymap[x-2][y]==6) {
    
    step--;}
			else if(pd==1) {
    
    if(mymap[x-2][y]==4) {
    
    mymap[x-2][y]=6;mymap[x-1][y]=5;mymap[x][y]=4;x=x-1;}
							else {
    
    mymap[x-2][y]=3;mymap[x-1][y]=5;mymap[x][y]=4;x=x-1;}}
			else {
    
    if(mymap[x-2][y]==4){
    
    mymap[x-2][y]=6;mymap[x-1][y]=5;mymap[x][y]=2;x=x-1;pd=1;}
			else {
    
    mymap[x-2][y]=3;mymap[x-1][y]=5;mymap[x][y]=2;x=x-1;pd=1;}}
			}
		else if(mymap[x-1][y]==4) {
    
    if(pd==1) {
    
    mymap[x-1][y]=5;mymap[x][y]=4;x=x-1;}else {
    
    mymap[x-1][y]=5;mymap[x][y]=2;x=x-1;pd=1;}}
		else {
    
    if(pd==1) {
    
    mymap[x-1][y]=5;mymap[x][y]=4;x=x-1;pd=0;}
		else {
    
    mymap[x-1][y]=5;mymap[x][y]=2;x=x-1;}}
		player_x=x;
		player_y=y;
		paint();
	}
	public void key_right() {
    
    //右移
		int x=player_x;
		int y=player_y;
		if(mymap[x+1][y]==1) {
    
    step--;}
		else if(mymap[x+1][y]==3) {
    
    
			if(mymap[x+2][y]==1||mymap[x+2][y]==3||mymap[x+2][y]==6) {
    
    step--;}
			else if(pd==1) {
    
    if(mymap[x+2][y]==4) {
    
    mymap[x+2][y]=6;mymap[x+1][y]=5;mymap[x][y]=4;x=x+1;pd=0;}
							else {
    
    mymap[x+2][y]=3;mymap[x+1][y]=5;mymap[x][y]=4;x=x+1;pd=0;}}
			else {
    
    if(mymap[x+2][y]==4) {
    
    mymap[x+2][y]=6;mymap[x+1][y]=5;mymap[x][y]=2;x=x+1;}
			else {
    
    mymap[x+2][y]=3;mymap[x+1][y]=5;mymap[x][y]=2;x=x+1;}}
		}
		else if(mymap[x+1][y]==6) {
    
    
			if(mymap[x+2][y]==1||mymap[x+2][y]==3||mymap[x+2][y]==6) {
    
    step--;}
			else if(pd==1) {
    
    if(mymap[x+2][y]==4) {
    
    mymap[x+2][y]=6;mymap[x+1][y]=5;mymap[x][y]=4;x=x+1;}
							else {
    
    mymap[x+2][y]=3;mymap[x+1][y]=5;mymap[x][y]=4;x=x+1;}}
			else {
    
    if(mymap[x+2][y]==4){
    
    mymap[x+2][y]=6;mymap[x+1][y]=5;mymap[x][y]=2;x=x+1;pd=1;}
			else {
    
    mymap[x+2][y]=3;mymap[x+1][y]=5;mymap[x][y]=2;x=x+1;pd=1;}}
			}
		else if(mymap[x+1][y]==4) {
    
    if(pd==1) {
    
    mymap[x+1][y]=5;mymap[x][y]=4;x=x+1;}else {
    
    mymap[x+1][y]=5;mymap[x][y]=2;x=x+1;pd=1;}}
		else {
    
    if(pd==1) {
    
    mymap[x+1][y]=5;mymap[x][y]=4;x=x+1;pd=0;}
		else {
    
    mymap[x+1][y]=5;mymap[x][y]=2;x=x+1;}}
		player_x=x;
		player_y=y;
		paint();
	}
}

地图编辑器界面

import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.*;
public class game_tui_3 extends JFrame{
    
    
	JButton jb1 =new JButton("墙块");
	JButton jb2 =new JButton("玩家");
	JButton jb3 =new JButton("箱子");
	JButton jb4 =new JButton("目的地");
	JButton jb8 =new JButton("空白块");
	JButton jb5 =new JButton("清空");
	JButton jb6 =new JButton("保存");
	JButton jb7 =new JButton("返回");
	JLabel[][] jl=new JLabel[20][20];
	int[][] mymap=new int[20][20];int pd=0;int i=0,j=0;int pd_press;
	public game_tui_3() {
    
    
		//自定义方法
		init();//初始化
		//窗口属性
		this.setTitle("地图编辑器");//窗体名称
		this.setSize(800, 730);//窗体大小
		this.setDefaultCloseOperation(3);//窗体关闭按钮功能
		this.setLocationRelativeTo(null);//窗体居中
		this.setResizable(false);//窗体不可拉伸
		this.setLayout(null);
		this.getContentPane().setBackground(new Color(214,213,183));//设置背景颜色
		this.setVisible(true);//窗体可视
	}
	public void save() {
    
    //保存数据到文件
		// TODO Auto-generated method stub
          String content="";FileOutputStream fout;byte[] b;
		try {
    
    
			File file=new File("shiyan4_maps\\11.map");//文件路径,根据实际自行修改
			if(!file.exists())  file.createNewFile();//判断11.map文件是否存在,不存在新建一个
			
			fout=new FileOutputStream(file,false); //创建文件输出流,false代表覆盖修改,ture代表添加修改
												//覆盖修改:覆盖之前的内容   添加修改:保留之前的内容,在原来基础上添加内容
			for(int i=0;i<20;i++) {
    
    
				for(int j=0;j<20;j++) {
    
    
					content=content+mymap[j][i];
				}
				if(i!=19)
				content=content+"\r\n";//“\r\n” 是回车
			}
				
			b=content.getBytes();
			if(pd_save()==1) {
    
    //判断是否要保存
            fout.write(b);
            JOptionPane.showMessageDialog(null, "                       文件写入成功!!", "消息",JOptionPane.PLAIN_MESSAGE);
			}
			else {
    
    JOptionPane.showMessageDialog(null, "        文件写入失败!!", "消息",JOptionPane.ERROR_MESSAGE);
			}
			}
		catch (IOException e) {
    
    
			// TODO Auto-generated catch block
			e.getMessage();
		}
 
	}
	public int pd_save() {
    
    //判断是否要保存
		//保存要满足的条件:存在玩家控制,箱子数要等于目的地数
		int num_player=0,num_end=0,num_box=0;
		for(int i=0;i<20;i++) {
    
    
			for(int j=0;j<20;j++) {
    
    
				if(mymap[i][j]==5) num_player++;
				else if(mymap[i][j]==4) num_end++;
				else if(mymap[i][j]==3) num_box++;
			}
		}
		if(num_player!=1||num_end!=num_box||num_end==0)return 0;
		else return 1;
	}
	public void init() {
    
    //界面显示
		for(i=0;i<20;i++) {
    
    
			for(j=0;j<20;j++) {
    
    
				mymap[i][j]=0;
				jl[i][j]=new JLabel(new ImageIcon());//实例化label
				this.add(jl[i][j]);
				jl[i][j].addMouseListener(new mouse());//label添加监听器
				jl[i][j].setBounds(i*30+90, j*30+20, 30, 30);//设置label位置和大小
				jl[i][j].setOpaque(true);//true表示不透明,false表示透明
			}
		}
		//窗体添加控件
		this.add(jb1);this.add(jb2);
		this.add(jb3);this.add(jb4);
		this.add(jb5);this.add(jb6);
		this.add(jb7);this.add(jb8);
		//按钮设置位置和大小
		jb1.setBounds(35, 640, 80, 40);jb2.setBounds(125, 640, 80, 40);
		jb3.setBounds(215, 640, 80, 40);jb4.setBounds(305, 640, 80, 40);
		jb8.setBounds(395, 640, 80, 40);jb5.setBounds(485, 640, 80, 40);
		jb6.setBounds(575, 640, 80, 40);jb7.setBounds(665, 640, 80, 40);
		//给按钮添加鼠标事件
		jb1.addMouseListener(new mouse());jb2.addMouseListener(new mouse());
		jb3.addMouseListener(new mouse());jb4.addMouseListener(new mouse());
		jb5.addMouseListener(new mouse());jb6.addMouseListener(new mouse());
		jb7.addMouseListener(new mouse());jb8.addMouseListener(new mouse());
		//设置按钮背景
		jb1.setBackground(new Color(140,199,181));jb2.setBackground(new Color(140,199,181));
		jb3.setBackground(new Color(140,199,181));jb4.setBackground(new Color(140,199,181));
		jb5.setBackground(new Color(140,199,181));jb6.setBackground(new Color(140,199,181));
		jb7.setBackground(new Color(140,199,181));jb8.setBackground(new Color(140,199,181));
	}
	class mouse extends MouseAdapter{
    
    
		@Override
		public void mousePressed(MouseEvent e) {
    
    //鼠标按压事件
			// TODO Auto-generated method stub
			if(e.getSource()==jb1) {
    
    pd=1;}//点击“墙块”按钮
			else if(e.getSource()==jb2) {
    
    pd=2;}//点击“玩家”按钮
			else if(e.getSource()==jb3) {
    
    pd=3;}//点击“箱子”按钮
			else if(e.getSource()==jb4) {
    
    pd=4;}//点击“目的地”按钮
			else if(e.getSource()==jb5) {
    
    //点击“清空”按钮
				for(i=0;i<20;i++) {
    
    
					for(j=0;j<20;j++) {
    
    
						jl[i][j].setIcon(new ImageIcon());//改变label图片
						mymap[i][j]=0;//改变label对应数据
					}
				}
			}
			else if(e.getSource()==jb6) {
    
    save();}//点击“保存”按钮
			else if(e.getSource()==jb7) {
    
    new game_tui_1();dispose();}//点击“返回”按钮
			else if(e.getSource()==jb8) {
    
    pd=5;}//点击“空白块”按钮
			else {
    
    //点击label
				for(i=0;i<20;i++) {
    
    
					for(j=0;j<20;j++) {
    
    
						if(e.getSource()==jl[i][j]) {
    
    //获取点击了哪个label
							pd_press=1;//用于标识判断按压
							if(pd==0) {
    
    }//pd=0表示没有点击任何按钮,点击label不做任何操作
							else if(pd==1) {
    
    jl[i][j].setIcon(new ImageIcon("shiyan4_image/wall.png"));mymap[i][j]=1;}//将label显示图片墙块
							else if(pd==2) {
    
    jl[i][j].setIcon(new ImageIcon("shiyan4_image/player.png"));mymap[i][j]=5;}//将label显示图片玩家
							else if(pd==3) {
    
    jl[i][j].setIcon(new ImageIcon("shiyan4_image/box1.png"));mymap[i][j]=3;}//将label显示图片箱子
							else if(pd==4) {
    
    jl[i][j].setIcon(new ImageIcon("shiyan4_image/destination.png"));mymap[i][j]=4;}//将label显示图片目的地
							else if(pd==5) {
    
    jl[i][j].setIcon(new ImageIcon());mymap[i][j]=0;}//将label显示空白块
						} 
					}
				}
			}
		}
		@Override
		public void mouseReleased(MouseEvent e) {
    
    //鼠标释放事件
			// TODO Auto-generated method stub
			for(int i=0;i<20;i++) {
    
    
				for(int j=0;j<20;j++) {
    
    
					if(e.getSource()==jl[i][j]) {
    
    
						pd_press=0;//释放将按压标识改回0
					}
				}
			}
		}
		@Override
		public void mouseEntered(MouseEvent e) {
    
    //鼠标进入事件
			// TODO Auto-generated method stub
			//长按绘图
			for(int i=0;i<20;i++) {
    
    
				for(int j=0;j<20;j++) {
    
    
					if(e.getSource()==jl[i][j]&&pd_press==1) {
    
    //鼠标进入label且处在按压
						if(pd==0) {
    
    }//pd=0表示没有点击任何按钮,点击label不做任何操作
						else if(pd==1) {
    
    jl[i][j].setIcon(new ImageIcon("shiyan4_image/wall.png"));mymap[i][j]=1;}//绘图墙块
						else if(pd==5) {
    
    jl[i][j].setIcon(new ImageIcon());mymap[i][j]=0;}//绘图空白块
					} 
				}
			}
		}
	}
}
如有错误
欢迎指出

下一篇:JAVA 线程的介绍与使用

文件下载链接:

csdn下载链接:点击这里
百度网盘下载链接:点击此处 密码:3wpg

猜你喜欢

转载自blog.csdn.net/zjl0409/article/details/112084907