《基于android的贪吃蛇游戏设计与开发论文.docx》由会员分享,可在线阅读,更多相关《基于android的贪吃蛇游戏设计与开发论文.docx(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于android的贪吃蛇游戏设计与开发论文 基于Android的贪吃蛇游戏的设计与开发1. 程序构思 贪吃蛇游戏是一款非常经典的手机游戏,贪吃蛇游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。因此,在设计开发过程中,需要处理好各个类之间间的逻辑依赖关系和数据通信关系。 正是因为如此,本次设计的目的在于学习Java程序设计基本技术,学习用android开发Java 程序的相关技术,熟悉游戏“贪吃蛇”的需求,熟悉项目开发的完整
2、过程。学会怎样进行一个项目的需求分析、概要设计、详细设计等软件开发过程,熟练地掌握Java程序设计的基本技术和方法,熟练地掌握android环境的使用方法,培养初步的项目分析能力和程序设计能力。 2.程序设计 游戏设计的处理流程图 2.1 游戏功能 本系统主要完成以下几方面的功能: 游戏控制功能包括游戏的开始、暂停、退出 界面布局 其他辅助功能(如游戏帮助,游戏积分,游戏过关等) 2.2 总设计模块的划分 游戏总设计模块划分为游戏主要界面模块、游戏控制模块和游戏菜单模块。 2.3 游戏主界面模块 游戏主界面模块主要是指游戏的框图,其包括一下内容: 1、游戏界面的边界,即游戏中的墙; 2、游戏中
3、蛇的构成,以及苹果的构成; 3、游戏中障碍物的构成; 4、游戏中分数显示以及关卡显示。 2.4 游戏控制模块 (1)游戏开始控制: 我们的程序是使用上键开始游戏,启动游戏后会有一个初始菜单界面,我们点击“开始游戏”,弹出一句话“请按上键开始游戏”。游戏开始后蛇向下移动,然后由控制上下左右键来控制蛇的移动。在程序中我们重新建了一个activity来控制游戏的开始,使游戏的开始界面更美观。 (2)游戏暂停控制: 我们是使用center键来控制游戏的暂停的,这是一项人性化的设计,当玩家在游戏过程中突遇紧急情况时可以按center键暂停游戏,等玩家空闲后按center键可以继续游戏。 (3)游戏退出控
4、制: 在游戏的退出上我们的程序使用了多种方式来应对不同的情况,当玩家正在游戏中时,如想退出可以按“1”键,程序会自动跳转到初始菜单界面,在初始菜单界面点击“退出游戏”即可退出游戏。如果玩家在游戏中由于碰到墙或者咬到自己或者碰到障碍物而导致游戏结束的,游戏或自动弹出一个界面,里面有提示是继续游戏还是退出游戏,当点击“取消”时,游戏就会自动跳转到初始菜单,再点击“退出游戏”即可。 2.5类模块设计 src源码目录: Snake.java为主界面类; SnakeView 为贪吃蛇类的视图主要逻辑控制和绘制类; TitleView 为界面的整体视图; MenuActivity为菜单类,可以跳转到Hel
5、p类和Snake类; Help为游戏帮助类。 3.程序实现 1、游戏界面的实现 1、先声明用来存放绘画图像的X,Y轴的位置的数组: private int mTileGrid; 2、编写存放图片索引用图片的X,Y轴位置; public void setTile(int tileindex, int x, int y) mTileGridxy = tileindex; 3. 把图片素材加入到bitmap中 public void loadTile(int key, Drawable tile) Bitmap bitmap = Bitmap.createBitmap(mTileSize, mTil
6、eSize, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); tile.setBounds(0, 0, mTileSize, mTileSize); tile.draw(canvas); mTileArraykey = bitmap; 4、调用以上的方法以循环的方式位置数组赋值以及图片的索引, private void updateWalls() for (int x = 0; x 0) canvas.drawBitmap(mTileArraymTileGridxy, mXOffset + x * mTileSize,
7、 mYOffset + y * mTileSize, mPaint); 同上可见:整个界面其实就是由图片数组拼直面成的。 到此,则可以实现游戏背景墙。 2、游戏整个框架的构建 1 实现方案 游戏的整个框架的构建包括基本的蛇身,苹果的实现,有两种方案: 方案一:使用常用的数组来存储蛇身和苹果的点集的信息。此方案的优点是对数组的操作较为熟悉,实现简单,但是部分操作较为麻烦,有可能出现数组越界,或者浪费太多存储空间。方案二:使用动态数组ArrayList来存储蛇身和苹果点集的信息。ArrayList可以用来定义为各种不同类型的数组,不仅仅局限于int整型;而且ArrayList为用户编程提供了各种借
8、口, 比如插入,删除元素,统计元素个数等,实现较为简单,不会出现数组越界的问题。 结合各种因素的考虑,我们在设计中采用第二种方案。 定义Position方法,用于存储蛇身和苹果的点集坐标 private class Position /存储每个点的坐标 public int x; public int y; public Position(int xposition, int yposition) x = xposition; y = yposition; public boolean equals(int newx,int newy) if (x = newx & y = newy ) re
9、turn true; return false; 定义setMode方法,用于表示游戏所处的几种状态:进行,暂停, public void setMode(int newMode) int oldMode = mMode; mMode = newMode; if(newMode = RUNNING & oldMode != RUNNING) if(newMode = PAUSE) if(newMode = LOSE) if(newMode = READY) 苹果的实现 声明: private ArrayList mAppleTrail = new ArrayList(); 用于存储苹果的坐标位
10、置 根据游戏的需要,苹果的位置应该是随机产生的,使用java.util.Random类中提供的随机数实现苹果坐标的随机。 int newapplex = 2+random.nextInt(mYTileCount-2)-4); int newappley = 2+random.nextInt(mXTileCount-2)-4); newapple = new Position(newapplex,newappley); 检测苹果坐标是否与蛇的坐标以及墙的左边冲突 设置冲突标志位:boolean flag = false; int snakelength = mSnakeTrail.size();
11、 for (int index = 0; index mXTileCount-2) setMode(LOSE); return; 蛇的自身碰撞的检测: int wallength = mWallTrail.size(); for ( int wallindex = 0 ; wallindex wallength; wallindex+) Position c = mWallTrail.get(wallindex); if (c.equals(newHead.x,newHead.y) setMode(LOSE); return; 蛇吃苹果的实现 蛇所经过的每一个坐标,他们都要在苹果所在的Arra
12、yList mAppleList = new ArrayList())坐标集里面集依次判断,若是坐标相同,那个这个苹果就被蛇吃了。 找苹果的方法: int applecount = mAppleTrail.size(); int appleindex; for ( appleindex = 0; appleindex applecount; appleindex+) Position c = mAppleTrail.get(appleindex); if (c.equals(newHead.x,newHead.y) 实现键盘响应事件: 键盘主要起操作作用,可以控制蛇的行走方向: public
13、boolean onKeyDown(int keyCode,KeyEvent event)/键盘响应 if (keyCode = KeyEvent.KEYCODE_DPAD_DOWN) if (mDirection != SOUTH) mNextDirection = NORTH; return (true); . 刷新 只要继承Handler类就可以对消息进行控制,或者处理 class RefreshHandler extends Handler /响应消息 public void handleMessage(Message msg) SnakeView.this.update();/ 重要
14、页面 SnakeView.this.invalidate();刷新页面 / 向外提供人工的调用消息的接口, public void sleep(long delayMillis) this.removeMessages(0);/注消消息 / 添加消息, sendMessageDelayed(obtainMessage(0), delayMillis); 实现页面的切换 程序中从主菜单界面到游戏界面的切换以及从主菜单界面到游戏帮助界面都采用的是活动的切换方法; 使用startActivity(new Intent(MenuActivity.this,Snake.class); 实现不同活动之间的
15、切换,即从一个页面跳转到另一个上。 另一种方案也能实现页面的切换就是,通过控制页面上的控件如按钮的显示,隐藏来达到切换的目的,但是这种方式较为复杂。 加载游戏 通过ininNewGame方法来初始化新游戏,通过Update方法更新游戏设置。 游戏背景界面的改进 为贪吃蛇游戏设计了背景,使其更具有观赏新,使玩家赏心悦目。 添加音效 为游戏添加了音效,使游戏在听觉上给人以耳目一新的感觉;具体实现方法: 通过调用android.media.MediaPlayer类函数,声明对象: MediaPlayer mp=MediaPlayer.create(this.getContext(),R.raw.ba
16、ckground); 通过mp.start(); mp.pause(); mp.stop(); 来控制游戏不同状态时的音乐状态。 游戏本身的完善 为游戏设置关卡 根据玩家的得分为游戏设置了关卡,难度逐渐加强,蛇的移动速度逐渐加快。 每一关卡中的障碍物是固定不变的,为简单起见,只设置了五个关卡 通过Obstacle函数来设置关卡的障碍物,其中函数中以当前处于的关卡数作为判断依据。public void Obstacle() switch(stage) case 5: case 4: case 3: case 2: 游戏中设置的有三种不同的苹果:普通,加分,和毒苹果; 吃掉普通的苹果加一分;吃掉加
17、分的苹果加两分;吃掉毒苹果减三分并加速 每一种苹果的实现方法都一样,使用ArrayList动态数组 每种苹果都采用随机的方法实现,实现方式基本与蛇找到苹果相同,只是在细节上略有 区别 private void Poisonapple(); private void Loveapple(); 设置退出快捷键 在游戏进行中,设置了退出快捷键,可以直接退出游戏,更加方便玩家操作。 具体实现还是依靠键盘响应函数:游戏中是数字“1”键作为退出快捷键 public boolean onKeyDown(int keyCode,KeyEvent event) if(keyCode = KeyEvent.KEY
18、CODE_1) mUpdateFlag = false; mp.stop(); Intent intent = new Intent(this.getContext(),MenuActivity.class); this.getContext().startActivity(intent); 设置加速 根据实际操作需要,当操控蛇的移动时,若按下方向键不放,则蛇在该方向上的运行速度就会加快;若松开方向键则恢复原速度。 通过设置整型变量mSpeed和mNSpeed,其中mNSpeed用来保存蛇在该关卡的移动速度。 通过键盘响应函数public boolean onKeyDown(int keyCo
19、de,KeyEvent event) 和public boolean onKeyUp(int keyCode, KeyEvent event)一起来实现加速功能。 提示对话框 在游戏结束后弹出对话框询问玩家的下一步动作,按确定按钮继续开始新的游戏,按取消退出游戏。 这项功能需要android.content.DialogInterface类的支持, 声明对象:private AlertDialog.Builder showRightorNot ; 弹出对话框的界面: showRightorNot = new AlertDialog.Builder(this.getContext(); show
20、RightorNot.setIcon(R.drawable.icon); showRightorNot.setTitle(贪吃蛇); showRightorNot.setPositiveButton(确定, this); showRightorNot.setNegativeButton(取消, this); showRightorNot.setMessage(按确定继续,按取消退出游戏).show(); 类模块具体设计 TitleView.java TitleView.java中的成员变量表 TitleView.java成员方法SnakeView.java SnakeView.java中的成员变量表 SnakeView.java成员方法MenuActivity.Java MenuActivity.Java成员变量