JAVA推箱子游戏

(JAVA推箱子游戏)写了一个简单的推箱子游戏

先写程序的入口和主函数
//执行程序的入口类
public class app {
public static void main(String [] args) {
new MainFrame();
}
}

接下来需要设计主窗体,创建狼对象,羊对象,树对象和键盘的监听事件等
然后将整个游戏过程中会出现的事件都罗列出来

//主窗体
//需要一个继承类 Frame
public class MainFrame extends Frame implements KeyListener {
//设置窗口的信息,窗口是否显示,用构造方法
public MainFrame() {
//创建窗体和人物的时候,要把背景图片放在最下面,免得被覆盖
targeInit();//创建笼子并添加到背景去
wolfInit();//创建狼人物,并添加到背景里去
sheepInit();//创建羊人物,并添加到背景
treeInit();//障碍物树的建立
backgroundInit();//制作背景并添加到窗口里
setMainFrameui();//设置主窗体
this.addKeyListener(this);//】创建键盘监听事件
}
//创建JLabel组件存储数组对应二维数组模型
JLabel [][] sheeps=new JLabel[12][16];
//使用数组建模,1代表障碍树木,0代表空地,2代表羊,8代表笼中羊,4代表笼子
int [][] array= {
{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,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1},
{1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1},
{1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1},
{1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1},
{1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1},
{1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,1},
{1,0,0,0,1,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() {
// TODO Auto-generated method stub
//创建一个障碍物的对象,添加图片
Icon ic=new ImageIcon("障碍物.png");
//遍历二维数组
for(int i=0;i

}
//笼子的制作
private void targeInit() {
// TODO Auto-generated method stub
Icon i=new ImageIcon(“笼子.png”);

//制作第一个笼子
lab_targe1=new JLabel(i);
lab_targe1.setBounds(10+50*14, 30+50*4, 50, 50);
this.add(lab_targe1);
array[4][14]=4;

//制作第二个笼子
lab_targe2=new JLabel(i);
lab_targe2.setBounds(10+50*14, 30+50*5, 50, 50);
this.add(lab_targe2);
array[5][14]=4;

//制作第三个笼子
lab_targe3=new JLabel(i);
lab_targe3.setBounds(10+50*14, 30+50*6, 50, 50);
this.add(lab_targe3);
array[6][14]=4;

}

JLabel lab_targe1;
JLabel lab_targe2;
JLabel lab_targe3;

private void sheepInit() {
	
// TODO Auto-generated method stub
	//插入羊的图片
	Icon i=new ImageIcon("羊-1.png");
	
	//制作第一只羊
	lab_sheep1=new JLabel(i);
	lab_sheep1.setBounds(10+6*50, 30+4*50, 50, 50);
    this.add(lab_sheep1);
    array[4][6]=2;//将有羊的地方设置成2
    sheeps[4][6]=lab_sheep1;
    
    //制作第二只羊
    lab_sheep2=new JLabel(i);
    lab_sheep2.setBounds(10+6*50, 30+6*50, 50, 50);
    this.add(lab_sheep2);
    array[6][6]=2;
    sheeps[6][6]=lab_sheep2;
    
    //制作第三只羊
    lab_sheep3=new JLabel(i);
    lab_sheep3.setBounds(10+6*50, 30+8*50, 50, 50);
    this.add(lab_sheep3);
    array[8][6]=2;
    sheeps[8][6]=lab_sheep3;

}

JLabel lab_sheep1;
JLabel lab_sheep2;
JLabel lab_sheep3;

private void wolfInit() {//使用私有的方法缩小使用的范围
// TODO Auto-generated method stub
	//定义x和y,狼的第几行第几列
	wx=1;
	wy=1;
Icon i=new ImageIcon("狼正面.png");//添加狼图片
lab_wolf=new JLabel(i);//使用JLabel组件 并将狼图片放入组件中
lab_wolf.setBounds(10+wx*50, 30+wy*50, 50, 50);//设置组件的位置和像素大小
this.add(lab_wolf);//将图片添加到窗口里面去

}
JLabel lab_wolf;
//背景初始化
private void backgroundInit() {
// TODO Auto-generated method stub
Icon i=new ImageIcon(“floor.png”);//使用Icon添加背景图片
JLabel lab_bg=new JLabel(i);//使用JLabdel制作背景,new一个背景对象
lab_bg.setBounds(10, 30, 800, 600);//设置图片在窗体里的位置,先设位置在设大小
this.add(lab_bg);//将图片添加到窗体里

}
//胜利的判断
private void victory() {
if(num==total) {

		JOptionPane.showMessageDialog(null,"胜利","推箱子",JOptionPane.PLAIN_MESSAGE);
	}
}


//主窗体显示信息

private void setMainFrameui(){
	//设置窗体为自由布局否则为默认布局
	this.setLayout(null);
	//设置窗口大小
	this.setSize(820, 660);
	//设置窗口位置
	this.setLocation(300, 75);
	this.setTitle("推箱子JAVA项目");//设置窗口标题
	//设置窗口显示出来,true表示显示出来
	this.setVisible(true);   
}
@Override
public void keyTyped(KeyEvent e) {
	// TODO Auto-generated method stub
	
}
@Override
public void keyPressed(KeyEvent e) {//按下键盘的时候调用此方法
	// TODO Auto-generated method stub
	
}
@Override
public void keyReleased(KeyEvent e) {//键盘弹起时的时候调用此方法
	// TODO Auto-generated method stub
	//使用get放法获得横纵坐标
	int x=(int)lab_wolf.getLocation().getX();
	int y=(int)lab_wolf.getLocation().getY();
    //通过键码值分辨按得键
	//上 38   下 40  左 37  右  39
	int key=e.getKeyCode();//使用getKeyCode()方法获得键码值
	if(key==38) {
		//狼与树
		if(array[wy-1][wx]==1) {
			return;
		}
		//狼与羊与树
		if(array[wy-1][wx]==2&&array[wy-2][wx]==1) {
			return;
		}
		//狼与羊与羊
		if(array[wy-1][wx]==2&&array[wy-2][wx]==2) {
			return;
		}
		//狼与羊与笼中羊
		if(array[wy-1][wx]==2&&array[wy-2][wx]==3) {
			return;
		}
		//狼与笼中羊与笼中羊
		if(array[wy-1][wx]==3&&array[wy-2][wx]==3) {
			return;
		}
		//狼与笼中羊与羊
		if(array[wy-1][wx]==3&&array[wy-2][wx]==2) {
			return;
		}
		//狼与笼中羊与树
		if(array[wy-1][wx]==3&&array[wy-2][wx]==1) {
			return;
		}
		//狼与空地和狼与笼子
		if(array[wy-1][wx]==0||array[wy-1][wx]==4) {
			wy=wy-1;
			lab_wolf.setLocation(x, y-50);
			Icon i=new ImageIcon("狼背面.png");
			lab_wolf.setIcon(i);
			return;
		}
		if(array[wy-1][wx]==0) {
			//让狼人物向右移
			wy=wy-1;
			lab_wolf.setLocation(x, y-50);
			Icon i=new ImageIcon("狼背面.png");
			lab_wolf.setIcon(i);
			return;
			}
		//狼与羊与空地
		if(array[wy-1][wx]==2&&array[wy-2][wx]==0) {
			array[wy-1][wx]=0;
			array[wy-2][wx]=2;
		}
		//狼与羊与笼子
		if(array[wy-1][wx]==2&&array[wy-2][wx]==4) {
			array[wy-1][wx]=0;
			array[wy-2][wx]=3;
			num++;
		}
		//狼与笼中羊与空地
		if(array[wy-1][wx]==3&&array[wy-2][wx]==0) {
			array[wy-1][wx]=4;
			array[wy-2][wx]=2;
			num--;
		}
		//狼与笼中羊与笼子
		if(array[wy-1][wx]==3&&array[wy-2][wx]==4) {
			array[wy-1][wx]=4;
			array[wy-2][wx]=3;
		}
		sheeps[wy-1][wx].setLocation(10+wx*50, 30+wy*50-100);//这里只改变了显示的位置
		sheeps[wy-2][wx]=sheeps[wy-1][wx];//将原始位置上的组件清除掉
		sheeps[wy-1][wx]=null;
		
		wy-=1;
		lab_wolf.setLocation(x, y-50);
		Icon i=new ImageIcon("狼背面.png");
		lab_wolf.setIcon(i);
		victory();
		return;
       
	}
	if(key==40) {
		//狼与树
		if(array[wy+1][wx]==1) {
			return;
		}
		//狼与羊与树
		if(array[wy+1][wx]==2&&array[wy+2][wx]==1) {
			return;
		}
		//狼与羊与羊
		if(array[wy+1][wx]==2&&array[wy+2][wx]==2) {
			return;
		}
		//狼与羊与笼中羊
		if(array[wy+1][wx]==2&&array[wy+2][wx]==3) {
			return;
		}
		//狼与笼中羊与笼中羊
		if(array[wy+1][wx]==3&&array[wy+2][wx]==3) {
			return;
		}
		//狼与笼中羊与羊
		if(array[wy+1][wx]==3&&array[wy+2][wx]==2) {
			return;
		}
		//狼与笼中羊与树
		if(array[wy+1][wx]==3&&array[wy+2][wx]==1) {
			return;
		}
		//狼与空地和狼与笼子
		if(array[wy+1][wx]==0||array[wy+1][wx]==4) {
			wy=wy+1;
			lab_wolf.setLocation(x, y+50);
			Icon i=new ImageIcon("狼正面.png");
			lab_wolf.setIcon(i);
			return;
		}
		if(array[wy+1][wx]==0) {
			//让狼人物向右移
			wy=wy+1;
			lab_wolf.setLocation(x, y+50);
			Icon i=new ImageIcon("狼正面.png");
			lab_wolf.setIcon(i);
			return;
			}
		//狼与羊与空地
		if(array[wy+1][wx]==2&&array[wy+2][wx]==0) {
			array[wy+1][wx]=0;
			array[wy+2][wx]=2;
		}
		//狼与羊与笼子
		if(array[wy+1][wx]==2&&array[wy+2][wx]==4) {
			array[wy+1][wx]=0;
			array[wy+2][wx]=3;
			num++;
		}
		//狼与笼中羊与空地
		if(array[wy+1][wx]==3&&array[wy+2][wx]==0) {
			array[wy+1][wx]=4;
			array[wy+2][wx]=2;
			num--;
		}
		//狼与笼中羊与笼子
		if(array[wy+1][wx]==3&&array[wy+2][wx]==4) {
			array[wy+1][wx]=4;
			array[wy+2][wx]=3;
		}
		sheeps[wy+1][wx].setLocation(10+wx*50, 30+wy*50+100);//这里只改变了显示的位置
		sheeps[wy+2][wx]=sheeps[wy+1][wx];//将原始位置上的组件清除掉
		sheeps[wy+1][wx]=null;
		
		wy+=1;
		lab_wolf.setLocation(x, y+50);
		Icon i=new ImageIcon("狼正面.png");
		lab_wolf.setIcon(i);
		victory();
		return;
       
	}
	if(key==37) {
		//狼与树
		if(array[wy][wx-1]==1) {
			return;
		}
		//狼与羊与树
		if(array[wy][wx-1]==2&&array[wy][wx-2]==1) {
			return;
		}
		//狼与羊与羊
		if(array[wy][wx-1]==2&&array[wy][wx-2]==2) {
			return;
		}
		//狼与羊与笼中羊
		if(array[wy][wx-1]==2&&array[wy][wx-2]==3) {
			return;
		}
		//狼与笼中羊与笼中羊
		if(array[wy][wx-1]==3&&array[wy][wx-2]==3) {
			return;
		}
		//狼与笼中羊与羊
		if(array[wy][wx-1]==3&&array[wy][wx-2]==2) {
			return;
		}
		//狼与笼中羊与树
		if(array[wy][wx-1]==3&&array[wy][wx-2]==1) {
			return;
		}
		//狼与空地和狼与笼子
		if(array[wy][wx-1]==0||array[wy][wx-1]==4) {
			wx=wx-1;
			lab_wolf.setLocation(x-50, y);
			Icon i=new ImageIcon("狼左面.png");
			lab_wolf.setIcon(i);
			return;
		}
		if(array[wy][wx-1]==0) {
			//让狼人物向右移
			wx=wx-1;
			lab_wolf.setLocation(x-50, y);
			Icon i=new ImageIcon("狼右面.png");
			lab_wolf.setIcon(i);
			}
		//狼与羊与空地
		if(array[wy][wx-1]==2&&array[wy][wx-2]==0) {
			array[wy][wx-1]=0;
			array[wy][wx-2]=2;
		}
		//狼与羊与笼子
		if(array[wy][wx-1]==2&&array[wy][wx-2]==4) {
			array[wy][wx-1]=0;
			array[wy][wx-2]=3;
			num++;
		}
		//狼与笼中羊与空地
		if(array[wy][wx-1]==3&&array[wy][wx-2]==0) {
			array[wy][wx-1]=4;
			array[wy][wx-2]=2;
			num--;
		}
		//狼与笼中羊与笼子
		if(array[wy][wx-1]==3&&array[wy][wx-2]==4) {
			array[wy][wx-1]=4;
			array[wy][wx-2]=3;
		}
		sheeps[wy][wx-1].setLocation(10+wx*50-100, 30+wy*50);//这里只改变了显示的位置
		sheeps[wy][wx-2]=sheeps[wy][wx-1];//将原始位置上的组件清除掉
		sheeps[wy][wx-1]=null;
		
		wx-=1;
		lab_wolf.setLocation(x-50, y);
		Icon i=new ImageIcon("狼左面.png");
		lab_wolf.setIcon(i);
		victory();
		return;
       
	}
	if(key==39) {
		//狼与树
		if(array[wy][wx+1]==1) {
			return;
		}
		//狼与羊与树
		if(array[wy][wx+1]==2&&array[wy][wx+2]==1) {
			return;
		}
		//狼与羊与羊
		if(array[wy][wx+1]==2&&array[wy][wx+2]==2) {
			return;
		}
		//狼与羊与笼中羊
		if(array[wy][wx+1]==2&&array[wy][wx+2]==3) {
			return;
		}
		//狼与笼中羊与笼中羊
		if(array[wy][wx+1]==3&&array[wy][wx+2]==3) {
			return;
		}
		//狼与笼中羊与羊
		if(array[wy][wx+1]==3&&array[wy][wx+2]==2) {
			return;
		}
		//狼与笼中羊与树
		if(array[wy][wx+1]==3&&array[wy][wx+2]==1) {
			return;
		}
		//狼与空地和狼与笼子
		if(array[wy][wx+1]==0||array[wy][wx+1]==4) {
			wx=wx+1;
			lab_wolf.setLocation(x+50, y);
			Icon i=new ImageIcon("狼右面.png");
			lab_wolf.setIcon(i);
			return;
		}
		if(array[wy][wx+1]==0) {
			//让狼人物向右移
			wx=wx+1;
			lab_wolf.setLocation(x+50, y);
			Icon i=new ImageIcon("狼右面.png");
			lab_wolf.setIcon(i);
			}
		//狼与羊与空地
		if(array[wy][wx+1]==2&&array[wy][wx+2]==0) {
			array[wy][wx+1]=0;
			array[wy][wx+2]=2;
		}
		//狼与羊与笼子
		if(array[wy][wx+1]==2&&array[wy][wx+2]==4) {
			array[wy][wx+1]=0;
			array[wy][wx+2]=3;
			num++;
		}
		//狼与笼中羊与空地
		if(array[wy][wx+1]==3&&array[wy][wx+2]==0) {
			array[wy][wx+1]=4;
			array[wy][wx+2]=2;
			num--;
		}
		//狼与笼中羊与笼子
		if(array[wy][wx+1]==3&&array[wy][wx+2]==4) {
			array[wy][wx+1]=4;
			array[wy][wx+2]=3;
		}
		sheeps[wy][wx+1].setLocation(10+wx*50+100, 30+wy*50);//这里只改变了显示的位置
		sheeps[wy][wx+2]=sheeps[wy][wx+1];//将原始位置上的组件清除掉
		sheeps[wy][wx+1]=null;
		
		wx+=1;
		lab_wolf.setLocation(x+50, y);
		Icon i=new ImageIcon("狼右面.png");
		lab_wolf.setIcon(i);
		victory();
		return;
       
	}
}

}

你可能感兴趣的:(JAVA推箱子游戏)