ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

推箱子 | Java课程设计

2021-01-02 19:01:58  阅读:203  来源: 互联网

标签:箱子 课程设计 Java wall px py catch new e1


在这里插入图片描述

忙了快20天了,终于把推箱子的游戏做完了。自己第一次做这种项目,收获还是比较多的。先把项目交给大家,和面还会 有几篇博客,是关于我在项目中遇到的问题以及解决办法,如果有想法的可以关注我。

文章目录

项目结构

在这里插入图片描述
这个项目我是用eclipse写的,我这个项目文件我会以压缩包的形式,放在下方,链接是百度网盘的链接,可能程序运行过程中,有些bug,我自己还未发现。欢迎大家指出

链接: https://pan.baidu.com/s/1sh9TZememG-L30RfL-VnmQ
提取码: 1p6m

视频展示:

演示视频入口

源码分享

PlayGameInterface.java

package JavaClassDesign;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Date;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.TimerTask;

import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;


public class PlayGameInterface extends JFrame implements KeyListener{
	//1墙  0空地  4箱子  12有箱子的目的地  8空目的地   2玩家
    //  定义静态变量来实现对关卡的计数
	static int k=0;
	static int step=0;
	Boolean playFlag  =true;
	int width = 20;
	int height = 20;
	ClipTestClass musicFlag,musicFlagtmp;
	JComboBox<String> comboBox ;
	Boolean stopflag = true;
	String musicFlagString;
	String musicFlagTmpString;
	JLabel jl8;
	
    public PlayGameInterface() throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException{
    	k++;
    	step=0;
		ReadMap(k);
		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		setIconImage(new ImageIcon("src/Img/电脑.png").getImage());
		setLayout(null);
		setTitle("这是第 "+k+"关"+"\t"+"祝你好运!");
    	Setplay(); //人物
    	Setbox();  //箱子
    	Setdestination(); //目的地
    	Setwall();
    	getContentPane().setBackground(Color.white);
    	
    	ImageIcon image1 = new ImageIcon("src/Img/音乐.png");
        image1.setImage(image1.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
        JLabel jl1 = new JLabel(image1);
        JLabel jl2 = new JLabel();
        jl2.setText("当前播放的音乐:");
        jl2.setFont(new Font("楷体",Font.BOLD, 13));
        jl2.setForeground(Color.red);
        JPanel jp1 = new JPanel();
        jp1.add(jl1);
        jp1.add(jl2);
        jp1.setBounds(500+10, 10, 150, 20);
        add(jp1);
        
        String[] listData = new String[]{"5 Seconds Of Summer - Teeth.wav", "冰轩 - 另类 (DJ版伴奏).wav",
        		"华语群星 - 爸爸去哪儿.wav", "宋厦 - 早晚.wav","Hawk Nelson - Sold Out.wav",
        		"SHAUN (숀) - Way Back Home (Mosimann Remix).wav","Vicetone _ Meron Ryan - Walk Thru Fire.wav"};

        // 创建一个下拉列表框
        comboBox = new JComboBox<String>(listData);
        
        comboBox.setFocusable(false);
        // 添加条目选中状态改变的监听器
        comboBox.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                // 只处理选中的状态
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    try {
						if(playFlag) {
							if(musicFlagtmp!=null)
							musicFlagtmp.stop();
							musicFlag = new ClipTestClass("src/Music/"+comboBox.getSelectedItem());
							musicFlagString = (String) comboBox.getSelectedItem();
							musicFlag.player();
							playFlag=false;
							
						}else if(!playFlag) {
							if(musicFlag!=null)
							musicFlag.stop();
							musicFlagtmp = new ClipTestClass("src/Music/"+comboBox.getSelectedItem());
							musicFlagTmpString=(String) comboBox.getSelectedItem();
							musicFlagtmp.player();
							playFlag=true;
						}
					} catch (UnsupportedAudioFileException | IOException | LineUnavailableException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
                    
                }
            }
        });
        // 设置默认选中的条目
        comboBox.setSelectedIndex(k);
        comboBox.setBounds(500+10,40,150,20);
        add(comboBox);
        
        ImageIcon image3 = new ImageIcon("src/Img/上一关.png");
        image3.setImage(image3.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
        JLabel jl3 = new JLabel(image3);
        jl3.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent e) {
				if(comboBox.getSelectedIndex()>0);{
					if(comboBox.getSelectedItem()==musicFlagString) {
						musicFlag.stop();
					}else
						musicFlagtmp.stop();
					comboBox.setSelectedIndex(comboBox.getSelectedIndex()-1);
				}
			}
        	
		});
        jl3.setBounds(500+10, 70, 30, 30);
        add(jl3);
        
        ImageIcon image4 = new ImageIcon("src/Img/暂停.png");
        ImageIcon image44 = new ImageIcon("src/Img/开始.png");
        image4.setImage(image4.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
        image44.setImage(image44.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
        JLabel jl4 = new JLabel(image4);
        jl4.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent e) {
				if(comboBox.getSelectedItem()==musicFlagString) {
					musicFlag.stop();
				}else
					musicFlagtmp.stop();
				// TODO Auto-generated method stub
				if(stopflag) {
					jl4.setIcon(image44);
					stopflag=false;
					if(comboBox.getSelectedItem()==musicFlagString) {
						musicFlag.stop();
					}else
						musicFlagtmp.stop();
				}else if(!stopflag) {
					jl4.setIcon(image4);
					stopflag=true;
					if(comboBox.getSelectedItem()==musicFlagString) {
						try {
							musicFlag.player();
						} catch (UnsupportedAudioFileException | IOException | LineUnavailableException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
					} else
						try {
							musicFlagtmp.player();
						} catch (UnsupportedAudioFileException | IOException | LineUnavailableException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
				}
			}
        	
		});
        jl4.setBounds(500+65, 70, 30, 30);
        add(jl4);
        
        
        ImageIcon image5 = new ImageIcon("src/Img/下一关.png");
        image5.setImage(image5.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
        JLabel jl5 = new JLabel(image5);
        jl5.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent e) {
				if(comboBox.getSelectedIndex()<6);{
					if(comboBox.getSelectedItem()==musicFlagString) {
						musicFlag.stop();
					}else
						musicFlagtmp.stop();
					comboBox.setSelectedIndex(comboBox.getSelectedIndex()+1);
				}
			}
        	
		});
        jl5.setBounds(500+120, 70, 30, 30);
        add(jl5);
        
        AddButton();
        
        Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();// 获取屏幕大小
		int screenWidth = (int) screensize.getWidth();
		int screenHeight = (int) screensize.getHeight();
		setLocation(screenWidth / 2 -340, screenHeight / 2 -275);// 设置窗口居中显示
		setSize(500+180, 550);
		setVisible(true);
        this.addKeyListener(this);
    }
	
    private void AddButton() {
    	JButton jb1 = new JButton();
        jb1.setBounds(500+10,110,150,30);
        jb1.setText("上一关");
        jb1.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent e) {
				if(k>1) {
					try {
						k-=2;
						if(musicFlag!=null)
							 musicFlag.stop();
						 if(musicFlagtmp!=null)
							 musicFlagtmp.stop();
						 CloseThis();
						new PlayGameInterface();
					} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IOException
							| UnsupportedLookAndFeelException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
        	
		});
        jb1.setFont(new Font("楷体",Font.BOLD,13));
        jb1.setFocusable(false);
        add(jb1);
		
        JButton jb2 = new JButton();
        jb2.setBounds(500+10,150,150,30);
        jb2.setText("下一关");
        jb2.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent e) {
				if(k<4) {
					try {
						if(musicFlag!=null)
							 musicFlag.stop();
						 if(musicFlagtmp!=null)
							 musicFlagtmp.stop();
						 CloseThis();
						new PlayGameInterface();
					} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IOException
							| UnsupportedLookAndFeelException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
        	
		});
        jb2.setFont(new Font("楷体",Font.BOLD,13));
        jb2.setFocusable(false);
        add(jb2);
        
        JLabel jl1 = new JLabel("选择你要运行的关卡:");
        jl1.setBounds(510,190,150,30);
        jl1.setFont(new Font("楷体",Font.BOLD,13));
        add(jl1);
        
        String[] level = new String[]{"1.txt","2.txt","3.txt","4.txt"};
        JComboBox<String> mapLevel = new JComboBox<>(level);
        mapLevel.setFocusable(false);
        mapLevel.setBounds(510, 230, 150, 20);
        mapLevel.addItemListener(new ItemListener() {
			
			@Override
			public void itemStateChanged(ItemEvent e) {
				if(k!=mapLevel.getSelectedIndex()+1) {
					k=mapLevel.getSelectedIndex();
					try {
						if(musicFlag!=null)
							 musicFlag.stop();
						 if(musicFlagtmp!=null)
							 musicFlagtmp.stop();
						 CloseThis();
						new PlayGameInterface();
					} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IOException
							| UnsupportedLookAndFeelException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
		});
        mapLevel.setSelectedIndex(k-1);
        add(mapLevel);
        
        JButton jb3 = new JButton();
        jb3.setBounds(500+10,260,150,30);
        jb3.setText("重玩");
        jb3.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent e) {
				try {
					k--;
					if(musicFlag!=null)
						 musicFlag.stop();
					 if(musicFlagtmp!=null)
						 musicFlagtmp.stop();
					 CloseThis();
					new PlayGameInterface();
				} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IOException
						| UnsupportedLookAndFeelException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
        	
		});
        jb3.setFont(new Font("楷体",Font.BOLD,13));
        jb3.setFocusable(false);
        add(jb3);
        
        JLabel jl2 = new JLabel("当前时间:");
        jl2.setBounds(510, 300, 150, 30);
        jl2.setFont(new Font("楷体",Font.BOLD,13));
        jl2.setFocusable(false);
        add(jl2);
        
        long currentTime1 = System.currentTimeMillis();
        SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
        Date date = new Date(currentTime1);
        JLabel jl33 = new JLabel(formatter.format(date));
        jl33.setBounds(510, 330, 150, 30);
        jl33.setFont(new Font("楷体",Font.BOLD,13));
        jl33.setFocusable(false);
        add(jl33);
        
        JLabel jl5 = new JLabel("你已经玩了:");
        jl5.setBounds(510, 370, 100, 30);
        jl5.setFont(new Font("楷体",Font.BOLD,13));
        jl5.setFocusable(false);
        add(jl5);
        
        JLabel jl6 = new JLabel();
        jl6.setBounds(610, 370, 50, 30);
        jl6.setFont(new Font("楷体",Font.BOLD,13));
        jl6.setFocusable(false);
        add(jl6);
       
        JLabel jl7 = new JLabel("你已经走了:");
        jl7.setBounds(510, 400, 100, 30);
        jl7.setFont(new Font("楷体",Font.BOLD,13));
        jl7.setFocusable(false);
        add(jl7);
        
        jl8 = new JLabel(step+"步");
        jl8.setBounds(610, 400, 50, 30);
        jl8.setFont(new Font("楷体",Font.BOLD,13));
        jl8.setFocusable(false);
        add(jl8);
        
        Timer time = new Timer(1000,new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				long currentTime = System.currentTimeMillis();
		        SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
		        Date date = new Date(currentTime);
				jl33.setText(formatter.format(date));
				jl6.setText(String.valueOf((currentTime-currentTime1)/1000)+"秒");
			}
		});
        time.start();
    }
    
	protected void CloseThis() {
		this.dispose();
	}

	public PlayGameInterface(int[][] map ,JLabel[][] box) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException{
    	this.boxs=box;
    	this.wall=map;
    	UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    	setIconImage(new ImageIcon("src/Img/电脑.png").getImage());
		setLayout(null);
		setTitle("这是自定义地图祝你好运!");
    	Setplay(); //人物
    	Setbox();  //箱子
    	Setdestination(); //目的地
    	Setwall();
    	getContentPane().setBackground(Color.white);
    	
    	ImageIcon image1 = new ImageIcon("src/Img/音乐.png");
        image1.setImage(image1.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
        JLabel jl1 = new JLabel(image1);
        JLabel jl2 = new JLabel();
        jl2.setText("当前播放的音乐:");
        jl2.setFont(new Font("楷体",Font.BOLD, 13));
        jl2.setForeground(Color.red);
        JPanel jp1 = new JPanel();
        jp1.add(jl1);
        jp1.add(jl2);
        jp1.setBounds(500+10, 10, 150, 20);
        add(jp1);
        
        String[] listData = new String[]{"5 Seconds Of Summer - Teeth.wav", "冰轩 - 另类 (DJ版伴奏).wav",
        		"华语群星 - 爸爸去哪儿.wav", "宋厦 - 早晚.wav","Hawk Nelson - Sold Out.wav",
        		"SHAUN (숀) - Way Back Home (Mosimann Remix).wav","Vicetone _ Meron Ryan - Walk Thru Fire.wav"};

        // 创建一个下拉列表框
        comboBox = new JComboBox<String>(listData);
        comboBox.setFocusable(false);
        
        // 添加条目选中状态改变的监听器
        comboBox.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                // 只处理选中的状态
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    try {
						if(playFlag) {
							if(musicFlagtmp!=null)
							musicFlagtmp.stop();
							musicFlag = new ClipTestClass("src/Music/"+comboBox.getSelectedItem());
							musicFlagString = (String) comboBox.getSelectedItem();
							musicFlag.player();
							playFlag=false;
							
						}else if(!playFlag) {
							if(musicFlag!=null)
							musicFlag.stop();
							musicFlagtmp = new ClipTestClass("src/Music/"+comboBox.getSelectedItem());
							musicFlagTmpString=(String) comboBox.getSelectedItem();
							musicFlagtmp.player();
							playFlag=true;
						}
					} catch (UnsupportedAudioFileException | IOException | LineUnavailableException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
                    
                }
            }
        });
        // 设置默认选中的条目
        comboBox.setSelectedIndex(2);
        comboBox.setBounds(500+10,40,140,20);
        add(comboBox);
        
        ImageIcon image3 = new ImageIcon("src/Img/上一关.png");
        image3.setImage(image3.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
        JLabel jl3 = new JLabel(image3);
        jl3.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent e) {
				if(comboBox.getSelectedIndex()>0);{
					if(comboBox.getSelectedItem()==musicFlagString) {
						musicFlag.stop();
					}else
						musicFlagtmp.stop();
					comboBox.setSelectedIndex(comboBox.getSelectedIndex()-1);
				}
			}
        	
		});
        jl3.setBounds(500+10, 70, 30, 30);
        add(jl3);
        
        ImageIcon image4 = new ImageIcon("src/Img/暂停.png");
        ImageIcon image44 = new ImageIcon("src/Img/开始.png");
        image4.setImage(image4.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
        image44.setImage(image44.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
        JLabel jl4 = new JLabel(image4);
        jl4.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent e) {
				if(comboBox.getSelectedItem()==musicFlagString) {
					musicFlag.stop();
				}else
					musicFlagtmp.stop();
				// TODO Auto-generated method stub
				if(stopflag) {
					jl4.setIcon(image44);
					stopflag=false;
					if(comboBox.getSelectedItem()==musicFlagString) {
						musicFlag.stop();
					}else
						musicFlagtmp.stop();
				}else if(!stopflag) {
					jl4.setIcon(image4);
					stopflag=true;
					if(comboBox.getSelectedItem()==musicFlagString) {
						try {
							musicFlag.player();
						} catch (UnsupportedAudioFileException | IOException | LineUnavailableException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
					} else
						try {
							musicFlagtmp.player();
						} catch (UnsupportedAudioFileException | IOException | LineUnavailableException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
				}
			}
        	
		});
        jl4.setBounds(500+65, 70, 30, 30);
        add(jl4);
        
        
        ImageIcon image5 = new ImageIcon("src/Img/下一关.png");
        image5.setImage(image5.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
        JLabel jl5 = new JLabel(image5);
        jl5.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent e) {
				if(comboBox.getSelectedIndex()<6);{
					if(comboBox.getSelectedItem()==musicFlagString) {
						musicFlag.stop();
					}else
						musicFlagtmp.stop();
					comboBox.setSelectedIndex(comboBox.getSelectedIndex()+1);
				}
			}
        	
		});
        jl5.setBounds(500+120, 70, 30, 30);
        add(jl5);
        
        AddButton();
        
        Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();// 获取屏幕大小
		int screenWidth = (int) screensize.getWidth();
		int screenHeight = (int) screensize.getHeight();
        setLocation(screenWidth / 2 -340, screenHeight / 2 -275);// 设置窗口居中显示
		setSize(680, 550);
		setVisible(true);
        this.addKeyListener(this);
    }
	private void ReadMap(int k) throws IOException {
		DataInputStream cin = new DataInputStream(new FileInputStream("src/JavaClassDesign/"+k+".txt"));
		String b = "";
		int j=0;
		while((b=cin.readLine())!=null) {
			char[] a=b.toCharArray();
			for(int i=0;i<a.length;i++) {
				wall[j][i]=a[i]-'0';
			}
			j++;
		}
		cin.close();
	}

	JLabel[][] boxs=new JLabel[14][14];
	int[][] wall = new int[14][14];
	
	int px;//横向
	int py;//纵向
	int num=0;
	int boxnum=0;
	
	private void win() throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException{
		if (num==boxnum){
			Object[] options={"下一关","返回"};
			 int response=JOptionPane.showOptionDialog ( null, "你的选择","接下来",JOptionPane.YES_OPTION ,JOptionPane.PLAIN_MESSAGE, null, options, options[0] ) ;
			 if(response==0) {
				 if(musicFlag!=null)
					 musicFlag.stop();
				 if(musicFlagtmp!=null)
					 musicFlagtmp.stop();
				 this.dispose();
				 if(k<4)
				 new PlayGameInterface();
			 }
			 if(response==1) {
				 k=0;
				 if(musicFlag!=null)
					 musicFlag.stop();
				 if(musicFlagtmp!=null)
					 musicFlagtmp.stop();
				 this.dispose();
				 if(k<4)
				 new PlayGameInterface();
			 }
		}
	}
	//墙
    private void Setwall() {                        
		// TODO Auto-generated method stub
    	Icon w=new ImageIcon("src/Img/wall.png");
    	for(int i=0;i<wall.length;i++)
    		for(int j=0;j<wall.length;j++){
    			if(wall[i][j]==1){
    			JLabel wall=new JLabel(w);
    			wall.setBounds(30*j, 30*i, 30, 30);
    			this.add(wall);
    			}
    		}
	}
    //目的地
	private void Setdestination() {                  
		// TODO Auto-generated method stub
    	Icon i=new ImageIcon("src/Img/destination.png");
    	for(int i1=0;i1<wall.length;i1++)
    		for(int j=0;j<wall.length;j++){
    			if(wall[i1][j]==8) {
    				JLabel ds1=new JLabel(i);
        			ds1.setBounds(j*30, i1*30, 30, 30);
        			this.add(ds1);
    			}
    		};
	}
   //箱子
	private void Setbox() {                        
		// TODO Auto-generated method stub
    	Icon i=new ImageIcon("src/Img/box1.png");
    	for(int i1=0;i1<wall.length;i1++)
    		for(int j=0;j<wall.length;j++){
    			if(wall[i1][j]==4) {
    				boxnum++;
    				JLabel box1=new JLabel(i);
        			box1.setBounds(j*30, i1*30, 30, 30);
        			this.add(box1);
        			boxs[i1][j]=box1;
    			}
    		};
	}
	
	//玩家
	private void Setplay() {                       
		// TODO Auto-generated method stub
		Icon i=new ImageIcon("src/Img/player.png");
		for(int i1=0;i1<wall.length;i1++)
    		for(int j=0;j<wall.length;j++){
    			if(wall[i1][j]==2) {
    				px=j;
    				py=i1;
    				play=new JLabel(i);
    				play.setBounds(30*px, 30*py, 30, 30);
    				this.add(play);
    				wall[i1][j]=0;
    			}
    		}
	}
    JLabel play;
    JLabel b;

@Override
public void keyPressed(KeyEvent e) {
	step++;
	jl8.setText(step+"步");
	// TODO Auto-generated method stub
	int key=e.getKeyCode();
//***********************************************************//
	if(key==39){ //右
		if(wall[py][px+1]==1)return;                      //人物 墙
		if(wall[py][px+1]==4&&wall[py][px+2]==4)return;   //人物  箱子 箱子
	    if(wall[py][px+1]==4&&wall[py][px+2]==1) return;  //人物 箱子 墙
	    if(wall[py][px+1]==12&&wall[py][px+2]==1)return;        //人物   有箱子的目的地  墙
	    if(wall[py][px+1]==12&&wall[py][px+2]==12)return;        //人物   有箱子的目的地  有箱子的目的地
	    if(wall[py][px+1]==0||wall[py][px+1]==8){         //人物  空地  或  人物  空目的地
			px++;
		   int x=(int)play.getLocation().getX();
		   int y=(int)play.getLocation().getY();
		   play.setLocation(x+30,y);
		   return;
		}
/*****************************************************************/
	    if(wall[py][px+1]==4&&wall[py][px+2]==0){        // 人物  箱子 空地 。
			wall[py][px+1]=0;                         
			wall[py][px+2]=4;
			}
/*****************************************************************/
		if(wall[py][px+1]==4&&wall[py][px+2]==8){ 
			wall[py][px+1]=0;                         //推动: 人物  箱子  空目的地 
			wall[py][px+2]=12;
		    boxs[py][px+1].setLocation(px*30+60, py*30);
		    Icon i=new ImageIcon("src/Img/box2.png");
		    boxs[py][px+1].setIcon(i);
			boxs[py][px+2]=boxs[py][px+1];
			boxs[py][px+1]=null;
			px++;
			int x=(int)play.getLocation().getX();
			int y=(int)play.getLocation().getY();
			play.setLocation(x+30,y);
			num++;
			try {
				win();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (ClassNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (InstantiationException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (IllegalAccessException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (UnsupportedLookAndFeelException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		    return;
		}
/*****************************************************************/
	   if(wall[py][px+1]==12&&wall[py][px+2]==0){ 
		          wall[py][px+1]=8;                   //人物  目标箱子  空地
		          wall[py][px+2]=4;
		          boxs[py][px+1].setLocation(px*30+60, py*30);
				    Icon i=new ImageIcon("src/Img/box1.png");
				    boxs[py][px+1].setIcon(i);
					boxs[py][px+2]=boxs[py][px+1];
					boxs[py][px+1]=null;
					px++;
					int x=(int)play.getLocation().getX();
					int y=(int)play.getLocation().getY();
					play.setLocation(x+30,y);
					num--;
					try {
						win();
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} catch (ClassNotFoundException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} catch (InstantiationException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} catch (IllegalAccessException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} catch (UnsupportedLookAndFeelException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				    return;
		}
/*****************************************************************/
	   if(wall[py][px+1]==12&&wall[py][px+2]==8){ 
		     wall[py][px+1]=8;                         // 人物  有箱子的目的地  空目的地 
		     wall[py][px+2]=12;
	   }
/*****************************************************************/
	    boxs[py][px+1].setLocation(px*30+60, py*30);
		boxs[py][px+2]=boxs[py][px+1];
		boxs[py][px+1]=null;
		px++;
		int x=(int)play.getLocation().getX();
		int y=(int)play.getLocation().getY();
		play.setLocation(x+30,y);
		return;
	}
//*************************************************************//
	if(key==37){ //左
		if(wall[py][px-1]==1)return;                      //人物 墙
		if(wall[py][px-1]==4&&wall[py][px-2]==4)return;   //人物  箱子 箱子
	    if(wall[py][px-1]==4&&wall[py][px-2]==1) return;  //人物 箱子 墙
	    if(wall[py][px-1]==12&&wall[py][px-2]==1)return;        //人物   有箱子的目的地  墙
	    if(wall[py][px-1]==12&&wall[py][px-2]==12)return;        //人物   有箱子的目的地  有箱子的目的地
	    if(wall[py][px-1]==0||wall[py][px-1]==8){         //人物  空地  或  人物  空目的地
			px--;
		   int x=(int)play.getLocation().getX();
		   int y=(int)play.getLocation().getY();
		   play.setLocation(x-30,y);
		   return;
		}
/*****************************************************************/
	    if(wall[py][px-1]==4&&wall[py][px-2]==0){        // 人物  箱子 空地 。
			wall[py][px-1]=0;                         
			wall[py][px-2]=4;
			}
/*****************************************************************/
		if(wall[py][px-1]==4&&wall[py][px-2]==8){ 
			wall[py][px-1]=0;                         //推动: 人物  箱子  空目的地 
			wall[py][px-2]=12;
			boxs[py][px-1].setLocation(px*30-60, py*30);
			 Icon i=new ImageIcon("src/Img/box2.png");
			    boxs[py][px-1].setIcon(i);
			boxs[py][px-2]=boxs[py][px-1];
			boxs[py][px-1]=null;
			px--;
			int x=(int)play.getLocation().getX();
			int y=(int)play.getLocation().getY();
			play.setLocation(x-30,y);
			num++;
			try {
				win();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (ClassNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (InstantiationException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (IllegalAccessException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (UnsupportedLookAndFeelException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			return;
			
		}
/*****************************************************************/
	   if(wall[py][px-1]==12&&wall[py][px-2]==0){ 
		          wall[py][px-1]=8;                   //人物  目标箱子  空地
		          wall[py][px-2]=4;
	              num--;
		}
/*****************************************************************/
	   if(wall[py][px-1]==12&&wall[py][px-2]==8){ 
		     wall[py][px-1]=8;                         // 人物  有箱子的目的地  空目的地 
		     wall[py][px-2]=12;
	   }
/*****************************************************************/
	    boxs[py][px-1].setLocation(px*30-60, py*30);
		boxs[py][px-2]=boxs[py][px-1];
		boxs[py][px-1]=null;
		px--;
		int x=(int)play.getLocation().getX();
		int y=(int)play.getLocation().getY();
		play.setLocation(x-30,y);
		return;
	}
//************************************************************//
	if(key==38){  //上
		if(wall[py-1][px]==1)return;                      //人物 墙
		if(wall[py-1][px]==4&&wall[py-2][px]==4)return;   //人物  箱子 箱子
	    if(wall[py-1][px]==4&&wall[py-2][px]==1) return;  //人物 箱子 墙
	    if(wall[py-1][px]==12&&wall[py-2][px]==1)return;        //人物   有箱子的目的地  墙
	    if(wall[py-1][px]==12&&wall[py-2][px]==12)return;        //人物   有箱子的目的地  有箱子的目的地
/*****************************************************************/
	    if(wall[py-1][px]==0||wall[py-1][px]==8){         //人物  空地  或  人物  空目的地
			py--;
		   int x=(int)play.getLocation().getX();
		   int y=(int)play.getLocation().getY();
		   play.setLocation(x,y-30);
		   return;
		}
/*****************************************************************/
	    if(wall[py-1][px]==4&&wall[py-2][px]==0){        // 人物  箱子 空地 。
			wall[py-1][px]=0;                         
			wall[py-2][px]=4;
			}
/*****************************************************************/
		if(wall[py-1][px]==4&&wall[py-2][px]==8){ 
			wall[py-1][px]=0;                         //推动: 人物  箱子  空目的地 
			wall[py-2][px]=12;
			boxs[py-1][px].setLocation(px*30, py*30-60);
			 Icon i=new ImageIcon("src/Img/box2.png");
			    boxs[py-1][px].setIcon(i);
			boxs[py-2][px]=boxs[py-1][px];
			boxs[py-1][px]=null;
			py--;
			int x=(int)play.getLocation().getX();
			int y=(int)play.getLocation().getY();
			play.setLocation(x,y-30);
			num++;
			try {
				win();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (ClassNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (InstantiationException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (IllegalAccessException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (UnsupportedLookAndFeelException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			return;
		}
/*****************************************************************/
	   if(wall[py-1][px]==12&&wall[py-2][px]==0){ 
		          wall[py-1][px]=8;                   //人物  目标箱子  空地
		          wall[py-2][px]=4;
	              num--;
		}
/*****************************************************************/
	   if(wall[py-1][px]==12&&wall[py-2][px]==8){ 
		     wall[py-1][px]=8;                         // 人物  有箱子的目的地  空目的地 
		     wall[py-2][px]=12;
	   }
/*****************************************************************/
	    boxs[py-1][px].setLocation(px*30, py*30-60);
		boxs[py-2][px]=boxs[py-1][px];
		boxs[py-1][px]=null;
		py--;
		int x=(int)play.getLocation().getX();
		int y=(int)play.getLocation().getY();
		play.setLocation(x,y-30);
		try {
			win();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (ClassNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (InstantiationException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IllegalAccessException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (UnsupportedLookAndFeelException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		return;
	}
//************************************************************//
	if(key==40){   //下
		if(wall[py+1][px]==1)return;                      //人物 墙
		if(wall[py+1][px]==4&&wall[py+2][px]==4)return;   //人物  箱子 箱子
	    if(wall[py+1][px]==4&&wall[py+2][px]==1) return;  //人物 箱子 墙
	    if(wall[py+1][px]==12&&wall[py+2][px]==1)return;        //人物   有箱子的目的地  墙
	    if(wall[py+1][px]==12&&wall[py+2][px]==12)return;        //人物   有箱子的目的地  有箱子的目的地
	    if(wall[py+1][px]==0||wall[py+1][px]==8){         //人物  空地  或  人物  空目的地
			py++;
		   int x=(int)play.getLocation().getX();
		   int y=(int)play.getLocation().getY();
		   play.setLocation(x,y+30);
		   return;
		}
/*****************************************************************/
	    if(wall[py+1][px]==4&&wall[py+2][px]==0){        // 人物  箱子 空地 。
			wall[py+1][px]=0;                         
			wall[py+2][px]=4;
			}
/*****************************************************************/
		if(wall[py+1][px]==4&&wall[py+2][px]==8){ 
			wall[py+1][px]=0;                         //推动: 人物  箱子  空目的地 
			wall[py+2][px]=12;
			 boxs[py+1][px].setLocation(px*30, py*30+60);
			 Icon i=new ImageIcon("src/Img/box2.png");
			    boxs[py+1][px].setIcon(i);
				boxs[py+2][px]=boxs[py+1][px];
				boxs[py+1][px]=null;
				py++;
				int x=(int)play.getLocation().getX();
				int y=(int)play.getLocation().getY();
				play.setLocation(x,y+30);
			    num++;
			    try {
					win();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (InstantiationException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (IllegalAccessException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (UnsupportedLookAndFeelException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			    return;
		}
/*****************************************************************/
	   if(wall[py+1][px]==12&&wall[py+2][px]==0){ 
		          wall[py+1][px]=8;                   //人物  目标箱子  空地
		          wall[py+2][px]=4;
	              num--;
		}
/*****************************************************************/
	   if(wall[py+1][px]==12&&wall[py+2][px]==8){ 
		     wall[py+1][px]=8;                         // 人物  有箱子的目的地  空目的地 
		     wall[py+2][px]=12;
	   }
/*****************************************************************/
	    boxs[py+1][px].setLocation(px*30, py*30+60);
		boxs[py+2][px]=boxs[py+1][px];
		boxs[py+1][px]=null;
		py++;
		int x=(int)play.getLocation().getX();
		int y=(int)play.getLocation().getY();
		play.setLocation(x,y+30);
		try {
			win();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (ClassNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (InstantiationException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IllegalAccessException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (UnsupportedLookAndFeelException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		return;
	}
}

  @Override
   public void keyTyped(KeyEvent e) {
	  // TODO Auto-generated method stub
	
   }

    @Override
   public void keyReleased(KeyEvent e) {
	   // TODO Auto-generated method stub
	
    }
    
}


ClipTestClass.java

package JavaClassDesign;

import java.io.File;
import java.io.IOException;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;

public class ClipTestClass {
	String file;
	Clip clip;
	public ClipTestClass(String file) {
		this.file=file;
	}
	public void player() throws UnsupportedAudioFileException, IOException, LineUnavailableException {
		File filePath = new File(file);
		if(filePath.exists()) {
			AudioInputStream audioInput = AudioSystem.getAudioInputStream(filePath);
			clip = AudioSystem.getClip();
			clip.open(audioInput);
			clip.start();
			clip.loop(Clip.LOOP_CONTINUOUSLY);
			//Thread.sleep(Integer.MAX_VALUE);
		}
	}
	public void stop() {
		if(clip!=null)
		clip.stop();
	}
}

DefineMapBySelf.java

package JavaClassDesign;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.*;
import java.io.IOException;

import javax.swing.*;

public class DefineMapBySelf extends JFrame{
	//  定义下面的按键数组
	JButton[] jb;
	//  定义全局变量flag监听要填充的物体
	int flag=0;
	//  定义一个bool变量用来监听玩家的唯一性
	boolean player = true;
	public DefineMapBySelf() throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
		setLayout(null);
		setIconImage(new ImageIcon("src/Img/电脑.png").getImage());
		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		setTitle("这里是地图编辑器");
		//  设置背景颜色是白色,JFrame必须先获得其面板,在通过调用setBackground()来设置其颜色
		setSize(600, 550);
		//  对jp面板注册鼠标监听
		addMouseListener(new MouseAdapter() {
			@Override
			public void mousePressed(MouseEvent e) {
				int x,y;
				//  获取拖拽的坐标
				x = e.getX()/30;
				y = e.getY()/30;
				//  将对应map的地图更改为对应的标志
				if(map[y][x]==0){
				if(flag == 1){
					map[y][x]=flag;
					InitWall(x*30,y*30);
				}
				if(flag ==2 && player){
					map[y][x]=flag;
					InitPlayer(x*30,y*30);
					player=false;
				}
				if(flag ==8){
					map[y][x]=flag;
					InitDestination(x*30,y*30);
				}
				if(flag==4){
					map[y][x]=flag;
					InitBox(x*30,y*30,y,x);
				}
			    }
			}
		});
		setVisible(true);
		setKey();
		this.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				// TODO Auto-generated method stub
				// 弹出一个确认对话框来确定其操作
				int tmp = JOptionPane.showConfirmDialog(null, "你确定要退出游戏?","提示",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE);
				if(tmp == JOptionPane.YES_OPTION)
					System.exit(0);
			}
		});
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		setLocationRelativeTo(null);
	}
	//  设置地图,0代表可走,1代表墙体,2代表玩家,8代表目的地,4代表箱子
	int[][] map = new int[14][14];
	//  建立Jlabel来实现箱子数组的移动
	JLabel[][] box = new JLabel[14][14];
	//  设置下面按键
	private void setKey() {
		JLabel jl = new JLabel();
		jl.setBounds(20, 460, 550, 30);
		jb = new JButton[7];
		jb[0] = new JButton("墙块");
		jb[0].addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int tmp = JOptionPane.showConfirmDialog(null, "你确定要增加"+jb[0].getText()+"吗?","提示",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE);
				if(tmp == JOptionPane.YES_OPTION){
					flag = 1;
					//System.out.println(flag);
				}
			}
		});
		jb[1] = new JButton("玩家");
        jb[1].addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int tmp = JOptionPane.showConfirmDialog(null, "你确定要增加"+jb[1].getText()+"吗?","提示",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE);
				if(tmp == JOptionPane.YES_OPTION){
					flag = 2;
				}
			}
		});
		jb[2] = new JButton("箱子");
        jb[2].addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int tmp = JOptionPane.showConfirmDialog(null, "你确定要增加"+jb[2].getText()+"吗?","提示",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE);
				if(tmp == JOptionPane.YES_OPTION){
					flag = 4;
				}
			}
		});
		jb[3] = new JButton("目的地");
        jb[3].addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int tmp = JOptionPane.showConfirmDialog(null, "你确定要增加"+jb[3].getText()+"吗?","提示",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE);
				if(tmp == JOptionPane.YES_OPTION){
					flag = 8;
				}
			}
		});
		jb[4] = new JButton("清空");
        jb[4].addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int tmp = JOptionPane.showConfirmDialog(null, "你确定要"+jb[4].getText()+"吗?","提示",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE);
				if(tmp == JOptionPane.YES_OPTION){
					closeThis();
					try {
						new DefineMapBySelf();
					} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
							| UnsupportedLookAndFeelException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
		});
		jb[5] = new JButton("保存");
        jb[5].addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int tmp = JOptionPane.showConfirmDialog(null, "你确定要开始游戏吗?","提示",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE);
				closeThis();
				try {
					new PlayGameInterface(map,box);
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (InstantiationException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (IllegalAccessException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (UnsupportedLookAndFeelException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
		jb[6] = new JButton("返回");
        jb[6].addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int tmp = JOptionPane.showConfirmDialog(null, "你确定要"+jb[6].getText()+"吗?","提示",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE);
			}
		});
		jl.setLayout(new GridLayout(1,7));
		for(int i=0;i<jb.length;i++) {
			jl.add(jb[i]);
		}
		this.add(jl);
	}
	//  设置箱子初始化
	private void InitBox (int x,int y,int i,int j) {
		ImageIcon box1 = new ImageIcon("src/Img/box1.png");
		box[i][j] = new JLabel(box1);
		box[i][j].setBounds(x, y, 30, 30);
		this.getLayeredPane().add(box[i][j],new Integer(Integer.MIN_VALUE));
		//  取JPanel的内容面板,这里需要强制转换
		JPanel jp= (JPanel)this.getContentPane();
		//  将内容面板设置为透明
		jp.setOpaque(false);
	}
	//  设置目的地初始化
	private void InitDestination (int x,int y) {
		ImageIcon box1 = new ImageIcon("src/Img/destination.png");
		JLabel jl = new JLabel(box1);
		jl.setBounds(x, y, 30, 30);
		this.getLayeredPane().add(jl,new Integer(Integer.MIN_VALUE));
		//  取JPanel的内容面板,这里需要强制转换
		JPanel jp= (JPanel)this.getContentPane();
		//  将内容面板设置为透明
		jp.setOpaque(false);
	}
	//  设置玩家初始化
	JLabel jlplay;
	private void InitPlayer (int x,int y) {
		ImageIcon box1 = new ImageIcon("src/Img/player.png");
		jlplay = new JLabel(box1);
		jlplay.setBounds(x, y, 30, 30);
		this.getLayeredPane().add(jlplay,new Integer(Integer.MIN_VALUE));
		//  取JPanel的内容面板,这里需要强制转换
		JPanel jp= (JPanel)this.getContentPane();
		//  将内容面板设置为透明
		jp.setOpaque(false);
	}
	//  设置墙体初始化
	private void InitWall (int x,int y) {
		ImageIcon box1 = new ImageIcon("src/Img/wall.png");
		JLabel jl = new JLabel(box1);
		jl.setBounds(x, y, 30, 30);
		this.getLayeredPane().add(jl,new Integer(Integer.MIN_VALUE));
		//  取JPanel的内容面板,这里需要强制转换
		JPanel jp= (JPanel)this.getContentPane();
		//  将内容面板设置为透明
		jp.setOpaque(false);
		//System.out.println("InitWall");
	}
	private void closeThis() {
		this.dispose();
	}
}

MainJFrameWindow.java

package JavaClassDesign;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.io.IOException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class MainJFrameWindow extends JFrame{
	public MainJFrameWindow() throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
		setIconImage(new ImageIcon("src/Img/电脑.png").getImage());
		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		//  初始化背景
		backgroundInit();
		//  设置开始游戏按钮
		setStartGameButton();
		//  设置编辑地图按钮
		setMapButton();
		//  设置主窗口属性
		setMainWindow();
		//  设置窗口关闭监听器
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				int tmp = JOptionPane.showConfirmDialog(null, "你确认要离开游戏吗?", "提示", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE);
				if(tmp == JOptionPane.YES_OPTION)
					System.exit(0);
			}
		});
	}
	
	//  背景初始化
	private void backgroundInit() {
		//  使用JLabel做 背景
		//  创建一个图片对象
		ImageIcon backg = new ImageIcon("src/Img/background.png");
		JLabel jl = new JLabel(backg);
		jl.setBounds(0,0, backg.getIconWidth(), backg.getIconHeight());
		//  getLayeredPane()获取的是分层面板,将背景图片放置最底层
		this.getLayeredPane().add(jl,new Integer(Integer.MIN_VALUE));
        //  取JPanel的内容面板,这里需要强制转换
        JPanel jp= (JPanel)this.getContentPane();
        //  将内容面板设置为透明
        jp.setOpaque(false);
	}
	
	//  设置主窗体的属性
	private void setMainWindow() {
	    //  覆盖其默认布局,我们自己控制布局
		setLayout(null);    
		setTitle("推箱子");
		setVisible(true);
		setSize(600, 600);
		//  设置窗口居中  
		setLocationRelativeTo(null);
		//  设置当关闭消息确认框时,主窗口不会改变
		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
	}
	
	//  设置开始游戏按钮
	private void setStartGameButton() {
		JButton jb = new JButton("开始游戏 ");
		jb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//  关闭当前的主窗口
				closeThis();
				//  进入游戏的窗口
				try {
					new PlayGameInterface();
				} catch (IOException ioException) {
					ioException.printStackTrace();
				} catch (ClassNotFoundException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (InstantiationException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (IllegalAccessException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (UnsupportedLookAndFeelException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
		jb.setBounds(250, 250, 90, 30);
		this.add(jb);
	}
	
	//  设置编辑地图按钮
	private void setMapButton() {
		JButton jb = new JButton("编辑地图 ");
		jb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				closeThis();
				try {
					new DefineMapBySelf();
				} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
						| UnsupportedLookAndFeelException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
		jb.setBounds(250, 300, 90, 30);
		this.add(jb);
	}
	
	//  关闭当前界面的函数
	private void closeThis() {
		this.dispose();
	}
}

UserInter.java

package JavaClassDesign;

import javax.swing.UnsupportedLookAndFeelException;

public class UserInter {
	public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
		new MainJFrameWindow();
	}
}

想知道我是如解决编码过程中遇到的问题和困难,可以关注我哦。后面的博客会更新相关问题。

标签:箱子,课程设计,Java,wall,px,py,catch,new,e1
来源: https://blog.csdn.net/weixin_45882303/article/details/112093795

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有