基于android的推箱子游戏设计毕业论文内容摘要:

d SpriteThread SpriteMoveThread GameViewDrawThread 算法的设计 该游戏没有涉及到复杂的算法设计,关键在于对地图矩阵的操作。 游戏中用一个 MapList 类操作地图,其中有两个三维数组记录游戏地图信息,一个三维数组表示第一层地图即地板层,另一个三维数组表示第二层地图即建筑层 , 三维矩阵便于管理,如果要加入新关卡,只需要在三维矩阵中加入二维矩阵就可以了 [11]。 天津大学仁爱学院 2020届本科生毕业设计(论文) 11 游戏过程中,最为主要 的 地方在于对地图矩阵,以及小人状态信息(包括位置、行走状态等)的维护,小人每行走一步,就更新一次地图信息和小人状态信息。 另外一个比较重要的地方是游戏状 态的保存方面 [12]。 为保存小人信息,特别开设了一个 MySprite 类,该类主要作用就是保存玩家每一步的游戏状态,便于撤销。 逻辑判断过程中,需要对地图进行维护,主要是通过小人的移动位置进行更新的。  小人每次移动时,四周的物体如下图 : 图 32 主角四周物体  当 小人 是在移动箱子时,箱子四周有以下几种物体 : 图 33 箱 子四周物体 小人 地面 移动到合适位置的箱子 未在合适位置的箱子子 墙壁 箱子应摆放到的位置 箱子 箱子应该摆放到的位置 箱子、墙壁 地面 已摆放到合适位置的箱子 未摆放到合适位置的箱 子 天津大学仁爱学院 2020届本科生毕业设计(论文) 12 第四章 游戏的实现 欢迎界面的实现 当玩家运行游戏时,首先看到欢迎界面,欢迎界面是整个游戏的门面。 本游戏的欢迎动画首先是木门打开如图 41,接着是铁门打开如图 42,最后是墙打开如图 43,所有门打开后就会显示一个有山有水的图片如图 44。 欢迎动画界面是通过改变动画线程中图片的变量值来改变图片的位置。 图 41 木门 图 42 铁门 图 43 墙 图 44 山水图 天津大学仁爱学院 2020届本科生毕业设计(论文) 13 菜单界面的实现 玩家在欢迎动画界面需等待 30 秒方能进入菜单界面,也可直接点击屏幕进入菜单界面。 菜单界面是由滚动的背景图片、不动的背景图片,和开始游戏、声音开、声音关、游戏说明、退出游戏图片组成,如图 45 所示。 图 45 菜单界面 开始游戏 当玩家点击开始游戏图片即可进入游戏界面开始游戏,如图 46 所示。 图 46 开始游戏 天津大学仁爱学院 2020届本科生毕业设计(论文) 14 声音控制 玩家进入菜单界面时背景声音是开即显示的是声音开图片, 菜单界面的背景音乐会滚动播放, 如果玩家想要关闭声音,只需点击声音开图片就会关闭声音同时显示声音关图片,如图 47 所示。 声音状态图片是根据 PushBoxActivity 中的声音状态值进行绘制。 图 47 声音控制 游戏说明 当玩家点击游戏说明按钮时玩家会进入游戏说明界面,如图 48 所示,游戏说明界面是由一张说明图片组成,背景设置为白色,玩家如果想要离开此界面只需点击 屏幕即可回到菜单界面。 图 48 游戏说明 天津大学仁爱学院 2020届本科生毕业设计(论文) 15 退出游戏 当玩家点击退出图片时,会直接离开游戏到模拟器的主界面,如图 49 所示。 图 49 退出游戏 游戏界面的实现 游戏界面实现包括地图类的实现,角色类的实现,键盘监听线程的实现,角色移动线程的实现。 当玩家将箱子都推到指定的位置后本关游戏胜利,出现恭喜过关的图片,点击图片进入下一关卡,如图 410 所示。 图 410 胜利进行下一关 天津大学仁爱学院 2020届本科生毕业设计(论文) 16 地图类的实现 该类中包含了两个三维数组, 一个三维数组表示第一层地图即地板层,另一个三维数组表示第二层地图即建筑层。 三维数组中存储着每个关卡的地图, 三维矩阵便于管理,如果要加入新关卡,只需要在三维矩阵中加入一个二维矩阵就可以了。 本游戏设计了两个关卡。 主要代码是: public static int map1[ ][ ][ ] = {//第一层地图,即地板层 { {1,1,1,1, 0, 1, 0, 1,1,1,1,1,1,1}, {1,1,1,0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}, {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 1}, {1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}, {0, 1, 0, 1, 0, 3, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}, {0, 1, 0, 1, 0, 1, 0, 3, 0, 1, 0, 1, 0, 1}, {1, 0, 3, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}, {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 3, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 0}, {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}, {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,1,1,1}, {1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,1,1,1} }, { {1,1,1,1, 0, 1, 0, 1,1,1,1,1,1,1}, {1,1,1,0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}, {0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 1, 0, 1}, {1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}, {0, 1, 2, 3, 0, 1, 0, 1, 2, 1, 0, 1, 0, 1}, {1, 0, 1, 2, 1, 0, 1, 0, 3, 0, 1, 0, 1, 0}, {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}, {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 3, 0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 0}, {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 1, 0, 1, 0, 1, 2, 1, 0, 1, 0, 1, 0}, {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,1,1,1}, {1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,1,1,1} } }。 天津大学仁爱学院 2020届本科生毕业设计(论文) 17 public static int map2[ ][ ][ ] = {//第二层地图 { {1,1,1,2, 2, 2, 2, 2,1,1,1,1,1,1}, {1,1,1,2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2}, {2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2}, {2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2}, {2, 0, 0, 0, 1, 0, 2, 0, 0, 2, 0, 0, 0, 2}, {2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2}, {2, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2}, {2, 0, 0, 0, 1, 2, 2, 0, 0, 0, 1, 0, 0, 2}, {2, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 0, 2}, {2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2}, {2, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 2}, {2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2}, {2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2,1,1,1}, {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,1,1,1} }, { {1,1,1,2, 2, 2, 2, 2,1,1,1,1,1,1}, {1,1,1,2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2}, {2, 2, 2, 2, 0, 2, 0, 1, 0, 0, 0, 0, 0, 2}, {2, 0, 0, 0, 1, 0, 0, 0, 0, 2, 2, 2, 0, 2}, {2, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 2, 0, 2}, {2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 2}, {2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2}, {2, 0, 0, 0, 1, 2, 2, 2, 0, 0, 0, 0, 0, 2}, {2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 2}, {2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2}, {2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2}, {2, 0, 1, 0, 0, 1, 2, 0, 0, 0, 2, 2, 2, 2}, {2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,1,1,1}, {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,1,1,1} } }。 角色类的实现 角色类对小人进行了封装,记录小人当前的位置、图片和坐标以及状态。 将小人向上走路、向下走路、向左走路、向右走路、向上推箱子、向下推箱子、向左推箱子、向右推箱子的图片 ID 放到数组中进行管理在构造器中根据小人当前的位置换算出当前实际坐标,设置自己封装的绘制方法,根据小人的状态进行绘制,若小人正在移动, 直接绘制图片,若小人静止时,需要进行坐标修正然后再天津大学仁爱学院 2020届本科生毕业设计(论文) 18 绘制图片 [13]。 主要代码是: public void drawMySelf(Canvas canvas, Paint paint){//绘制方法 if(){ (man, X, Y, paint)。 } else{ X = +36*j15*i + 2。 Y = +10*j+25*i 25。 (man, X, Y, paint)。 } } 键盘监听线程的实现 键盘监听线程会定时检测键盘的状态,然后根据状态调用相应的处理。 每次循环需要休眠时间为 150 毫秒,当需要键盘监听时,判断是推箱子还是走路,然后得到当前键盘状态码赋到 action 中, 再 对 action 进行处理判断上、下、左、右键是否被按下。 当上键被按下时,需要先判断是否到界面的最上方,若到最上方将不会再往上,若没到最上方 时,会检测上方是否有箱子,当箱子上方为空地时才可以移动箱子,再判断是否为目的地,如果是目的地需要把箱子设为绿色,如果不是目的地直接移动即可 [14]。 在箱子移动时需要启动箱子的移。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。