《基于android的贪吃蛇游戏设计与开发.docx》由会员分享,可在线阅读,更多相关《基于android的贪吃蛇游戏设计与开发.docx(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于android的贪吃蛇游戏设计与开发 基于a n d r o i d的贪吃蛇游戏设计与开发 LG GROUP system office room 课程实训报告课程名称计算机系统综合实训 课题名称基于Android的贪吃蛇游戏开发 专业计算机科学与技术 班级 学号 姓名 指导教师 2022年 12 月 4 日 湖南工程学院 课程实训任务书 课程名称计算机系统综合实训课题基于Android的贪吃蛇游戏开发专业班级 学生姓名 学号 指导老师 审批 任务书下达日期 2022 年 12 月 4 日 任务完成日期 2022 年 12 月 20日 目录 1、程序构思. 2、程序设计. 游戏功能. 总设
2、计模块的划分. 游戏主界面模块. 游戏控制模块. 类模块设计. 3、程序实现. 、游戏界面的实现. 、游戏整个框架的构建. 、实现键盘响应事件. 、刷新. 、实现页面的切换. 、加载游戏. 、游戏背景界面的改进. 、添加音效. 、游戏本身的完善. 3、类模块具体设计 . . . 4. 程序结果 . 5. 总结与展望 . 6. 附录. 1、程序构思 贪吃蛇游戏是一款非常经典的手机游戏,贪吃蛇游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一
3、些设计模式。因此,在设计开发过程中,需要处理好各个类之间间的逻辑依赖关系和数据通信关系。 正是因为如此,本次设计的目的在于学习Java程序设计基本技术,学习用android开发Java程序的相关技术,熟悉游戏“贪吃蛇”的需求,熟悉项目开发的完整过程。学会怎样进行一个项目的需求分析、概要设计、详细设计等软件开发过程,熟练地掌握Java程序设计的基本技术和方法,熟练地掌握android环境的使用方法,培养初步的项目分析能力和程序设计能力。 2、程序设计 游戏设计的处理流程图 游戏功能 本系统主要完成以下几方面的功能: 游戏控制功能包括游戏的开始、暂停、退出 界面布局 其他辅助功能(如游戏帮助,游戏
4、积分,游戏过关等) 总设计模块的划分 游戏总设计模块划分为游戏主要界面模块、游戏控制模块和游戏菜单模块。 游戏主界面模块 游戏主界面模块主要是指游戏的框图,其包括一下内容: 1、游戏界面的边界,即游戏中的墙; 2、游戏中蛇的构成,以及苹果的构成; 3、游戏中障碍物的构成; 4、游戏中分数显示以及关卡显示。 游戏控制模块 (1)游戏开始控制: 我们的程序是使用上键开始游戏,启动游戏后会有一个初始菜单界面,我们点击“开始游戏”,弹出一句话“请按上键开始游戏”。游戏开始后蛇向下移动,然后由控制上下左右键来控制蛇的移动。在程序中我们重新建了一个activity来控制游戏的开始,使游戏的开始界面更美观。
5、 (2)游戏暂停控制: 我们是使用center键来控制游戏的暂停的,这是一项人性化的设计,当玩家在游戏过程中突遇紧急情况时可以按center键暂停游戏,等玩家空闲后按center键可以继续游戏。 (3)游戏退出控制: 在游戏的退出上我们的程序使用了多种方式来应对不同的情况,当玩家正在游戏中时,如想退出可以按“1”键,程序会自动跳转到初始菜单界面,在初始菜单界面点击“退出游戏”即可退出游戏。如果玩家在游戏中由于碰到墙或者咬到自己或者碰到障碍物而导致游戏结束的,游戏或自动弹出一个界面,里面有提示是继续游戏还是退出游戏,当点击“取消”时,游戏就会自动跳转到初始菜单,再点击“退出游戏”即可。 类模块设
6、计 src源码目录: 为主界面类; SnakeView 为贪吃蛇类的视图主要逻辑控制和绘制类; TitleView 为界面的整体视图; MenuActivity为菜单类,可以跳转到Help类和Snake类; Help为游戏帮助类。 3、程序实现 、游戏界面的实现 1、先声明用来存放绘画图像的X,Y轴的位置的数组: privateintmTileGrid; 2、编写存放图片索引用图片的X,Y轴位置; publicvoid setTile(int tileindex,int x,int y) mTileGridxy = tileindex; 3. 把图片素材加入到bitmap中 public vo
7、id loadTile(int key, Drawable tile) Bitmap bitmap = Canvas canvas = new Canvas(bitmap); (0, 0, mTileSize, mTileSize); (canvas); mTileArraykey = bitmap; 4、调用以上的方法以循环的方式位置数组赋值以及图片的索引,privatevoidupdateWalls() for(intx = 0; x 0) (mTileArraymTileGridxy, mXOffset+ x *mTileSize, mYOffset+ y *mTileSize, mPa
8、int); 同上可见:整个界面其实就是由图片数组拼直面成的。 到此,则可以实现游戏背景墙。 、游戏整个框架的构建 1 实现方案 游戏的整个框架的构建包括基本的蛇身,苹果的实现,有两种方案: 方案一:使用常用的数组来存储蛇身和苹果的点集的信息。此方案的优点是对数组的操作较为熟悉,实现简单,但是部分操作较为麻烦,有可能出现数组越界,或者浪费太多存储空间。 方案二:使用动态数组ArrayList来存储蛇身和苹果点集的信息。ArrayList 可以用来定义为各种不同类型的数组,不仅仅局限于int整型;而且 ArrayList为用户编程提供了各种借口,比如插入,删除元素,统计元素个数等,实现较为简单,不
9、会出现数组越界的问题。 结合各种因素的考虑,我们在设计中采用第二种方案。 定义Position方法,用于存储蛇身和苹果的点集坐标 private class Position quals,) flag = true; 墙的冲突检测方法与上同;当产生的新坐标没有问题时,则把新坐标加入到mAppleTrail中。 蛇的实现 声明: private ArrayList mAppleTrail = new ArrayList();用于存储苹果的坐标位置 蛇的初始化 蛇身的初始化在ininNewGame中实现,直接把最初要呈现给玩家的蛇的情况定义出来,即添加一定数量的坐标点进入mSnakeTrail中,
10、使得在最初开始游戏时,有蛇可以进行自由移动。 蛇的移动 游戏中是通过触发来改变坐标(+1,-1)的方式来改蛇头的方向,包括后面的蛇的碰撞检测都要用到蛇头。 获取蛇的头部: Position head = (0); 蛇的新头部: Position newHead = new Position(2,2); 通过设置整型变量mDirection以及mNextDirection来判断蛇下一步移动方向,然后改变蛇头的坐标,使蛇移动 switch (mDirection) case EAST: newHead = new Position,; break; . 蛇的碰撞检测 蛇在移动时,若碰撞到墙壁或者自
11、己身体,则游戏结束。 蛇的碰壁检测: if( mXTileCount-2) setMode(LOSE); return; 蛇的自身碰撞的检测: int wallength = (); for ( int wallindex = 0 ; wallindex wallength; wallindex+) Position c = (wallindex); if ,) setMode(LOSE); return; 蛇吃苹果的实现 蛇所经过的每一个坐标,他们都要在苹果所在的 ArrayListmAppleList=new ArrayList())坐标集里面集依次判断,若是坐标相同,那个这个苹果就被蛇吃
12、了。 找苹果的方法: int applecount = (); int appleindex; for ( appleindex = 0; appleindex applecount; appleindex+) Position c = (appleindex); if ,) 、实现键盘响应事件 键盘主要起操作作用,可以控制蛇的行走方向: public boolean onKeyDown(int keyCode,KeyEvent event) 、刷新 只要继承Handler类就可以对消息进行控制,或者处理classRefreshHandlerextendsHandler tartActivit
13、y(intent); 设置加速 根据实际操作需要,当操控蛇的移动时,若按下方向键不放,则蛇在该方向上的运行速度就会加快;若松开方向键则恢复原速度。 通过设置整型变量mSpeed和mNSpeed,其中mNSpeed用来保存蛇在该关卡的移动速度。 通过键盘响应函数public boolean onKeyDown(int keyCode,KeyEvent event) 和public boolean onKeyUp(int keyCode, KeyEvent event)一起来实现加速功能。 提示对话框 在游戏结束后弹出对话框询问玩家的下一步动作,按确定按钮继续开始新的游戏,按取消退出游戏。 声明对象:private showRightorNot ; 弹出对话框的界面: showRightorNot = new (); (贪吃蛇); (确定, this); (取消, this); (按确定继续,按取消退出游戏).show(); 3、类模块具体设计 中的成员变量表 成员方法 中的成员变量表