(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;
}
}
}