Android推箱子游戏.docx
《Android推箱子游戏.docx》由会员分享,可在线阅读,更多相关《Android推箱子游戏.docx(25页珍藏版)》请在冰豆网上搜索。
Android推箱子游戏
目录
摘要1
Abstract1
一、绪论3
(一)课题研究背景和意义3
(二)本课题发展现状3
二、游戏业务流程和设计方案3
(一)业务流程和功能介绍3
(二)概要设计4
(三)界面设计概要4
(四)机能概要5
(五)游戏界面设计5
(六)设计方案9
三、系统开发环境说明10
(一)Android的开发环境说明10
(二)开发环境10
四、程序设计说明及代码10
(一)游戏主要公共类的设计与实现10
(二)游戏主要功能类的设计与实现12
(三)游戏主要数据类的设计与实现19
(四)游戏主要设计类的设计与实现20
五、设计评价22
六、总结22
参考文献23
谢 辞24
摘要
如今,伴随着GoogleAndroid操作系统的盛行,基于AndroidSDK的系统开发和基于Android应用的开发等已倍受大家关注。
但是目前基于Android游戏开发的市场还是不够成熟的,因而一款休闲娱乐、锻炼思维且适应于Android操作系统的游戏必将成为主流。
本课题是结合EclipseSDK开发平台开发的一款基于安卓平台的推箱子小游戏。
该游戏主要分为初始化模块,界面模块,数据存储模块,功能模块及游戏控制模块。
玩家通过控制小乌龟的移动来推动箱子,将所有箱子都推到目的地从而过关。
每关的难易程度不同,可保持玩家对游戏的新鲜感,同时游戏还支持自定义编辑地图,玩家可以根据自身要求设计出更有创意、更富挑战的新地图。
本游戏不仅是适合各类人群休闲娱乐的活动,还有助于提高人们思考问题能力与想象力,改善思维方式,拓展思维。
关键词
安卓,推箱子,休闲娱乐,拓展思维
Abstract
Recently,alongwiththeprevalenceofGoogleAndroidoperatingsystem,thepublichasimmenselyconcernedonthedevelopmentofapplicationsthatbasedonAndroidSDKsystemsandAndroidapplication.However,theAndroidgamedevelopmentmarketisstillimmature.Thus,anentertainedandmentaltraininggameofAndroidoperatingsystemwillindeedbecomethemainstreamofapplicationsystems.ThisissueisaSokobangame,whichisdevelopedforAndroidsystemandisinventedbasedonthecombinationofEclipseSDKdevelopmentplatform.
Thegameisdividedintoinitializationmodule,functionmodule,gamedesignmodule,gamedatamoduleandfunctioncontrolmodule.Besides,inordertocompletemissionsofthegame,playershavetocontrolthemovementofaturtletopushaboxandtoputallboxesintotherightdestination.Particularly,thedifficultyofeachlevelisseparateddifferently,whichmaintainthefreshnessofthegameandalsosupportcustomeditmap.Accordingtoplayers’requirement,thenewmapcanbemorecreativeandchallenging.Thegameisnotonlysuitableforallkindsofpeopleforleisuretime,butalsocanhelppeopletoexpandimaginationandtoimprovecreativethinking.
Keywords
Android,Sokobangame,recreation,creativethinking
一、绪论
(一)课题研究背景和意义
本课题来源于一款来自日本的古老游戏——推箱子,其设计目的是训练人的逻辑思维能力。
游戏场景一般是设定在空间狭小的仓库中,要求把箱子摆放到指定位置。
这就要求玩家巧妙的运用有限的空间和通道,合理的安排箱子的位置和移动次序才可能完成任务。
随着计算机游戏的发展,很多编程爱好者基于该游戏的思想开发了出各种版本、各种类型的推箱子。
这其中也包括很多手机版本的实现,伴随着手机与计算机的普及,很快推箱子游戏便进入了千家万户。
推箱子游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。
本文基于Android技术和eclipseSDK开发环境,开发了一个操作简单、界面美观、功能较齐全、可在AndroidSDK2.2平台上运行的推箱子游戏。
整个游戏程序分为二个功能模块,五个类模块,可流畅运行游戏并且实现玩家自己编辑地图的功能。
通过本游戏的开发,达到学习Android开发技术和熟悉软件开发流程的目的。
(二)本课题发展现状
相信大家对Android的发展历史多少都有一些了解,Android曾经是一家创立于旧金山的公司的名字,该公司于2005年8月份被Google收购,并从此踏上了飞速发展的道路。
经过这几年的发展,它已经发展成了一个平台、一个生态体系。
现在Android在移动领域已经得到了广泛的应用。
根据Google于2011年6月份公布的数字,现在每天激活的Android设备高达50万台,比5月份的数据增加了10万台。
Google还透露目前已经与36家OEM厂商和215家运营商合作,共激活了超过1亿台Android设备。
相比于Symbian的日落西山,以及苹果的封闭、WindowsPhone的前途未卜,Android无疑代表了当前行业发展的主流趋势:
开放平台取代了封闭平台。
让参与者均能通过自己的努力而获益。
从2008年9月公布1.0版本以来,经过近三年的跨越式发展,现在Android已经发展到了3.x版本,这是一个针对平板电脑而做了大量优化的版本,包括对更大屏幕的支持的类库、多任务优化等。
目前市场上占主流的还是2.2版本,当然,相信随着时间的推移,2.3及后续版本会得到越来越多的设备的支持。
伴随着GoogleAndroid操作系统的盛行,基于AndroidSDK的系统开发和基于Android应用的开发等已逐渐倍受大家关注,而手机游戏开发历来是移动开发中分量最重的部分,面对如此火爆的Android市场自然也不甘示弱,由于Android的应用层开发是基于Java的开发,所以必有其可以快速移植J2ME开发的游戏的优势,但是移植的游戏必定也不能发挥Android操作系统独特的特性,所以目前基于Android游戏开发的市场还是不够成熟的,面对这种情况,在了解AndroidSDK基础上,我打算开发一款完全适应于Android操作系统的推箱子游戏。
二、游戏业务流程和设计方案
(一)业务流程和功能介绍
本设计基本实现了可以在AndroidSDK2.2平台上运行的推箱子游戏,本游戏分五个模块:
1、初始化模块;2、功能实现模块;3、游戏设计模块;4、游戏数据模块;5、功能控制模块。
本游戏是一款益智类游戏,所以操作十分简单。
游戏中玩家可以用键盘的上、下、左、右键控制小乌龟的移动位置,也可以直接触摸手机屏幕完成相应操作。
游戏规则也十分简单,玩家在一个有限空间内,将木箱放到指定的位置。
箱子只能推不能拉,而且一次只能推动一个箱子,胜利条件是把所有箱子都推到目的地。
(二)概要设计
此次的设计是开发一款可在AndroidSDK2.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.启动游戏后游戏主界面,效果如图所示。
图2.2
2.点击“开始游戏”,即可进入系统设置的关卡中,默认从第一关开始,同时在左下角显示当前关卡和玩家已走的步数。
此外,该界面共有6个选项键,分别是撤销、恢复、关卡重置、前一关卡、后一关卡、返回主菜单,玩家可以通过对应的数字按键或直接触控屏幕实现对应功能。
玩家现在就可以开始游戏旅途,充分开动脑筋,挑战每一关卡,关卡难度设计由易到难。
效果如图所示。
图2.3
3.点击“载入自定义游戏”,即可进入玩家自己已经编辑好的游戏中,界面设计和系统设置的关卡相同,过关之后,自动进入系统设置的第一关卡。
效果如图所示。
图2.4
4.点击“编译自定义游戏”,即可进入玩家自行编译游戏仓库中。
玩家可以在15*15的格中按照自己的意愿设计关卡(需要符合游戏自身规定)。
该界面共有9个选项键,分别是墙、路、目的地、箱子、乌龟、锁定、删除、保存、返回主菜单,玩家可以通过对应的数字按键或直接触控屏幕实现对应功能。
效果如图所示。
图2.5
5.点击“游戏设置”,则进入游戏设置界面。
在该界面玩家可以根据自己的喜好选择系统音效、背景音、语言或者恢复默认设置,也可直接返回游戏主菜单。
在系统音效中,可以选择退出设置、开或是关;在背景音设置中,可以选择退出设置、预设音乐1、预设音乐2、预设音乐3、预设音乐4或是关;在语言设置中,可以选择退出设置、简体中文或是English;在载入默认设置中,可以选择是或是否。
效果如图所示。
图2.6
6.点击“帮助”,则进入游戏帮助界面。
在该界面玩家了解到游戏玩法、编辑游戏和游戏过程中涉及到的功能键作用。
按任意键或者触摸屏幕即可返回游戏主菜单。
效果如图所示。
图2.7
7.点击“关于”,则进入游戏关于界面。
该界面介绍了关于本游戏的相关信息。
效果如图所示。
图2.8
8.点击“退出游戏”,则会退出游戏。
(六)设计方案
1.模块划分
本游戏分五个模块
(1)初始化模块,对游戏界面进行初始化操作,包括界面切换、控制声音播放和游戏的暂停与恢复,以及手机返回键的设置。
(2)功能实现模块,主要是对游戏中各个环节进行绘制,设计出系统地图,记录玩家所用步骤,对玩家触屏的设定,针对不同的手机分辨率绘制界面,音乐功能调用,游戏中所有文字的提示信息以及游戏中背景和文字颜色大小等设置的实现。
(3)游戏设计模块,实现玩家控制小乌龟的操作,使之能够操作箱子到各个位置,以完成游戏设定的任务。
(4)游戏数据模块,主要是对玩家编辑的自定义地图和玩家选择系统设置状态的保存,以及游戏数据合理性的判断。
(5)功能控制模块,控制游戏功能的实现,包括创建菜单、调用系统音乐、获取当前系统状态、获取游戏界面图标等参数、保存游戏。
2.系统功能结构图
图2.9
三、系统开发环境说明
(一)Android的开发环境说明
为了学习Android的UI和功能,我们可以通过AndroidVirtualDevice(AVD)来实现。
AVD是Google提供给开发人员来调试他们开发的应用程序的,它可以运行在我们的PC机上,提供与真实手机形同的UI和操作方式,只是底层的硬件驱动不同。
我们可以用鼠标代替手机在AVD上实现点、划、按等触摸操作。
实现这一切的前提是我们需要搭建一个Android的开发环境。
(二)开发环境
开发所用操作系统:
WindowsXPSP2
IDE:
Eclipse
开发语言:
Java
开发所用插件:
ADT12.0.0
SDK:
AndroidSDK2.2,JDK1.5及以上
办公软件:
Office2007
四、程序设计说明及代码
(一)游戏主要公共类的设计与实现
1.主类Sokoban的设计与实现
该类是通过继承和扩展基类Activity来实现的,是整个程序的入口。
Androidapi中所提供的Activity生命周期图,如下:
图4.1
但在实际应用中,当一个Activity结束前,如果需要保存状态,就在onsaveInsanceState中。
它将状态数据以key-value的形式放入到saveInsanceState中,这样,当一个Activity被创建时,就能从onCreate的参数saveInsanceState中获得状态数据。
主要代码截图如下:
图4.2
在改变屏幕方向、弹出软键盘和隐藏软键盘时,不再去执行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的小图标,在调用时按照当前手机屏幕大小,绘制出游戏中各个界面所需的图标。
通过publicstaticBitmapgetBitmap(intbitmapId,intwidth,intheight)方法获取地图界面图标。
主要代码截图如下:
图4.5
2.功能类clienDB的设计与实现
该类主要是把应用程序中要用的常量编写到一起,一方面有利于调试程序,另一方面避免了魔法数字带来的不必要的麻烦。
3.功能类GameStateDataProvider的设计与实现
该类是绘制地图的重要步骤,实现了本游戏中系统默认的100个关卡。
预先设计好每一关的模板,然后在15*15的地图中一行一行的输入数据,其中还包括在路径上初始化箱子与小乌龟的位置。
构造一个三维数组gameStateDataArray,通过它来保存关卡、行、列数据信息。
部分代码截图及说明如下:
这是第一关第四、第五行各列的地图数据信息。
GameDataStruct.DATA_FLAG.PATH|GameDataStruct.DATA_FLAG.BOX表示该列在路径上设置箱子的初始位置。
图4.6
4.功能类GameTouchEventHandler的设计与实现
该类主要功能是根据玩家触摸屏幕的不同位置,将其转换成小乌龟的移动方向。
部分代码截图如下:
图4.7
5.功能类LayoutDesign的设计与实现
该类主要功能为获取当前手机分辨率并根据手机分辨率设置游戏中的宽和高。
在该类中,通过privatestaticint[]getHorizontalDisConfigParamTable(intdisplayItemId,intscreenResolutionType)方法设置游戏中的宽度,通过privatestaticint[]getVerticalDisConfigParamTable(intdisplayItemID,intscreenResolutionType)方法设置游戏中的高度。
这么做的好处是方便之后根据该分辨率来绘制游戏界面。
部分代码截图及说明如下:
图4.8
6.功能类MusicPlayer的设计与实现
该类主要是实现音乐文件的播放。
部分代码截图如下:
图4.9
7.功能类StringsProvider的设计与实现
该类主要实现整个游戏程序各个界面中字符内容的显示。
8.功能类TextUtil的设计与实现
该类主要实现了游戏程序中的文字颜色、透明度、背景颜色等设置。
9.功能类GameRunner的设计与实现
该类继承自抽象类GameView,负责游戏的运行,包括小乌龟的运动、游戏保存、音乐播放、当前系统设置、跳关、步数记录等。
部分代码截图及说明如下:
图4.10
图4.11
10.功能类GameMainMenu的设计与实现
该类继承自抽象类GameView,主要功能是创建菜单和菜单中的构成部分。
主要关键代码截图及说明如下:
通过privatevoidcreateMenu()方法创建菜单,通过privatevoidmenuConstruct()创建菜单中的构成部分。
图4.12
11.功能类GameEditor的设计与实现
该类继承自抽象类GameView,主要是实现了地图编辑的控制,获取当前系统状态,获取游戏界面图标等参数,能够判断错误信息类型,保存游戏。
主要代码截图及说明如下:
通过privatevoidupdateGeneratorCursor()方法实现了编辑游戏地图时玩家当前游标所选图标。
图4.13
(三)游戏主要数据类的设计与实现
1.数据类GameDataSaver的设计与实现
该类主要用于对地图数据的保存与提取,在保存时,判断玩家编辑的地图是否合理,如果不合理则提示相应信息,只有合理的地图才能保存。
在提取地图信息的时候也进行一次检查,如果编辑地图不合理则载入默认设置。
关键代码及说明如下:
通过publicstaticbooleanexportDataToFile(int[][]editDataArray)方法将地图数据写入到文件中;通过publicstaticbooleancheckUserFile()检查用户编辑数据是否合理;通过publicstaticint[][]importDataFromFile()从文件中读取数据载入地图。
2.数据类GameDataStruct的设计与实现
该类主要功能是设定数据结构,例如行列数必须在15*15之间,玩家绘制地图时,当前所选游标实现添加、删除、替代等功能,判断玩家是否完成任务。
主要部分代码截图及说明如下:
通过publicbooleanisMissionCompleted()方法判断任务是否完成。
图4.14
通过publicvoidaddObj(int[]posIndex,intobjId)方法,实现在编辑地图上添加玩家所需图标。
图4.15
3.数据类SystemSettingSaver的设计与实现
该类主要功能是在游戏启动后读取当前系统设置信息,当玩家重新设定系统设置后,将重新保存系统设置,同时还可以实现恢复默认设置功能。
(四)游戏主要设计类的设计与实现
1.设计类GameContainer的设计与实现
该类是游戏程序的关键步骤,它实现了小乌龟与箱子移动的算法。
移动中包括正移动,与“撤销”的负移动。
正移动:
小乌龟上下左右的移动都涉及到一个判断算法,判断小乌龟前方是否有箱子或者墙,如果没有,则可以移动;有的话,则判断箱子是否可移动。
代码如下:
//小乌龟运动判定
publicbooleanmoveMainPlayer(intmoveDir)
{
int[]fromPosIndex=mGameDataStruct.getObjPosIndex(clienDB.GameObjectID.MP);
int[]toMPPosIndex=getDestPosIndex(fromPosIndex,moveDir);
if(null==fromPosIndex||
toMPPosIndex==null||
toMPPosIndex==fromPosIndex)//下一步为空或者不能前进
returnfalse;
if(true==mGameDataStruct.isExist(toMPPosIndex,clienDB.GameObjectID.BOX))//前进方向是否存在箱子
{
int[]toBoxPosIndex=getDes