Greenfoot写游戏—— 推箱子

作为一个新人,第一次写博客,文章的调理以及结构可能不够清晰,如果有哪里说的不清楚欢迎各位提醒我。

本应用内的素材剽窃于此html5 游戏中,写此文前未得到原作者授权允许,如果涉及侵权,烦劳原作者联系我,立即删除。
http://blog.csdn.net/lufy_legend/article/details/8607933


  • Greenfoot写游戏 推箱子

    • 前言
    • 正文
      • 构思基本结构
      • 制作存储地图的类

前言

Greenfoot: Greenfoot是一个基于java的小型框架,可以简易的实现基于GUI界面的应用,所以一般被当作是Java教学用的软件框架。
官方网站 中文API(为2.5版本,略旧最新API为3.0)

注意:虽然Greenfoot一般是被当作学习Java用的练习框架/工具,但请先掌握基本的Java语法后再来阅读本文。

正文

好了终于要是真正制作这个推箱子的游戏了。在此之前需要先准备好相应的素材,各位可以直接从我上传的 源代码 中提取。

构思基本结构

首先,我们要想清楚,我们这个游戏大概需要哪些东西。
- 地图:我们的游戏不能只有一关,所以我们需要想办法记录每一关的地图数据。
- 可操作的人物:游戏自然要有个我们可以操作的对象。
- 箱子:既然是推箱子的游戏必然不能少箱子。
- 目标地:箱子需要推到指定的目标点。
- 障碍物:我们需要一些障碍物来限制人物的运动。

之后我们先把这几个类建立好了。

其中为了美观,我专门单独做了一个地板Floor,不做采用地图背景色也是可行的。

在这之前我们需要先规定好一个基本的世界类。
我们的图片都是48*48的所以世界的单位长度最好直接设置成48(像素)。
宽高呢这时可以随意指定的,我这里指定为宽119,现在世界就是一个由 11*9 个边长为 48像素 的小格子拼起来的。
所以我GameWorld代码如下。

public class GameWorld extends World
{public GameWorld(){    super(11, 9, 48);}
}

制作存储地图的类

对地图的储存我选择使用一个二维数组来存储一个关卡。

像这样 map中包含 9 个一维数组,每个一维数组里有 11 个数字,二维数组里的每个数字对应一个游戏界面上的点。
当然,如果你上面设定的世界宽高和我不一样的,那么这里也要进行对应的变化。

int[][] map =   {{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},  {-1,-1, 1, 1, 1, 1, 1, 1,-1,-1,-1},  {-1,-1, 1, 0, 0, 0, 0, 1, 1,-1,-1},  {-1,-1, 1, 2, 2, 6, 0, 0, 1,-1,-1},  {-1,-1, 1, 4, 4, 3, 4, 4, 1,-1,-1},  {-1,-1, 1, 0, 0, 6, 2, 2, 1,-1,-1},  {-1,-1, 1, 1, 0, 0, 0, 0, 1,-1,-1},  {-1,-1,-1, 1, 1, 1, 1, 1, 1,-1,-1},  {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}   }

但是,我们的游戏不能只有一关吧,所以我们需要在来一个数组将多个地图存起来。

private static List<int[][]> maps;

为了以后的扩展,方便给,我这里选中使用java.util.List类来存地图数据,继续用数组也是可以的。

然后我选择在静态代码块中初始化数据,这样当类初次加载的时候数据就会存在。

     static {maps = new ArrayList<int[][]>();maps.add(new int[][]{{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},  {-1,-1, 1, 1, 1, 1, 1, 1, 1,-1,-1},  {-1,-1, 1, 0, 0, 4, 0, 0, 1,-1,-1},  {-1,-1, 1, 0, 0, 2, 0, 0, 1,-1,-1},  {-1,-1, 1, 4, 2, 3, 2, 4, 1,-1,-1},  {-1,-1, 1, 0, 0, 2, 0, 0, 1,-1,-1},  {-1,-1, 1, 0, 0, 4, 0, 0, 1,-1,-1},  {-1,-1, 1, 1, 1, 1, 1, 1, 1,-1,-1},  {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}  });.......}

你会发现,咦?那个数组里存的数字怎么有好几种啊,都是什么意思啊?
在这里,我提前定义好了不同的类型去表示不同的物体。

    public static final int TYPE_EMPTY = -1;                // 空白public static final int TYPE_FLOOR = 0;                 // 地板public static final int TYPE_WAll = 1;                  // 墙壁public static final int TYPE_BOX = 2;                   // 箱子public static final int TYPE_PERSON = 3;                // 人物public static final int TYPE_TARGET = 4;                // 目标点(可与箱子或者人重合,以加和表示)

这回你知道这些数字代表什么意思了吧,那我需要提问了最上面那个数组里的6代表什么呢

对,如果你仔细看过上面几行你就会明白6代表4+2也就是箱子和目标点都存在一个位置上。

接下来我们需要制作一个读取地图方法。

    /*** 方法需要传入一个world指定的数据要加载到那个world上,以及一个levle表示要加载的关卡。* @param world 需要加载数据的world* @param level 指定加载的关卡*/public static void loadMap(World world, int level){int[][] map = maps.get(level);for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {// 不论这个位置是什么,只要不是空白就需要铺一个地板if(map[i][j] != MapData.TYPE_EMPTY){world.addObject(new Floor(), j, i);}// 根据不同的类型创建不同的物体switch (map[i][j]) {case MapData.TYPE_WAll:world.addObject(new Wall(), j, i);break;case MapData.TYPE_BOX:world.addObject(new Box(), j, i);break;case MapData.TYPE_TARGET:world.addObject(new Target(), j, i);break;case MapData.TYPE_PERSON:// 此处为了保证一个地图上只有一个可控制对象,使用单例,具体内容我们到person中再讲world.addObject(Person.getInstance(), j, i);break;case MapData.TYPE_BOX +  MapData.TYPE_TARGET:world.addObject(new Box(), j, i);world.addObject(new Target(), j, i);break;case MapData.TYPE_PERSON +  MapData.TYPE_TARGET:world.addObject(Person.getInstance(), j, i);world.addObject(new Target(), j, i);break;}}}}

这样地图类就基本完成了。后续内容稍后更新….。

Greenfoot游戏——推箱子相关推荐

  1. 用JAVA制作小游戏——推箱子(三)

    本篇博客主要是对推箱子地图编辑器功能的代码讲解. 首先给出这段代码的部分运行截图: 重难点: 地图编辑器主要有三个重难点: 需要有一个绘制地图的界面 能够实现地图绘制的功能 地图绘制完成后需要将地图内 ...

  2. 用JAVA制作小游戏——推箱子(二)

    本篇博客主要是推箱子游戏界面功能的代码讲解. 首先先给出这段代码的部分运行截图: 重难点: 游戏界面主要有五个重难点: 固定好地图的位置 地图的显示 构建菜单栏 读取地图数据 玩家操作功能实现 地图的 ...

  3. 用JAVA制作小游戏——推箱子(一)

    本篇博客是对推箱子游戏首页代码的展示 效果图: 难点: 在背景图上添加按钮. 由于直接使用add方法,会变成图片一块区域,按钮一块区域,彼此互不重叠,形成的界面效果不太好,因此用了JLayeredPa ...

  4. 游戏推箱子(c语言)

    游戏推箱子(c语言) 一.项目背景 二.设计目的 三.项目功能需求 1.屏幕绘图输出 2.移动箱子 3.移动小人 4.游戏功能控制 5.关口选择 四.系统的功能结构图 五.功能模块介绍 1.绘制地图模 ...

  5. C语言小游戏 ——推箱子

    文章目录 (1)内容描述 (2)功能 (3)设计目的 (4)总体设计 (5)明显缺点 (6)个人总结 7. 实例 实例一 实例二 实例三 实例四 实例五: (1)内容描述 描述:用户进入页面后可以进行 ...

  6. c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  7. Python游戏开发,Python实现童年小游戏推箱子 附带源码

    开发工具 Python版本: 3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 上效果图 原理简 ...

  8. python小游戏——推箱子代码开源

    ♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿所有的美好,再疫情结束后如约而至. 目录 一.效 ...

  9. 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

最新文章

  1. C语言内存管理超详解
  2. Error when loading the SDK:
  3. 编程实现木马的ActiveX启动和注入IE的启动方式
  4. 《网易编程题》疯狂队列
  5. Zabbix 3.0 配置企业微信报警(配置zabbix-web)
  6. es6 __proto__属性,Object.setPrototypeOf(),Object.getPrototypeOf()
  7. 分布式代码管理系统Git实践
  8. Android java传递int类型数组给C
  9. 深度解析 | 用 AI 帮助听障人群,一共需要几步?
  10. java注释符_Java程序中的单行注释符是(  ),多行注释符是( )。
  11. sop流程图模板_sop是什么意思(sop标准作业流程模板)
  12. HTML5 video(PC和移动端)自动播放学习指北
  13. 《资本之王》书中的精髓:黑石公司是如何成长为全球最顶尖的私募股权投资机构的?
  14. 用文字描述给黑白照上色,这个免费网站火了!网友:比其他同类都好用
  15. 芯片常见的三种封装形式
  16. css进阶四(多媒体嵌入)
  17. 《有限元分析基础教程》(曾攀)笔记一-二维杆单元有限元程序(基于Python)...
  18. 调用百度汇率api 获取各国的汇率值
  19. 3D打印切片软件--cura的二次开发(2)(界面分析与汉化)(修改版增加图片)
  20. lsof Linux

热门文章

  1. 第一部分 基本概念 - 第 1 章
  2. 数字冰雹-智能电网大数据可视化分析平台
  3. 京东到底是家零售企业 还是家互联网公司?
  4. c语言中除号用百分号,小学六年级数学比例应用题
  5. 疫情下,进入HCIE考试中心要注意哪些?
  6. MySQL 8.0 之 JSON_CONTAINS()
  7. 04_MyBatis03
  8. java接口的关键字_Java 接口 interface关键字
  9. SAP ABAP 供应商主数据的 查询-创建-修改-锁定 API或BAPI
  10. SSM框架实战详细教程(三)IDEA+Maven搭建项目