推箱子游戏

举报
周杰伦本人 发表于 2022/09/29 14:50:19 2022/09/29
【摘要】 推箱子游戏 背景 地图 人物移动 过关 总结 推箱子游戏推箱子的游戏大家肯定玩过,尤其是在按键手机的时代,这种游戏是手机必装的自带游戏,那么你有没有考虑过它是怎么生成的呢?今天我们用java开发一下这个游戏 背景首先是游戏画面的设置,背景设置就是继承JFrame类,设置窗口,和其他游戏一样:setSize(720,720);setVisible(true);setResizable(fal...

推箱子游戏

推箱子的游戏大家肯定玩过,尤其是在按键手机的时代,这种游戏是手机必装的自带游戏,那么你有没有考虑过它是怎么生成的呢?

今天我们用java开发一下这个游戏

背景

首先是游戏画面的设置,背景设置就是继承JFrame类,设置窗口,和其他游戏一样:

setSize(720,720);
setVisible(true);
setResizable(false);
setLocation(300,20);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

地图

其次,我们要画出游戏的地图,地图是使用一个二维数组表示的,像这样:

00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000011100000000
00000000014100000000
00000011113100000000
00000014254111000000
00000011132341000000
00000000121111000000
00000000141000000000
00000000111000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000

不同的数字分别表示不同的元素,其中5是我们推箱子的主人公,我们加载完这个数组,for循环遍历,根据不同的值解析成不同的图片,然后通过主类进行绘制:

for(int i=0; i<20; i++)
      for(int j=0; j<20; j++)
        {
          g.drawImage(myImage[map[j][i]],i*len,j*len,this);
      }  

人物移动

对于人物的移动,人物是通过我们键盘的上下左右键来控制的,我们需要实现键盘的监听接口:

public void keyPressed(KeyEvent e)
  {
    if(e.getKeyCode()==KeyEvent.VK_UP){moveup();}
    if(e.getKeyCode()==KeyEvent.VK_DOWN){movedown();}
    if(e.getKeyCode()==KeyEvent.VK_LEFT){moveleft();}
    if(e.getKeyCode()==KeyEvent.VK_RIGHT){moveright();}
    
  }

由于是个二维平面的俯视图,因此人物有上下左右的人物都是不同的图片,我们根据上下左右键来切换显示人物不同的图片,实现方法都在各自的方法中实现了

过关

那么怎么判断这个游戏什么过关了呢?

数组中的4的位置表示箱子应该放的位置,当箱子推到4的位置的时候,我们用个计数器记录,当所有箱子都推进去的时候,也就成功了。

boolean iswin()
  {
    boolean num=false;
    out:for(int i=0; i<20; i++)
      for(int j=0; j<20; j++)
    {
      if(maptmp[i][j]==4||maptmp[i][j]==9)
        if(map[i][j]==9)num=true;
          else {num=false;break out;}
    }
    return num;
  }

这就是推箱子的大体逻辑了

总结

这篇文章主要讲了用java来实现推箱子的功能,其实推箱子的操作就是对二维数字的操作,通过开发游戏我们也能学到很多知识,这里不只是涉及二维数组的定义和操作,更有键盘的监听事件的处理,因为我们游戏是通过键盘来控制人物的。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。