Greenfoot游戏——推箱子
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(像素)。
宽高呢这时可以随意指定的,我这里指定为宽11
高9
,现在世界就是一个由 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游戏——推箱子相关推荐
- 用JAVA制作小游戏——推箱子(三)
本篇博客主要是对推箱子地图编辑器功能的代码讲解. 首先给出这段代码的部分运行截图: 重难点: 地图编辑器主要有三个重难点: 需要有一个绘制地图的界面 能够实现地图绘制的功能 地图绘制完成后需要将地图内 ...
- 用JAVA制作小游戏——推箱子(二)
本篇博客主要是推箱子游戏界面功能的代码讲解. 首先先给出这段代码的部分运行截图: 重难点: 游戏界面主要有五个重难点: 固定好地图的位置 地图的显示 构建菜单栏 读取地图数据 玩家操作功能实现 地图的 ...
- 用JAVA制作小游戏——推箱子(一)
本篇博客是对推箱子游戏首页代码的展示 效果图: 难点: 在背景图上添加按钮. 由于直接使用add方法,会变成图片一块区域,按钮一块区域,彼此互不重叠,形成的界面效果不太好,因此用了JLayeredPa ...
- 游戏推箱子(c语言)
游戏推箱子(c语言) 一.项目背景 二.设计目的 三.项目功能需求 1.屏幕绘图输出 2.移动箱子 3.移动小人 4.游戏功能控制 5.关口选择 四.系统的功能结构图 五.功能模块介绍 1.绘制地图模 ...
- C语言小游戏 ——推箱子
文章目录 (1)内容描述 (2)功能 (3)设计目的 (4)总体设计 (5)明显缺点 (6)个人总结 7. 实例 实例一 实例二 实例三 实例四 实例五: (1)内容描述 描述:用户进入页面后可以进行 ...
- c语言写一个简单的小游戏-推箱子
在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...
- Python游戏开发,Python实现童年小游戏推箱子 附带源码
开发工具 Python版本: 3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 上效果图 原理简 ...
- python小游戏——推箱子代码开源
♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿所有的美好,再疫情结束后如约而至. 目录 一.效 ...
- 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子
在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...
最新文章
- C语言内存管理超详解
- Error when loading the SDK:
- 编程实现木马的ActiveX启动和注入IE的启动方式
- 《网易编程题》疯狂队列
- Zabbix 3.0 配置企业微信报警(配置zabbix-web)
- es6 __proto__属性,Object.setPrototypeOf(),Object.getPrototypeOf()
- 分布式代码管理系统Git实践
- Android java传递int类型数组给C
- 深度解析 | 用 AI 帮助听障人群,一共需要几步?
- java注释符_Java程序中的单行注释符是( ),多行注释符是( )。
- sop流程图模板_sop是什么意思(sop标准作业流程模板)
- HTML5 video(PC和移动端)自动播放学习指北
- 《资本之王》书中的精髓:黑石公司是如何成长为全球最顶尖的私募股权投资机构的?
- 用文字描述给黑白照上色,这个免费网站火了!网友:比其他同类都好用
- 芯片常见的三种封装形式
- css进阶四(多媒体嵌入)
- 《有限元分析基础教程》(曾攀)笔记一-二维杆单元有限元程序(基于Python)...
- 调用百度汇率api 获取各国的汇率值
- 3D打印切片软件--cura的二次开发(2)(界面分析与汉化)(修改版增加图片)
- lsof Linux