天天看點

推箱子JAVA代碼

此代碼參考傳智播客推箱子視訊并進行改進 增加esc關閉視窗,用adws或控制方向 的代碼

import game.qust.cn.MainFrame;

//啟動入口
public class App {
	public static void main(String[] args) {
		new MainFrame();
	}
}

           
package game.qust.cn;

import java.awt.Frame;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;




public class MainFrame extends Frame implements KeyListener{
	public MainFrame() {
		
		wolfInit();//做人物
		sheepInit();//做箱子
		targetInit();//做籠子
		treeInit();//做障礙
		backgroundInit();//背景初始化
		
		//設定整個窗體
		setMainFrameUI();
		
		this.addKeyListener(this);//使視窗監聽鍵盤(寫視窗初始化後面)
		
	}
	
	JLabel[][]  sheeps=new JLabel[12][16];//用來存儲三隻羊
	
	//場景資料模拟  二維數組
	//1代表障礙  0代表空地
	int[][] datas= {
			{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
			{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
			{1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1},
			{1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1},
			{1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1},
			{1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1},
			{1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1},
			{1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1},
			{1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1},
			{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
			{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
			{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
	};
	int wx ;//代表人物橫向位置
	int wy ;//代表人物縱向位置
	//代表目前有多少個箱子移動到了目标中
	int num = 0;
	//代表箱子的總數
	int total = 3;
	private void treeInit() {
		//建立圖檔
		Icon ic=new ImageIcon("tree.png");
		// 周遊二維數組
		for(int i=0;i<datas.length;i++) {
			for(int j=0;j<datas[i].length;j++) {
				if(datas[i][j]==1) {
				//障礙初始化
				JLabel lab_tree=new JLabel(ic);
				lab_tree.setBounds(12+50*j,36+50*i,50,50);//設定位置 大小
				this.add(lab_tree);//添加圖像到視窗
				}
			}
		}
		
	}

	private void targetInit() {
		//用jlabel制作一個籠子
		Icon i=new ImageIcon("target.png");		
		JLabel lab_target1=new JLabel(i);
		lab_target1.setBounds(700+12,200+36,50,50);//設定籠子位置 大小
		this.add(lab_target1);//添加圖像到視窗
		datas[4][14] = 8;
		
		JLabel lab_target2=new JLabel(i);
		lab_target2.setBounds(700+12,300+36,50,50);//設定籠子位置 大小
		this.add(lab_target2);//添加圖像到視窗
		datas[6][14] = 8;
		
		JLabel lab_target3=new JLabel(i);
		lab_target3.setBounds(700+12,250+36,50,50);//設定籠子位置 大小
		this.add(lab_target3);//添加圖像到視窗
		datas[5][14] = 8;
	}

	private void sheepInit() {
		//用jlabel制作一隻羊
		Icon i=new ImageIcon("sheep-no.png");
		
		JLabel lab_sheep1=new JLabel(i);
		lab_sheep1.setBounds(512,336,50,50);//設定羊位置 大小
		this.add(lab_sheep1);//添加圖像到視窗
		datas[6][10]=4;
		sheeps[6][10]=lab_sheep1;//把這個jlabel元件放入sheeps數組中
		
		JLabel lab_sheep2=new JLabel(i);
		lab_sheep2.setBounds(612,486,50,50);//設定羊位置 大小
		this.add(lab_sheep2);//添加圖像到視窗
		datas[9][12]=4;
		sheeps[9][12]=lab_sheep2;//把這個jlabel元件放入sheeps數組中
		
		JLabel lab_sheep3=new JLabel(i);
		lab_sheep3.setBounds(312,186,50,50);//設定羊位置 大小
		this.add(lab_sheep3);//添加圖像到視窗
		datas[3][6]=4;
		sheeps[3][6]=lab_sheep3;//把這個jlabel元件放入sheeps數組中
	}
	
	private void backgroundInit() {
		//用jlabel制作背景
		Icon i=new ImageIcon("bg.png");
		JLabel lab_bg=new JLabel(i);
		lab_bg.setBounds(12,36,800,600);//設定背景位置 大小
		this.add(lab_bg);//添加圖像到視窗
	}
	
	
	private void wolfInit() {
		wx=6;
		wy=1;//人物位置
		//用jlabel制作灰太狼
		Icon i=new ImageIcon("wolf-zm.png");
		lab_wolf=new JLabel(i);
		lab_wolf.setBounds(12+wx*50,36+wy*50,50,50);//設定狼位置 大小(位置對背景修正)
		this.add(lab_wolf);//添加圖像到視窗
		
	}
	JLabel lab_wolf;
	
	private void setMainFrameUI() {
		this.setLayout(null);//窗體自由布局
		
		this.setSize(824,650); //窗體大小
		this.setLocation(150,150);//窗體位置
		this.setTitle("推箱子 v1.0");//窗體頭顯示内容
		//設定視窗顯示
		this.setVisible(true);
	}	
	public void keyReleased(KeyEvent e) {
		//點選鍵盤後現在程式有動作執行了
		//如何分辨使用者點選的是鍵盤上的某個按鍵?
		//通過鍵碼值分辨是哪一個按鍵
		//擷取鍵碼值的方式:
		//key代表了你輸入的是哪個按鍵
		//左 37
		//上 38
		//右 39
		//下 40
		int key = e.getKeyCode();
		if(key == 39|key == 68){
			//讓人物向右移動
			//方向上第一位的坐标是 wy wx+1
			//方向上第二位的坐标是 wy wx+2
			if(datas[wy][wx+1] == 0){
				wx = wx+1;
				int x =(int)lab_wolf.getLocation().getX();
				int y =(int)lab_wolf.getLocation().getY();
				lab_wolf.setLocation(x+50, y);
				Icon i = new ImageIcon("wolf-ym.png");
				lab_wolf.setIcon(i);
				return;
			}
			
			if(datas[wy][wx+1] == 1){
				return;
			}
			if(datas[wy][wx+1] == 4 && datas[wy][wx+2] == 1){
				return;
			}
			if(datas[wy][wx+1] == 4 && datas[wy][wx+2] == 4){
				return;
			}
			if(datas[wy][wx+1] == 4 && datas[wy][wx+2] == 12){
				return;
			}
			if(datas[wy][wx+1] == 12 && datas[wy][wx+2] == 1){
				return;
			}
			if(datas[wy][wx+1] == 12 && datas[wy][wx+2] == 4){
				return;
			}
			if(datas[wy][wx+1] == 12 && datas[wy][wx+2] == 12){
				return;
			}
			
			if(datas[wy][wx+1] == 8){
				wx = wx+1;
				int x =(int)lab_wolf.getLocation().getX();
				int y =(int)lab_wolf.getLocation().getY();
				lab_wolf.setLocation(x+50, y);
				Icon i = new ImageIcon("wolf-ym.png");
				lab_wolf.setIcon(i);
				return;
			}

			if(datas[wy][wx+1] == 4 && datas[wy][wx+2] == 0){
				datas[wy][wx+1] = 0;
				datas[wy][wx+2] = 4;
			}

			if(datas[wy][wx+1] == 4 && datas[wy][wx+2] == 8){
				datas[wy][wx+1] = 0;
				datas[wy][wx+2] = 12;
				num++;
			}
			if(datas[wy][wx+1] == 12 && datas[wy][wx+2] == 0){
				datas[wy][wx+1] = 8;
				datas[wy][wx+2] = 4;
				num--;
			}
			if(datas[wy][wx+1] == 12 && datas[wy][wx+2] == 8){
				datas[wy][wx+1] = 8;
				datas[wy][wx+2] = 12;
			}
			sheeps[wy][wx+1].setLocation(12+wx*50+100,36+wy*50);
			sheeps[wy][wx+2] = sheeps[wy][wx+1];
			sheeps[wy][wx+1] = null;
			wx = wx+1;
			int x =(int)lab_wolf.getLocation().getX();
			int y =(int)lab_wolf.getLocation().getY();
			lab_wolf.setLocation(x+50, y);
			Icon i = new ImageIcon("wolf-ym.png");
			lab_wolf.setIcon(i);
			//判斷勝利
			victory();
			return;
		}
		if(key==37|key==65){
			//讓人物向左移動
			//方向上第一位的坐标是 wy wx-1
			//方向上第二位的坐标是 wy wx-2
			if(datas[wy][wx-1] == 0){
				wx = wx-1;
				int x =(int)lab_wolf.getLocation().getX();
				int y =(int)lab_wolf.getLocation().getY();
				lab_wolf.setLocation(x-50, y);
				Icon i = new ImageIcon("wolf-zb.png");
				lab_wolf.setIcon(i);
				return;
			}
			
			if(datas[wy][wx-1] == 1){
				return;
			}
			if(datas[wy][wx-1] == 4 && datas[wy][wx-2] == 1){
				return;
			}
			if(datas[wy][wx-1] == 4 && datas[wy][wx-2] == 4){
				return;
			}
			if(datas[wy][wx-1] == 4 && datas[wy][wx-2] == 12){
				return;
			}
			if(datas[wy][wx-1] == 12 && datas[wy][wx-2] == 1){
				return;
			}
			if(datas[wy][wx-1] == 12 && datas[wy][wx-2] == 4){
				return;
			}
			if(datas[wy][wx-1] == 12 && datas[wy][wx-2] == 12){
				return;
			}
			
			if(datas[wy][wx-1] == 8){
				wx = wx-1;
				int x =(int)lab_wolf.getLocation().getX();
				int y =(int)lab_wolf.getLocation().getY();
				lab_wolf.setLocation(x-50, y);
				Icon i = new ImageIcon("wolf-zb.png");
				lab_wolf.setIcon(i);
				return;
			}

			if(datas[wy][wx-1] == 4 && datas[wy][wx-2] == 0){
				datas[wy][wx-1] = 0;
				datas[wy][wx-2] = 4;
			}

			if(datas[wy][wx-1] == 4 && datas[wy][wx-2] == 8){
				datas[wy][wx-1] = 0;
				datas[wy][wx-2] = 12;
				num++;
			}
			if(datas[wy][wx-1] == 12 && datas[wy][wx-2] == 0){
				datas[wy][wx-1] = 8;
				datas[wy][wx-2] = 4;
				num--;
			}
			if(datas[wy][wx-1] == 12 && datas[wy][wx-2] == 8){
				datas[wy][wx-1] = 8;
				datas[wy][wx-2] = 12;
			}
			sheeps[wy][wx-1].setLocation(12+wx*50-100,36+wy*50);
			sheeps[wy][wx-2] = sheeps[wy][wx-1];
			sheeps[wy][wx-1] = null;
			wx = wx-1;
			int x =(int)lab_wolf.getLocation().getX();
			int y =(int)lab_wolf.getLocation().getY();
			lab_wolf.setLocation(x-50, y);
			Icon i = new ImageIcon("wolf-zb.png");
			lab_wolf.setIcon(i);
			victory();
			return;
		}
		if(key == 38|key == 87){
			//讓人物向上移動
			//方向上第一位的坐标是 wy wx-1
			//方向上第二位的坐标是 wy wx-2
			if(datas[wy-1][wx] == 0){
				wy = wy-1;
				int x =(int)lab_wolf.getLocation().getX();
				int y =(int)lab_wolf.getLocation().getY();
				lab_wolf.setLocation(x, y-50);
				Icon i = new ImageIcon("wolf-sm.png");
				lab_wolf.setIcon(i);
				return;
			}
			
			if(datas[wy-1][wx] == 1){
				return;
			}
			if(datas[wy-1][wx] == 4 && datas[wy-2][wx] == 1){
				return;
			}
			if(datas[wy-1][wx] == 4 && datas[wy-2][wx] == 4){
				return;
			}
			if(datas[wy-1][wx] == 4 && datas[wy-2][wx] == 12){
				return;
			}
			if(datas[wy-1][wx] == 12 && datas[wy-2][wx] == 1){
				return;
			}
			if(datas[wy-1][wx] == 12 && datas[wy-2][wx] == 4){
				return;
			}
			if(datas[wy-1][wx] == 12 && datas[wy-2][wx] == 12){
				return;
			}
			
			if(datas[wy-1][wx] == 8){
				wy = wy-1;
				int x =(int)lab_wolf.getLocation().getX();
				int y =(int)lab_wolf.getLocation().getY();
				lab_wolf.setLocation(x, y-50);
				Icon i = new ImageIcon("wolf-sm.png");
				lab_wolf.setIcon(i);
				return;
			}

			if(datas[wy-1][wx] == 4 && datas[wy-2][wx] == 0){
				datas[wy-1][wx] = 0;
				datas[wy-2][wx] = 4;
			}

			if(datas[wy-1][wx] == 4 && datas[wy-2][wx] == 8){
				datas[wy-1][wx] = 0;
				datas[wy-2][wx] = 12;
				num++;
			}
			if(datas[wy-1][wx] == 12 && datas[wy-2][wx] == 0){
				datas[wy-1][wx] = 8;
				datas[wy-2][wx] = 4;
				num--;
			}
			if(datas[wy-1][wx] == 12 && datas[wy-2][wx] == 8){
				datas[wy-1][wx] = 8;
				datas[wy-2][wx] = 12;
			}
			sheeps[wy-1][wx].setLocation(12+wx*50,36+wy*50-100);
			sheeps[wy-2][wx] = sheeps[wy-1][wx];
			sheeps[wy-1][wx] = null;
			wy = wy-1;
			int x =(int)lab_wolf.getLocation().getX();
			int y =(int)lab_wolf.getLocation().getY();
			lab_wolf.setLocation(x, y-50);
			Icon i = new ImageIcon("wolf-sm.png");
			lab_wolf.setIcon(i);
			victory();
			return;
		}
		
		if(key == 40|key == 83){
			//讓人物向下移動
			//方向上第一位的坐标是 wy wx+1
			//方向上第二位的坐标是 wy wx+2
			if(datas[wy+1][wx] == 0){
				wy = wy+1;
				int x =(int)lab_wolf.getLocation().getX();
				int y =(int)lab_wolf.getLocation().getY();
				lab_wolf.setLocation(x, y+50);
				Icon i = new ImageIcon("wolf-zm.png");
				lab_wolf.setIcon(i);
				return;
			}
			
			if(datas[wy+1][wx] == 1){
				return;
			}
			if(datas[wy+1][wx] == 4 && datas[wy+2][wx] == 1){
				return;
			}
			if(datas[wy+1][wx] == 4 && datas[wy+2][wx] == 4){
				return;
			}
			if(datas[wy+1][wx] == 4 && datas[wy+2][wx] == 12){
				return;
			}
			if(datas[wy+1][wx] == 12 && datas[wy+2][wx] == 1){
				return;
			}
			if(datas[wy+1][wx] == 12 && datas[wy+2][wx] == 4){
				return;
			}
			if(datas[wy+1][wx] == 12 && datas[wy+2][wx] == 12){
				return;
			}
			
			if(datas[wy+1][wx] == 8){
				wy = wy+1;
				int x =(int)lab_wolf.getLocation().getX();
				int y =(int)lab_wolf.getLocation().getY();
				lab_wolf.setLocation(x, y+50);
				Icon i = new ImageIcon("wolf-zm.png");
				lab_wolf.setIcon(i);
				return;
			}

			if(datas[wy+1][wx] == 4 && datas[wy+2][wx] == 0){
				datas[wy+1][wx] = 0;
				datas[wy+2][wx] = 4;
			}

			if(datas[wy+1][wx] == 4 && datas[wy+2][wx] == 8){
				datas[wy+1][wx] = 0;
				datas[wy+2][wx] = 12;
				num++;
			}
			if(datas[wy+1][wx] == 12 && datas[wy+2][wx] == 0){
				datas[wy+1][wx] = 8;
				datas[wy+2][wx] = 4;
				num--;
			}
			if(datas[wy+1][wx] == 12 && datas[wy+2][wx] == 8){
				datas[wy+1][wx] = 8;
				datas[wy+2][wx] = 12;
			}
			sheeps[wy+1][wx].setLocation(12+wx*50,36+wy*50+100);
			sheeps[wy+2][wx] = sheeps[wy+1][wx];
			sheeps[wy+1][wx] = null;
			wy = wy+1;
			int x =(int)lab_wolf.getLocation().getX();
			int y =(int)lab_wolf.getLocation().getY();
			lab_wolf.setLocation(x, y+50);
			Icon i = new ImageIcon("wolf-zm.png");
			lab_wolf.setIcon(i);
			victory();
			return;
		}
		if(key == 27) {
			this.setVisible(false);
		}
	}
	private void victory() {
		if(num == total){
			System.out.println("勝利");
		}
	}



	@Override
	public void keyPressed(KeyEvent e) {
		// TODO 自動生成的方法存根
		
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// TODO 自動生成的方法存根
		
	}
}


           

在這裡插入圖檔描述

推箱子JAVA代碼
推箱子JAVA代碼
推箱子JAVA代碼
推箱子JAVA代碼
推箱子JAVA代碼
推箱子JAVA代碼
推箱子JAVA代碼
推箱子JAVA代碼

繼續閱讀