




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录摘 要1Abstract1一、绪论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开发平台开发的一款基于安卓平台的推箱子小游戏。该游戏主要分为初始化模块,界面模块,数据存储模块,功能模块及游戏控制模块。玩家通过控制小乌龟的移动来推动箱子,将所有箱子都推到目的地从而过关。每关的难易程度不同,可保持玩家对游戏的新鲜感,同时游戏还支持自定义编辑地图,玩家可以根据自身要求设计出更有创意、更富挑战的新地图。本游戏不仅是适合各类人群休闲娱乐的活动,还有助于提高人们思考问题能力与想象力,改善思维方式,拓展思维。关 键 词安卓,推箱子,休闲娱乐,拓展思维AbstractRecently, 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 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 wordsAndroid, Sokoban game, recreation, creative thinking23一、绪论(一)课题研究背景和意义本课题来源于一款来自日本的古老游戏推箱子,其设计目的是训练人的逻辑思维能力。游戏场景一般是设定在空间狭小的仓库中,要求把箱子摆放到指定位置。这就要求玩家巧妙的运用有限的空间和通道,合理的安排箱子的位置和移动次序才可能完成任务。随着计算机游戏的发展,很多编程爱好者基于该游戏的思想开发了出各种版本、各种类型的推箱子。这其中也包括很多手机版本的实现,伴随着手机与计算机的普及,很快推箱子游戏便进入了千家万户。推箱子游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本文基于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、功能控制模块。本游戏是一款益智类游戏,所以操作十分简单。游戏中玩家可以用键盘的上、下、左、右键控制小乌龟的移动位置,也可以直接触摸手机屏幕完成相应操作。游戏规则也十分简单,玩家在一个有限空间内,将木箱放到指定的位置。箱子只能推不能拉,而且一次只能推动一个箱子,胜利条件是把所有箱子都推到目的地。(二)概要设计此次的设计是开发一款可在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. 启动游戏后游戏主界面,效果如图所示。图2.22. 点击“开始游戏”,即可进入系统设置的关卡中,默认从第一关开始,同时在左下角显示当前关卡和玩家已走的步数。此外,该界面共有6个选项键,分别是撤销、恢复、关卡重置、前一关卡、后一关卡、返回主菜单,玩家可以通过对应的数字按键或直接触控屏幕实现对应功能。玩家现在就可以开始游戏旅途,充分开动脑筋,挑战每一关卡,关卡难度设计由易到难。效果如图所示。图2.33. 点击“载入自定义游戏”,即可进入玩家自己已经编辑好的游戏中,界面设计和系统设置的关卡相同,过关之后,自动进入系统设置的第一关卡。效果如图所示。图2.44. 点击“编译自定义游戏”,即可进入玩家自行编译游戏仓库中。玩家可以在15*15的格中按照自己的意愿设计关卡(需要符合游戏自身规定)。该界面共有9个选项键,分别是墙、路、目的地、箱子、乌龟、锁定、删除、保存、返回主菜单,玩家可以通过对应的数字按键或直接触控屏幕实现对应功能。效果如图所示。图2.55. 点击“游戏设置”,则进入游戏设置界面。在该界面玩家可以根据自己的喜好选择系统音效、背景音、语言或者恢复默认设置,也可直接返回游戏主菜单。在系统音效中,可以选择退出设置、开或是关;在背景音设置中,可以选择退出设置、预设音乐1、预设音乐2、预设音乐3、预设音乐4或是关;在语言设置中,可以选择退出设置、简体中文或是English;在载入默认设置中,可以选择是或是否。效果如图所示。图2.66. 点击“帮助”,则进入游戏帮助界面。在该界面玩家了解到游戏玩法、编辑游戏和游戏过程中涉及到的功能键作用。按任意键或者触摸屏幕即可返回游戏主菜单。效果如图所示。图2.77. 点击“关于”,则进入游戏关于界面。该界面介绍了关于本游戏的相关信息。效果如图所示。 图2.88. 点击“退出游戏”,则会退出游戏。(六)设计方案1. 模块划分本游戏分五个模块(1)初始化模块,对游戏界面进行初始化操作,包括界面切换、控制声音播放和游戏的暂停与恢复,以及手机返回键的设置。(2)功能实现模块,主要是对游戏中各个环节进行绘制,设计出系统地图,记录玩家所用步骤,对玩家触屏的设定,针对不同的手机分辨率绘制界面,音乐功能调用,游戏中所有文字的提示信息以及游戏中背景和文字颜色大小等设置的实现。(3)游戏设计模块,实现玩家控制小乌龟的操作,使之能够操作箱子到各个位置,以完成游戏设定的任务。(4)游戏数据模块,主要是对玩家编辑的自定义地图和玩家选择系统设置状态的保存,以及游戏数据合理性的判断。(5)功能控制模块,控制游戏功能的实现,包括创建菜单、调用系统音乐、获取当前系统状态、获取游戏界面图标等参数、保存游戏。2. 系统功能结构图图2.9三、系统开发环境说明(一)Android的开发环境说明为了学习Android的 UI和功能,我们可以通过Android Virtual Device(AVD)来实现。AVD是Google提供给开发人员来调试他们开发的应用程序的,它可以运行在我们的PC机上,提供与真实手机形同的UI和操作方式,只是底层的硬件驱动不同。我们可以用鼠标代替手机在AVD上实现点、划、按等触摸操作。实现这一切的前提是我们需要搭建一个Android的开发环境。(二)开发环境开发所用操作系统:Windows XP SP2IDE:Eclipse开发语言:Java开发所用插件:ADT 12.0.0SDK: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在改变屏幕方向、弹出软键盘和隐藏软键盘时,不再去执行onCreate()方法而是直接执行onConfigurationChanged()。如果不声明此段代码,按照Activity的生命周期,则每次会去执行一次onCreate()方法,而onCreate()方法通常会在显示之前做一些初始化工作,重复的初始化,会使得程序效率大大降低。部分代码如下:判断是否改变了屏幕方向、弹出软键盘和隐藏软键盘方法如下:ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE = newConfig.orientation | ActivityInfo.SCREEN_ORIENTATION_PORTRAIT = newConfig.orientation2. 主类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.52. 功能类clienDB的设计与实现该类主要是把应用程序中要用的常量编写到一起,一方面有利于调试程序,另一方面避免了魔法数字带来的不必要的麻烦。3. 功能类GameStateDataProvider的设计与实现该类是绘制地图的重要步骤,实现了本游戏中系统默认的100个关卡。预先设计好每一关的模板,然后在15*15的地图中一行一行的输入数据,其中还包括在路径上初始化箱子与小乌龟的位置。构造一个三维数组gameStateDataArray,通过它来保存关卡、行、列数据信息。部分代码截图及说明如下:这是第一关第四、第五行各列的地图数据信息。GameDataStruct.DATA_FLAG.PATH | GameDataStruct.DATA_FLAG.BOX表示该列在路径上设置箱子的初始位置。图4.64. 功能类GameTouchEventHandler的设计与实现该类主要功能是根据玩家触摸屏幕的不同位置,将其转换成小乌龟的移动方向。部分代码截图如下:图4.75. 功能类LayoutDesign的设计与实现该类主要功能为获取当前手机分辨率并根据手机分辨率设置游戏中的宽和高。在该类中,通过private static int getHorizontalDisConfigParamTable(int displayItemId, int screenResolutionType)方法设置游戏中的宽度,通过private static int getVerticalDisConfigParamTable(int displayItemID, int screenResolutionType)方法设置游戏中的高度。这么做的好处是方便之后根据该分辨率来绘制游戏界面。部分代码截图及说明如下:图4.86. 功能类MusicPlayer的设计与实现该类主要是实现音乐文件的播放。部分代码截图如下:图4.97. 功能类StringsProvider的设计与实现该类主要实现整个游戏程序各个界面中字符内容的显示。8. 功能类TextUtil的设计与实现该类主要实现了游戏程序中的文字颜色、透明度、背景颜色等设置。9. 功能类GameRunner的设计与实现该类继承自抽象类GameView,负责游戏的运行,包括小乌龟的运动、游戏保存、音乐播放、当前系统设置、跳关、步数记录等。部分代码截图及说明如下:图4.10图4.1110. 功能类GameMainMenu的设计与实现该类继承自抽象类GameView,主要功能是创建菜单和菜单中的构成部分。主要关键代码截图及说明如下:通过private void createMenu()方法创建菜单,通过private void menuConstruct()创建菜单中的构成部分。图4.1211. 功能类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()方法判断任务是否完成。图4.14通过public void addObj(int posIndex, int objId)方法,实现在编辑地图上添加玩家所需图标。图4.153. 数据类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);elseif(false = mGameDataStruct.isExist(toMPPosIndex, clienDB.GameObjectID.PATH) &false = mGameDataStruct.isExist(toMPPosIndex, clienDB.GameObjectID.DEST)return false;moveObj(clienDB.GameObjectID.MP, fromPosIndex, toMPPosIndex);return true;如果小乌龟或者箱子可以移动,则调用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平台上流畅运行游戏、编辑地图等。但由于程序开发时间比较短,所以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年出版专业资格考试(出版专业基础知识中级)测试题及答案二
- 政府采购考试题库及答案
- 2025年出版专业资格考试(出版专业基础知识中级)综合能力测试题及答案
- 高三试卷:河南省金科新未来大联考2024-2025学年高三上学期11月历史-历史答案
- 脱贫攻坚督查培训课件
- 房屋建筑环境保护与减排方案
- 老旧管网更新改造施工技术优化方案
- 2025年辅警招聘考试试题题库及答案
- 土木结构设计与施工方案
- 前期工程咨询响应方案
- 绿化部门车辆管理制度
- 砂石加工现场管理制度
- xx公司风险管理制度
- 保洁员职业技能标准
- it部门考核方案(3篇)
- 旧厂设备拆除方案(3篇)
- 2025年导游证考试试题
- 延长劳动合同期限协议书
- 代办土地证协议书
- 创意美术课程教学大纲
- 2025年有机生态肥行业深度研究报告
评论
0/150
提交评论