华佗养生网
您的当前位置:首页Android推箱子游戏程序设计

Android推箱子游戏程序设计

来源:华佗养生网
一、 课题来源

本课题来源于一款来自日本的古老游戏——推箱子,其设计目的是训练人的逻辑思维能力。游戏场景一般是设定在空间狭小的仓库中,要求把箱子摆放到指定位置。这就要求玩家巧妙的运用有限的空间和通道,合理的安排箱子的位置和移动次序才可能完成任务。

如今,伴随着Google Android操作系统的盛行,基于Android SDK的系统开发和基于Android应用的开发等已逐渐倍受大家关注,而手机游戏开发历来是移动开发中分量最重的部分,面对如此火爆的Android市场自然也不甘示弱,由于Android的应用层开发是基于Java的开发,所以必有其可以快速移植J2ME开发的游戏的优势,但是移植的游戏必定也不能发挥Android操作系特的特性,所以目前基于Android游戏开发的市场还是不够成熟的,面对这种情况,在了解Android SDK基础上,我打算开发一款完全适应于Android操作系统的推箱子游戏。

二、 本课题的基本内容

1、地图编辑器(可选)

a) 可通过地图编辑器生成地图 b) 地图由小正方块拼接组成

c) 地图中每一格可以是墙、通道、木箱、目标位置 d) 游戏主角所在位置同时必须是通道或者目标位置 e) 一张地图中主角数目有且仅有一个

f) 一张地图中箱子数目必须与目标位置数目相等

g) 允许对正在编辑的地图清除或者替换某一格中的内容

h) 地图中一格不允许墙、通道、木箱、目标位置中两个及以上共存,

最后添加的类型为该格代表的类型

i) 通过地图编辑器生成的地图可以被游戏程序调用 2、基本要求

a) 每关卡箱子数目不定

b) 主角和箱子只能呆在通道及目标位置上移动,不能穿墙 c) 主角不能穿过箱子

d) 箱子数量和目标位置数量相等(但每个箱子并不和唯一的目标位置

一一对应)

e) 主角可以移动和推动木箱(响应键盘方向键)

f) 主角只能往前推动箱子,不能向后或者向侧面拉箱子 g) 主角不能同时推动两个箱子

h) 箱子移动方向正前方紧挨墙壁,不可推动 i) 允许撤销以及重做游戏步骤

j) 将所有箱子推到设定位置则通过本关,自动进入下一关卡 k) 记录每一关中玩家的移动步数 3、扩展功能(可选)

a) 保存自定义地图,重启程序后依然可以编辑和调用运行该地图 b) 响应点击(触摸)事件,主角可以从当前位置移动多步到达目标位

置(绕过障碍物自动寻径)

4、其他

a) 屏幕分辨率自适应

b) 资源文件必须支持简体中文和英文 三、 本课题的重点和难点

1、 整个游戏能够有效地完成所设计的各项功能,系统具有较好的视觉效果

并且界面友好,操作简单。

2、 算法、界面动态效果等设计与实现比较繁琐。 四、 论文提纲

一、序论:课题研究背景及意义 二、本论

1、 游戏业务流程和设计方案:分模块实现各个目标的具体需求:欢迎

动画界面设计与实现,菜单界面设计与实现,游戏界面的框架实现等

2、 开发环境:开发环境及系统运行环境说明

3、 程序设计说明及代码:android推箱子游戏程序所用到的几项主要技

术原理

4、 设计评价:android推箱子游戏程序的特性

三、结论:概括说明设计的情况和价值,并指出其中存在的问题和今后改进

方向

五、 进度安排

1、提交毕业设计(设计报告)开题报告、任务书 2012年3月3日 2、着手毕业设计,开始进入项目 2012年3月4日 3、完成毕业设计,开始设计报告 2012年5月1日前 4、提交毕业设计(设计报告)第一稿 2012年5月5日前 5、提交毕业设计(设计报告)第二稿 2012年5月12日前 6、提交毕业设计(设计报告)第三稿 2012年5月15日前 7、提交毕业设计(设计报告)正稿 2012年5月19日前

毕 业 论 文 开 题 报 告

指导教师意见:(请手写意见和签名) (对本课题的深度、广度及工作量的意见) 指导教师:(签字) 年 月 日 教研室审查意见:(请手写意见和签名) 教研室负责人:(签字) 年 月 日 附表3.

毕业设计(论文)任务书

学号 指导教师 学 生 姓 名 设计(论文)题目 Android推箱子游戏程序设计 1、游戏情节。主要要做的工作为设计游戏各关仓库的形状、大小、可通过区域、以及各关中箱子的初始位置与目的地。 主要 2、目标受众。这个游戏受众面比较广,应该是老少皆宜的。考虑研究 到受众广的原因,应该将操作方式设计得更加人性化,画面更加内容 清晰。 3、呈现技术。推箱子游戏采用的是2D的呈现技术,可采用手机键盘和触屏两种方式进行操作。 研 1、进行总体的分析和设计,将基本信息模块的具体内容设计完成。 究 方 法 3、通过DDMS调试来发现问题,并要重视做好笔记。 2、完成其它各个子模块的功能。不同阶段中注意对系统进行备份。 1、开发一款可在Android SDK 2.2平台上运行的推箱子游戏程序,主要技术可流畅运行游戏,编辑地图等。 指标(或2、实现游戏规则:在一个有限空间内,将一些木箱放到指定的位置。箱子只能推不能拉,而且一次只能推动一个箱子,胜利条件研究目是把所有箱子都推到目的地。 标) 3、整个游戏能够有效地完成所涉及的各项功能,系统具有较好的视觉效果且界面友好,操作简便。 主要 1、《Android应用开发详解》,郭宏志,电子工业出版社 王世江 改,人民邮电出版社 3、Android帮助文档 参考 2、《Google Android SDK开发范例大全(第2版)》,余志龙 等、文献 注:1、本表由指导教师根据学生的开题报告填写,下发给学生,并定期检查学生进度。本表可用微机打印;2、由理工科指导教师填写。

附表4.

毕业设计(论文)成绩评定表

学号

学院: 专业: 年级: 姓名 设计(论文)总成绩 设计(论文)题目 评定成绩: ×60%= 签名: 年 月 日 答 辩 小 组 评 语 指 导 教 师 评 语 答辩成绩: ×40%= 组长签名: 年 月 日 注:指导教师、答辩小组给予的成绩和设计(论文)总成绩统一实行百分制,总成绩中指导教师评分占60%,答辩小组评分占40%。评语、成绩、签名及日期处必须手写。

目 录

摘 要 ................................................. 1 Abstract ................................................. 1 一、绪论 ................................................. 3

(一)课题研究背景和意义 .............................. 3 (二)本课题发展现状 .................................. 3 二、游戏业务流程和设计方案 ............................... 3

(一)业务流程和功能介绍 .............................. 3 (二)概要设计 ........................................ 4 (三)界面设计概要 .................................... 4 (四)机能概要 ........................................ 5 (五)游戏界面设计 .................................... 5 (六)设计方案 ........................................ 9 三、系统开发环境说明 .................................... 10

(一)Android的开发环境说明 ......................... 10 (二)开发环境 ....................................... 10 四、程序设计说明及代码 .................................. 10

(一)游戏主要公共类的设计与实现 ..................... 10 (二)游戏主要功能类的设计与实现 ..................... 12 (三)游戏主要数据类的设计与实现 ..................... 19 (四)游戏主要设计类的设计与实现 ..................... 20 五、设计评价 ............................................ 22

六、总结 ................................................ 22 参考文献 ................................................ 23 谢 辞 ................................................ 24

摘 要

如今,伴随着Google Android操作系统的盛行,基于Android SDK的系统开发和基于Android应用的开发等已倍受大家关注。但是目前基于Android游戏开发的市场还是不够成熟的,因而一款休闲娱乐、锻炼思维且适应于Android操作系统的游戏必将成为主流。本课题是结合Eclipse SDK开发平台开发的一款基于安卓平台的推箱子小游戏。

该游戏主要分为初始化模块,界面模块,数据存储模块,功能模块及游戏控制模块。玩家通过控制小乌龟的移动来推动箱子,将所有箱子都推到目的地从而过关。每关的难易程度不同,可保持玩家对游戏的新鲜感,同时游戏还支持自定义编辑地图,玩家可以根据自身要求设计出更有创意、更富挑战的新地图。本游戏不仅是适合各类人群休闲娱乐的活动,还有助于提高人们思考问题能力与想象力,改善思维方式,拓展思维。

关 键 词

安卓,推箱子,休闲娱乐,拓展思维

Abstract

Recently, along with the prevalence of Google Android operating system, the public has immensely concerned on the development of applications that based on Android SDK systems and Android application. However, the Android game development market is still

1

immature. Thus, an entertained and mental training game of Android operating system will indeed become the mainstream of application systems. This issue is a Sokoban game, which is developed for Android system and is invented based on the combination of Eclipse SDK development platform.

The game is divided into initialization module, function module, game design module, game data module and function control module. Besides, in order to complete missions of the game, players have to control the movement of a turtle to push a box and to put all boxes into the right destination. Particularly, the difficulty of each level is separated differently, which maintain the freshness of the game and also support custom edit map. According to players’ requirement, the new map can be more creative and challenging. The game is not only suitable for all kinds of people for leisure time, but also can help people to expand imagination and to improve creative thinking.

Key words

Android, Sokoban game, recreation, creative thinking

一、绪论

(一)课题研究背景和意义

本课题来源于一款来自日本的古老游戏——推箱子,其设计目的是训练人的逻辑思维能力。游戏场景一般是设定在空间狭小的仓库中,要求把箱子摆放到指定位置。这就要求玩家巧妙的运用有限的空间和通道,合理的安排箱子的位置和移动次序才可能完成任务。随着计算机游戏的发展,很多编程爱好者基于该游戏的思想开发了出各种版本、各种类型的推箱子。这其中也包括很多手机版本的实现,伴随着手机与计算机的普及,很快推箱子游戏便进入了千家万户。

推箱子游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本文基于Android技术和eclipse SDK开发环境,开发了一个操作简单、界面美观、功能较齐全、可在Android SDK 2.2平台上运行的推箱子游戏。整个游戏程序分为二个功能模块,五个类模块,可流畅运行游戏并且实现玩家自己编辑地图的功能。通过本游戏的开发,达到学习Android开发技术和熟悉软件开发流程的目的。 (二)本课题发展现状

相信大家对Android的发展历史多少都有一些了解, Android曾经是一家创立于旧金山的公司的名字,该公司于2005年8月份被Google收购,并从此踏上了飞速发展的道路。经过这几年的发展,它已经发展成了一个平台、一个生态体系。现在Android在移动领域已经得到了广泛的应用。根据Google于2011年6月份公布的数字,现在每天激活的Android设备高达50万台,比5月份的数据增加了10万台。Google还透露目前已经与36家OEM厂商和215家运营商合作,共激活了超过1亿台Android设备。 相比于Symbian的日落西山,以及苹果的封闭、Windows Phone的前途未卜,Android无疑代表了当前行业发展的主流趋势:开放平台取代了封闭平台。让参与者均能通过自己的努力而获益。 从2008年9月公布1.0版本以来,经过近三年的跨越式发展,现在Android已经发展到了3.x版本,这是一个针对平板电脑而做了大量优化的版本,包括对更大屏幕的支持的类库、多任务优化等。目前市场上占主流的还是2.2版本,当然,相信随着时间的推移,2.3及后续版本会得到越来越多的设备的支持。

伴随着Google Android操作系统的盛行,基于Android SDK的系统开发和基于Android应用的开发等已逐渐倍受大家关注,而手机游戏开发历来是移动开发中分量最重的部分,面对如此火爆的Android市场自然也不甘示弱,由于Android的应用层开发是基于Java的开发,所以必有其可以快速移植J2ME开发的游戏的优势,但是移植的游戏必定也不能发挥Android操作系特的特性,所以目前基于Android游戏开发的市场还是不够成熟的,面对这种情况,在了解Android SDK基础上,我打算开发一款完全适应于Android操作系统的推箱子游戏。

二、游戏业务流程和设计方案

(一)业务流程和功能介绍

本设计基本实现了可以在Android SDK 2.2平台上运行的推箱子游戏,本游戏分五个模块:1、初始化模块;2、功能实现模块;3、游戏设计模块;4、游戏数据模块;5、功能控制模块。 本游戏是一款益智类游戏,所以操作十分简单。游戏中玩家可以用键盘的上、

3

下、左、右键控制小乌龟的移动位置,也可以直接触摸手机屏幕完成相应操作。游戏规则也十分简单,玩家在一个有限空间内,将木箱放到指定的位置。箱子只能推不能拉,而且一次只能推动一个箱子,胜利条件是把所有箱子都推到目的地。 (二)概要设计

此次的设计是开发一款可在Android SDK 2.2平台上运行的推箱子游戏程序,可流畅运行游戏,编辑地图等。

(三)界面设计概要

在策划推箱子游戏时,首要考虑到要设计一个优美的游戏界面,操作起来更加人性化,即玩家可以用键盘的上、下、左、右键控制小乌龟的移动位置,也可以直接触摸手机屏幕完成相应操作。在画面方面也要更加清新,方便各个年龄段的玩家使用。我对这个游戏的定义是一个轻量级的益智游戏,不存在复杂的情节,做的主要工作为设计游戏各关仓库的形状、大小、可通过区域、各关中箱子的初始位置与目的地。当然在正式开始编写程序时,需要上网搜集了游戏中要用到的图片、声音等,收集一些有用的素材。

下面是运行程序后,具体的界面模块,如图2.1:

主界面开始游戏载入自定义游戏编辑自定义游戏游戏设置关于帮助退出游戏系统音效背景音乐设置语言设置载入默认设置 图2.1

(四)机能概要

1. 地图编辑器

(1)可通过地图编辑器生成地图; (2)地图由小正方块拼接组成;

(3)地图中每一格可以是墙、通道、木箱、目标位置; (4)游戏主角所在位置同时必须是通道或者目标位置; (5)一张地图中主角数目有且仅有一个;

(6)一张地图中箱子数目必须与目标位置数目相等;

(7)允许对正在编辑的地图清除或者替换某一格中的内容;

(8)地图中一格不允许墙、通道、木箱、目标位置中两个及以上共存,最后添加的类型为该格代表的类型;

(9)通过地图编辑器生成的地图可以被游戏程序调用; 2. 基本要求

(1)每关卡箱子数目不定;

(2)主角和箱子只能呆在通道及目标位置上移动,不能穿墙; (3)主角不能穿过箱子;

(4)箱子数量和目标位置数量相等(但每个箱子并不和唯一的目标位置一一对应);

(5)主角可以移动和推动木箱(响应键盘方向键);

(6)主角只能往前推动箱子,不能向后或者向侧面拉箱子; (7)主角不能同时推动两个箱子;

(8)箱子移动方向正前方紧挨墙壁,不可推动; (9)允许撤销以及重做游戏步骤;

(10)将所有箱子推到设定位置则通过本关,自动进入下一关卡; (11)记录每一关中玩家的移动步数; 3. 扩展功能

(1)保存自定义地图,重启程序后依然可以编辑和调用运行该地图; (2)屏幕分辨率自适应;

(3)资源文件支持简体中文和英文; (五)游戏界面设计

启动游戏后便可直接进入游戏主界面,主界面上玩家可以自由选择对游戏的操作。

该游戏的运行步骤与界面设计如下:

1. 启动游戏后游戏主界面,效果如图所示。

5

图2.2

2. 点击“开始游戏”,即可进入系统设置的关卡中,默认从第一关开始,同时在左下角显示当前关卡和玩家已走的步数。此外,该界面共有6个选项键,分别是撤销、恢复、关卡重置、前一关卡、后一关卡、返回主菜单,玩家可以通过对应的数字按键或直接触控屏幕实现对应功能。

玩家现在就可以开始游戏旅途,充分开动脑筋,挑战每一关卡,关卡难度设计由易到难。效果如图所示。

图2.3

3. 点击“载入自定义游戏”,即可进入玩家自己已经编辑好的游戏中,界

面设计和系统设置的关卡相同,过关之后,自动进入系统设置的第一关卡。效果如图所示。

图2.4

4. 点击“编译自定义游戏”,即可进入玩家自行编译游戏仓库中。玩家可以在15*15的格中按照自己的意愿设计关卡(需要符合游戏自身规定)。该界面共有9个选项键,分别是墙、路、目的地、箱子、乌龟、锁定、删除、保存、返回主菜单,玩家可以通过对应的数字按键或直接触控屏幕实现对应功能。效果如图所示。

图2.5

5. 点击“游戏设置”,则进入游戏设置界面。在该界面玩家可以根据自己的喜好选择系统音效、背景音、语言或者恢复默认设置,也可直接返回游戏主菜单。在系统音效中,可以选择退出设置、开或是关;在背景音设置中,可以选择

7

退出设置、预设音乐1、预设音乐2、预设音乐3、预设音乐4或是关;在语言设置中,可以选择退出设置、简体中文或是English;在载入默认设置中,可以选择是或是否。效果如图所示。

图2.6

6. 点击“帮助”,则进入游戏帮助界面。在该界面玩家了解到游戏玩法、编辑游戏和游戏过程中涉及到的功能键作用。按任意键或者触摸屏幕即可返回游戏主菜单。效果如图所示。

图2.7

7. 点击“关于”,则进入游戏关于界面。该界面介绍了关于本游戏的相关信息。效果如图所示。

图2.8

8. 点击“退出游戏”,则会退出游戏。

(六)设计方案 1. 模块划分

本游戏分五个模块

(1)初始化模块,对游戏界面进行初始化操作,包括界面切换、控制声音播放和游戏的暂停与恢复,以及手机返回键的设置。

(2)功能实现模块,主要是对游戏中各个环节进行绘制,设计出系统地图,记录玩家所用步骤,对玩家触屏的设定,针对不同的手机分辨率绘制界面,音乐功能调用,游戏中所有文字的提示信息以及游戏中背景和文字颜色大小等设置的实现。

(3)游戏设计模块,实现玩家控制小乌龟的操作,使之能够操作箱子到各个位置,以完成游戏设定的任务。

(4)游戏数据模块,主要是对玩家编辑的自定义地图和玩家选择系统设置状态的保存,以及游戏数据合理性的判断。

(5)功能控制模块,控制游戏功能的实现,包括创建菜单、调用系统音乐、获取当前系统状态、获取游戏界面图标等参数、保存游戏。 2. 系统功能结构图

9

系统功能模块初始化功能控制模块游戏数据模块游戏设计模块功能实现模块

图2.9

三、系统开发环境说明

(一)Android的开发环境说明

为了学习Android的 UI和功能,我们可以通过Android Virtual Device(AVD)来实现。AVD是Google提供给开发人员来调试他们开发的应用程序的,它可以运行在我们的PC机上,提供与真实手机形同的UI和操作方式,只是底层的硬件驱动不同。我们可以用鼠标代替手机在AVD上实现点、划、按等触摸操作。实现这一切的前提是我们需要搭建一个Android的开发环境。 (二)开发环境

开发所用操作系统:Windows XP SP2 IDE:Eclipse 开发语言:Java

开发所用插件:ADT 12.0.0

SDK:Android SDK 2.2,JDK 1.5及以上 办公软件:Office 2007

四、程序设计说明及代码

(一)游戏主要公共类的设计与实现 1. 主类Sokoban 的设计与实现

该类是通过继承和扩展基类Activity来实现的,是整个程序的入口。Android api中所提供的Activity生命周期图,如下:

图4.1

但在实际应用中,当一个Activity结束前,如果需要保存状态,就在onsaveInsanceState中。它将状态数据以key-value的形式放入到saveInsanceState中,这样,当一个Activity被创建时,就能从onCreate的参数saveInsanceState中获得状态数据。主要代码截图如下:

图4.2

11

在改变屏幕方向、弹出软键盘和隐藏软键盘时,不再去执行onCreate()方法而是直接执行onConfigurationChanged()。如果不声明此段代码,按照Activity的生命周期,则每次会去执行一次onCreate()方法,而onCreate()方法通常会在显示之前做一些初始化工作,重复的初始化,会使得程序效率大大降低。部分代码如下:

判断是否改变了屏幕方向、弹出软键盘和隐藏软键盘方法如下:ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE == newConfig.orientation || ActivityInfo.SCREEN_ORIENTATION_PORTRAIT == newConfig.orientation 2. 主类MainGame的设计与实现

该类主要用于完成游戏的各个画面,包括获取手机屏幕大小、得到当前屏幕分辨率、屏幕方向、当前程序状态、当前程序界面、界面选择,以及游戏音乐的初始化等工作。

3. 主类ThreadCanvas的实现

该类主要是对游戏线程的控制,包括线程刷新、线程暂停、线程重启、线程结束。

4. 主类GameView的设计与实现 该类为抽象类继承自View,便于子类在继承GameView的同时也能继承View。 (二)游戏主要功能类的设计与实现 1. 功能类BitmapProvider的设计与实现

该类主要是界面按钮设计,包括图形界面,运行游戏与自定义游戏界面中选项。主要代码截图如下:

图4.3

图4.4

将原本sokoban_game_icons裁剪成5*5的小图标,在调用时按照当前手机屏幕大小,绘制出游戏中各个界面所需的图标。

通过public static Bitmap getBitmap(int bitmapId, int width, int height)方法获取地图界面图标。主要代码截图如下:

图4.5

2. 功能类clienDB的设计与实现

该类主要是把应用程序中要用的常量编写到一起,一方面有利于调试程序,另一方面避免了魔法数字带来的不必要的麻烦。 3. 功能类GameStateDataProvider的设计与实现

该类是绘制地图的重要步骤,实现了本游戏中系统默认的100个关卡。预先设计好每一关的模板,然后在15*15的地图中一行一行的输入数据,其中还包括在路径上初始化箱子与小乌龟的位置。

构造一个三维数组gameStateDataArray,通过它来保存关卡、行、列数据信息。部分代码截图及说明如下:

这是第一关第四、第五行各列的地图数据信息。GameDataStruct.DATA_FLAG.PATH | GameDataStruct.DATA_FLAG.BOX表示该列在路径上设置箱子的初始位置。

13

图4.6

4. 功能类GameTouchEventHandler的设计与实现

该类主要功能是根据玩家触摸屏幕的不同位置,将其转换成小乌龟的移动方向。部分代码截图如下:

图4.7

5. 功能类LayoutDesign的设计与实现

该类主要功能为获取当前手机分辨率并根据手机分辨率设置游戏中的宽和高。在该类中,通过private static int[]

getHorizontalDisConfigParamTable(int displayItemId, int

screenResolutionType)方法设置游戏中的宽度,通过private static int[] getVerticalDisConfigParamTable(int displayItemID, int

screenResolutionType)方法设置游戏中的高度。这么做的好处是方便之后根据该分辨率来绘制游戏界面。部分代码截图及说明如下:

图4.8

6. 功能类MusicPlayer的设计与实现

该类主要是实现音乐文件的播放。部分代码截图如下:

15

图4.9

7. 功能类StringsProvider的设计与实现

该类主要实现整个游戏程序各个界面中字符内容的显示。 8. 功能类TextUtil的设计与实现

该类主要实现了游戏程序中的文字颜色、透明度、背景颜色等设置。 9. 功能类GameRunner的设计与实现

该类继承自抽象类GameView,负责游戏的运行,包括小乌龟的运动、游戏保存、音乐播放、当前系统设置、跳关、步数记录等。部分代码截图及说明如下:

图4.10

图4.11

10. 功能类GameMainMenu的设计与实现

该类继承自抽象类GameView,主要功能是创建菜单和菜单中的构成部分。主要关键代码截图及说明如下:

通过private void createMenu()方法创建菜单,通过private void menuConstruct()创建菜单中的构成部分。

17

图4.12

11. 功能类GameEditor的设计与实现 该类继承自抽象类GameView,主要是实现了地图编辑的控制,获取当前系统状态,获取游戏界面图标等参数,能够判断错误信息类型,保存游戏。主要代码截图及说明如下: 通过private void updateGeneratorCursor()方法实现了编辑游戏地图时玩家当前游标所选图标。

图4.13

(三)游戏主要数据类的设计与实现 1. 数据类GameDataSaver的设计与实现

该类主要用于对地图数据的保存与提取,在保存时,判断玩家编辑的地图是否合理,如果不合理则提示相应信息,只有合理的地图才能保存。在提取地图信息的时候也进行一次检查,如果编辑地图不合理则载入默认设置。关键代码及说明如下:

通过public static boolean exportDataToFile(int[][] editDataArray)方法将地图数据写入到文件中;通过public static boolean checkUserFile()检查用户编辑数据是否合理;通过public static int[][] importDataFromFile()从文件中读取数据载入地图。

2. 数据类GameDataStruct的设计与实现

该类主要功能是设定数据结构,例如行列数必须在15*15之间,玩家绘制地图时,当前所选游标实现添加、删除、替代等功能,判断玩家是否完成任务。主要部分代码截图及说明如下:

通过public boolean isMissionCompleted()方法判断任务是否完成。

19

图4.14

通过public void addObj(int[] posIndex, int objId)方法,实现在编辑地图上添加玩家所需图标。

图4.15

3. 数据类SystemSettingSaver的设计与实现

该类主要功能是在游戏启动后读取当前系统设置信息,当玩家重新设定系统设置后,将重新保存系统设置,同时还可以实现恢复默认设置功能。

(四)游戏主要设计类的设计与实现 1. 设计类GameContainer的设计与实现

该类是游戏程序的关键步骤,它实现了小乌龟与箱子移动的算法。移动中包括正移动,与“撤销”的负移动。正移动:小乌龟上下左右的移动都涉及到一个判断算法,判断小乌龟前方是否有箱子或者墙,如果没有,则可以移动;有的话,则判断箱子是否可移动。代码如下: //小乌龟运动判定

public boolean moveMainPlayer(int moveDir) {

int[] fromPosIndex =

mGameDataStruct.getObjPosIndex(clienDB.GameObjectID.MP);

int[] toMPPosIndex = getDestPosIndex(fromPosIndex, moveDir); if(null == fromPosIndex || toMPPosIndex == null ||

toMPPosIndex == fromPosIndex)//下一步为空或者不能前进 return false;

if(true == mGameDataStruct.isExist(toMPPosIndex, clienDB.GameObjectID.BOX))//前进方向是否存在箱子 {

int[] toBoxPosIndex = getDestPosIndex(toMPPosIndex, moveDir);

if(null == toBoxPosIndex||

toBoxPosIndex == toMPPosIndex) {

return false; }

if( true == mGameDataStruct.isExist(toBoxPosIndex, clienDB.GameObjectID.BOX) ||

(false == mGameDataStruct.isExist(toBoxPosIndex, clienDB.GameObjectID.PATH) &&

false == mGameDataStruct.isExist(toBoxPosIndex,

clienDB.GameObjectID.DEST)))//如果前方是箱子或者前方不是路径且不是目的地

{

return false; }

moveObj(clienDB.GameObjectID.BOX, toMPPosIndex, toBoxPosIndex);

moveObj(clienDB.GameObjectID.MP, fromPosIndex, toMPPosIndex); } else {

if(false == mGameDataStruct.isExist(toMPPosIndex, clienDB.GameObjectID.PATH) &&

false == mGameDataStruct.isExist(toMPPosIndex, clienDB.GameObjectID.DEST)) {

return false; }

moveObj(clienDB.GameObjectID.MP, fromPosIndex, toMPPosIndex); }

return true; }

21

如果小乌龟或者箱子可以移动,则调用public void moveObj(int objId, int[] fromPosIndex, int[] toPosIndex)方法,通过

mGameDataStruct.removeObj(fromPosIndex, objId)方法删除原物体,再通过mGameDataStruct.addObj(toPosIndex, objId)方法在运动方向前方添加该物体,从而实现物体的移动 2. 设计类Menu的设计与实现

该类主要功能为在游戏各个界面菜单中游标的移动和显示。当选中某个选项时,调用系统设置的音乐提示。 3. 设计类Toolbar的设计与实现

该类主要功能是在游戏界面工具栏图标进行编号,方便使用键盘的玩家可以直观的通过数字键盘完成操作。

五、设计评价

本程序基本功能都得到了实现,可在Android SDK 2.2平台上流畅运行游戏、编辑地图等。但由于程序开发时间比较短,所以还是存在一些不足之处。在功能设计中,编辑地图中的锁定功能没有完整实现。当玩家自己绘制地图的时候,点击锁定图标后,原图标的左上角会出现一个小锁的标志,表示锁定成功,但是并无实际用处。我本来想法是,在锁定了某一个图标之后,其他图标替换或者删除它将无效,并提示相应信息,只有解锁之后才能修改原图标。除此之外,还有一点不足之处,就是对于使用触屏手机的玩家,响应点击(触摸)事件,主角应当可以从当前位置移动多步到达目标位置(绕过障碍物自动寻径)。这个设计原本是为了使用触屏手机的玩家能够更加方便的操作主角的运动,避免一步一步前进的琐碎。这两点问题,虽然在这次毕业设计中未能实现,但是我会继续努力,在今后的工作之余完善这个作品。

六、总结

手机游戏现在备受人们的喜爱,它充斥在人们的日常生活里,随着Android操作平台的迅速发展,基于Android手机开发平台的各种游戏层出不穷,目前,我从事于手机测试,对嵌入式应用程序有一定的标准了解,因此,想学习一下Android的程序开发,便选择了此次毕设题目:应用于Android手机平台的推箱子游戏设计与实现。它重点在于Android开发环境的搭建、Android开发技术的运用以及对推箱子游戏算法的理解。

在程序编写过程中,我遇到了许多的问题。在开发一个项目之前,首先想想你这个项目从哪里入手,怎么开发?这个思路没理清,就盲目开始的话,即使开发出来了,效果、性能未必会有多好。只有理清思路之后,按照软件开发流程一步步地完成,再结合之前通过各种途径学习到的Android游戏编程知识,才能设计完成一个完美的作品。在整个过程中,主要学习到的还是遇到问题后的解决方法,那就是认真思考,勤于总结。有时间多与指导老师沟通,他们的话有时会一语中的,让我少走好多弯路。

在完成游戏后,我还注意到了一个问题,就是在游戏面前,我们还要控制好时间。制作游戏的目的在于给大家提供一个娱乐的方式,这就有一个“度”的问题,不要盲目沉迷于游戏,不光是手机游戏,还包括各种平台上的其他游戏。我们应该控制时间,做到合理、合“度”。

参考文献

[1] 郭宏志.Android应用开发详解. 北京:电子工业出版社 [2] 王世江.Google Android SDK开发范例大全(第2版). 北京:人民邮电出版社 [3] E2ECloud工作室.深入浅出Google Android. 北京:人民邮电出版社 [4] 靳岩,姚尚朗. Google Android开发入门与实战. 北京:人民邮电出版社 [5] 王向辉,张国印,沈洁. Android应用程序开发. 北京:清华大学出版社 [6] 汪永松.Android平台开发之旅. 北京:机械工业出版社 [7] 杨丰盛.Android应用开发揭秘. 北京:机械工业出版社 [8] 吴亚峰. Android2.0游戏开发实战宝典.

北京:人民邮电出版社

23

谢 辞

在本次毕业设计中,首先要感谢我的指导教师##老师以及公司的###工程师。两位老师治学严谨,一直对我严格要求,正所谓严师出高徒,让我自身得到了充分的锻炼。在遇到困难时,得到了老师们的积极指导和帮助,使我一直沿着正确的方向顺利完成毕业设计,也给了我许多自由发挥的空间。在此,衷心祝福两位老师工作顺利,身体健康。

感谢我的同事及同学们,他们也给了我许多的指点,在困惑面前,他们出言献策;在缺乏信心时,他们给我鼓励。从他们的身上我也学习到了良好的品性,使自己在困难面前不低头。

还要感谢我的学校与实习单位,他们为我提供了各种条件来支持我顺利完成毕业设计,让我有机会学习到新的知识并能够综合运用自己已经掌握的知识。

最后,再次感谢所有帮助过我并给予我大力支持的人,谢谢。

因篇幅问题不能全部显示,请点此查看更多更全内容