基于android的贪吃蛇游戏设计与开发_第1页
基于android的贪吃蛇游戏设计与开发_第2页
基于android的贪吃蛇游戏设计与开发_第3页
基于android的贪吃蛇游戏设计与开发_第4页
基于android的贪吃蛇游戏设计与开发_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程实训报告课程名称计算机系统综合实训课题名称基于Android的贪吃蛇游戏开发专业一计算机科学与技术班级学号姓名指导教师2013年12月4日湖南工程学院课程实训任务书课程名称计算机系统综合实训课题基于Android的贪吃蛇游戏开发专业班级学生姓名学号指导老师审批任务书下达日期2013年12月4日任务完成日期2013年12月20日目录1、程序构思12、程序设计22.1 游戏功能22.2 总设计模块的划分32.3 游戏主界面模块32.4 游戏控制模块32.5 类模块设计33、程序实现43.1、 游戏界面的实现43.2、 游戏整个框架的构建53.3、 实现键盘响应事件73.4、 刷新83.5、 实

2、现页面的切换83.6、 加载游戏83.7、 游戏背景界面的改进83.8、 添加音效93.9、 游戏本身的完善93、类模块具体设计10TitleView.java10SnakeView.java114 .程序结果135 .总结与展望166 .附录161、程序构思贪吃蛇游戏是一款非常经典的手机游戏,贪吃蛇游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。因此,在设计开发过程中,需要处理好各个类之间间的逻辑依赖关系和数据通信关系。正

3、是因为如此,本次设计的目的在于学习Java程序设计基本技术,学习用android开发Java程序的相关技术,熟悉游戏“贪吃蛇”的需求,熟悉项目开发的完整过程。学会怎样进行一个项目的需求分析、概要设计、详细设计等软件开发过程,熟练地掌握Java程序设计的基本技术和方法,熟练地掌握android环境的使用方法,培养初步的项目分析能力和程序设计能力。2、程序设计初始化界面和蛇身游戏者按键选择放置食物蛇开始运动蛇吃到食?蛇长大蛇死亡?游戏设计的处理流程图:退出界面N2.1 游戏功能本系统主要完成以下几方面的功能:游戏控制功能一一包括游戏的开始、暂停、退出界面布局其他辅助功能(如游戏帮助,游戏积分,游戏

4、过关等)2.2 总设计模块的划分游戏总设计模块划分为游戏主要界面模块、游戏控制模块和游戏菜单模块。2.3 游戏主界面模块游戏主界面模块主要是指游戏的框图,其包括一下内容:1、游戏界面的边界,即游戏中的墙;2、游戏中蛇的构成,以及苹果的构成;3、游戏中障碍物的构成;4、游戏中分数显示以及关卡显示。2.4 游戏控制模块(1)游戏开始控制:我们的程序是使用上键开始游戏,启动游戏后会有一个初始菜单界面,我们点击“开始游戏”,弹出一句话“请按上键开始游戏”。游戏开始后蛇向下移动,然后由控制上下左右键来控制蛇的移动。在程序中我们重新建了一个activity来控制游戏的开始,使游戏的开始界面更美观。(2)游

5、戏暂停控制:我们是使用center键来控制游戏的暂停的,这是一项人性化的设计,当玩家在游戏过程中突遇紧急情况时可以按center键暂停游戏,等玩家空闲后按center键可以继续游戏。(3)游戏退出控制:在游戏的退出上我们的程序使用了多种方式来应对不同的情况,当玩家正在游戏中时,如想退出可以按“1”键,程序会自动跳转到初始菜单界面,在初始菜单界面点击“退出游戏”即可退出游戏。如果玩家在游戏中由于碰到墙或者咬到自己或者碰到障碍物而导致游戏结束的,游戏或自动弹出一个界面,里面有提示是继续游戏还是退出游戏,当点击“取消”时,游戏就会自动跳转到初始菜单,再点击“退出游戏”即可。2.5 类模块设计src用

6、|+)-+I+1+1src源码目录:com.Snake,aitdroidHelp.jatraMiivity.j4V之SnakeVifeirjavimmaratust.andi'cidSnake.java为主界面类;SnakeView为贪吃蛇类的视图主要逻辑控制和绘制类;TitleView为界面的整体视图;MenuActivity为菜单类,可以跳转到Help类和Snake类;Help为游戏帮助类。3、程序实现3.1、 游戏界面的实现1、先声明用来存放绘画图像的X,Y轴的位置的数组:privateintmTileGrid;2、编写存放图片索引用图片的X,Y轴位置;publicvoidset

7、Tile(inttileindex,intx,inty)mTileGridxy=tileindex;3.2、 片素材加入到bitmap中publicvoidloadTile(intkey,Drawabletile)Bitmapbitmap=Bitmap.createBitmap(mTileSize,mTileSize,Bitmap.Config.ARGB_8888);Canvascanvas=newCanvas(bitmap);tile.setBounds(0,0,mTileSize,mTileSize);tile.draw(canvas);mTileArraykey=bitmap;4、调用以

8、上的方法以循环的方式位置数组赋值以及图片的索引,privatevoidupdateWalls()for(intx=0;x<mXTileCount;x+)setTile(GREEN_STAR,x,0);setTile(GREEN_STAR,x,mYTileCount-1);for(inty=1;y<mYTileCount-1;y+)setTile(GREEN_STAR,0,y);/设置左边的界线的位置setTile(GREEN_STAR,mXTileCount-1,y);/设置右边的界线的位置5、重写VIEW类里面的方法。把界线画出。publicvoidonDraw(Canvasca

9、nvas)super.onDraw(canvas);for(intx=0;x<mXTileCount;x+=1)for(inty=0;y<mYTileCount;y+=1)if(mTileGridxy>0)canvas.drawBitmap(mTileArraymTileGridxy,mXOffset+x*mTileSize,mYOffset+y*mTileSize,mPaint);同上可见:整个界面其实就是由图片数组拼直面成的。至U此,则可以实现游戏背景墙。3.3、 游戏整个框架的构建1实现方案游戏的整个框架的构建包括基本的蛇身,苹果的实现,有两种方案:方案一:使用常用的数

10、组来存储蛇身和苹果的点集的信息。此方案的优点是对数组的操作较为熟悉,实现简单,但是部分操作较为麻烦,有可能出现数组越界,或者浪费太多存储空间。方案二:使用动态数组ArrayList来存储蛇身和苹果点集的信息。ArrayList可以用来定义为各种不同类型的数组,不仅仅局限于int整型;而且ArrayList为用户编程提供了各种借口,比如插入,删除元素,统计元素个数等,实现较为简单,不会出现数组越界的问题。结合各种因素的考虑,我们在设计中采用第二种方案。定义Position方法,用于存储蛇身和苹果的点集坐标privateclassPosition存储每个点的坐标publicintx;publici

11、nty;publicPosition(intxposition,intyposition)x=xposition;y=yposition;publicbooleanequals(intnewx,intnewy)if(x=newx&&y=newy)returntrue;returnfalse;定义setMode方法,用于表示游戏所处的几种状态:进行,暂停,publicvoidsetMode(intnewMode)intoldMode=mMode;mMode=newMode;if(newMode=RUNNING&&oldMode!=RUNNING)if(newMod

12、e=PAUSE)if(newMode=LOSE)if(newMode=READY)苹果的实现声明:privateArrayList<Position>mAppleTrail=newArrayList<Position>();用于存储苹果的坐标位置根据游戏的需要,苹果的位置应该是随机产生的,使用java.util.Random类中提供的随机数实现苹果坐标的随机。intnewapplex=2+random.nextInt(mYTileCount-2)-4);intnewappley=2+random.nextInt(mXTileCount-2)-4);newapple=ne

13、wPosition(newapplex,newappley);检测苹果坐标是否与蛇的坐标以及墙的左边冲突设置冲突标志位:booleanflag=false;intsnakelength=mSnakeTrail.size();for(intindex=0;index<snakelength;index+)if(mSnakeTrail.get(index).equals(newapple.x,newapple.y)flag=true;墙的冲突检测方法与上同;当产生的新坐标没有问题时,则把新坐标加入到mAppleTrail中。蛇的实现声明:privateArrayList<Positio

14、n>mAppleTrail=newArrayList<Position>();用于存储苹果的坐标位置蛇的初始化蛇身的初始化在ininNewGame中实现,直接把最初要呈现给玩家的蛇的情况定义出来,即添加一定数量的坐标点进入mSnakeTrail中,使得在最初开始游戏时,有蛇可以进行自由移动。蛇的移动游戏中是通过触发来改变坐标(+1,-1)的方式来改蛇头的方向,包括后面的蛇的碰撞检测都要用到蛇头。获取蛇的头部:Positionhead=mSnakeTrail.get(0);蛇的新头部:PositionnewHead=newPosition(2,2);通过设置整型变量mDirec

15、tion以及mNextDirection来判断蛇下一步移动方向,然后改变蛇头的坐标,使蛇移动switch(mDirection)caseEAST:newHead=newPosition(head.x,head.y-1);break;蛇的碰撞检测蛇在移动时,若碰撞到墙壁或者自己身体,则游戏结束。蛇的碰壁检测:if(head.x<1)|(head.y<1)|(head.x>mYTileCount-2)|(head.y>mXTileCount-2)setMode(LOSE);return;蛇的自身碰撞的检测:intwallength=mWallTrail.size();for

16、(intwallindex=0;wallindex<wallength;wallindex+)Positionc=mWallTrail.get(wallindex);if(c.equals(newHead.x,newHead.y)setMode(LOSE);return;蛇吃苹果的实现蛇所经过的每一个坐标,他们都要在苹果所在的ArrayList<Position>mAppleList=newArrayList<Position>()坐标集里面集依次判断,若是坐标相同,那个这个苹果就被蛇吃了。找苹果的方法:intapplecount=mAppleTrail.size

17、();intappleindex;for(appleindex=0;appleindex<applecount;appleindex+)Positionc=mAppleTrail.get(appleindex);if(c.equals(newHead.x,newHead.y)3.4、 实现键盘响应事件键盘主要起操作作用,可以控制蛇的行走方向:publicbooleanonKeyDown(intkeyCode,KeyEventevent)/键盘响应if(keyCode=KeyEvent.KEYCODE_DPAD_DOWN)if(mDirection!=SOUTH)mNextDirectio

18、n=NORTH;return(true);3.5、 刷新只要继承Handler类就可以对消息进行控制,或者处理classRefreshHandlerextendsHandler响应消息publicvoidhandleMessage(Messagemsg)SnakeView.this.update();/重要页面SnakeView.this.invalidate();刷新页面/向外提供人工的调用消息的接口,publicvoidsleep(longdelayMillis)this.removeMessages(0);/注消消息/添加消息,sendMessageDelayed(obtainMessa

19、ge(0),delayMillis);3.4、 实现页面的切换程序中从主菜单界面到游戏界面的切换以及从主菜单界面到游戏帮助界面都采用的是活动的切换方法;使用startActivity(newIntent(MenuActivity.this,Snake.class);实现不同活动之间的切换,即从一个页面跳转到另一个上。另一种方案也能实现页面的切换就是,通过控制页面上的控件如按钮的显示,隐藏来达到切换的目的,但是这种方式较为复杂。3.5、 加载游戏通过ininNewGame方法来初始化新游戏,通过Update方法更新游戏设置。3.6、 游戏背景界面的改进为贪吃蛇游戏设计了背景,使其更具有观赏新,使

20、玩家赏心悦目。3.8、 添加音效为游戏添加了音效,使游戏在听觉上给人以耳目一新的感觉;具体实现方法:通过调用android.media.MediaPlayer类函数,声明对象:MediaPlayermp=MediaPlayer.create(this.getContext(),R.raw.background);通过mp.start();mp.pause();mp.stop();来控制游戏不同状态时的音乐状态。3.9、 游戏本身的完善10、为游戏设置关卡根据玩家的得分为游戏设置了关卡,难度逐渐加强,蛇的移动速度逐渐加快。每一关卡中的障碍物是固定不变的,为简单起见,只设置了五个关卡通过Obsta

21、cle函数来设置关卡的障碍物,其中函数中以当前处于的关卡数作为判断依据。publicvoidObstacle。switch(stage)case5:case4:case3:case2:游戏中设置的有三种不同的苹果:普通,加分,和毒苹果吃掉普通的苹果加一分;吃掉加分的苹果加两分;吃掉毒苹果减三分并加速每一种苹果的实现方法都一样,使用ArrayList动态数组每种苹果都采用随机的方法实现,实现方式基本与蛇找到苹果相同,只是在细节上略有区别privatevoidPoisonapple();privatevoidLoveapple();设置退出快捷键在游戏进行中,设置了退出快捷键,可以直接退出游戏,更

22、加方便玩家操作。具体实现还是依靠键盘响应函数:游戏中是数字“1”键作为退出快捷键publicbooleanonKeyDown(intkeyCode,KeyEventevent)if(keyCode=KeyEvent.KEYCODE_1)mUpdateFlag=false;mp.stop();Intentintent=newIntent(this.getContext(),MenuActivity.class);this.getContext().startActivity(intent);设置加速根据实际操作需要,当操控蛇的移动时,若按下方向键不放,则蛇在该方向上的运行速度就会加快;若松开方向

23、键则恢复原速度。通过设置整型变量mSpeed和mNSpeed,其中mNSpeed用来保存蛇在该关卡的移动速度。通过键盘响应函数publicbooleanonKeyDown(intkeyCode,KeyEventevent)和publicbooleanonKeyUp(intkeyCode,KeyEventevent)起来实现力口速功能。提示对话框在游戏结束后弹出对话框询问玩家的下一步动作,按确定按钮继续开始新的游戏,按取消退出游戏。这项功能需要android.content.DialogInterface类的支持,声明对象:privateAlertDialog.BuildershowRighto

24、rNot;弹出对话框的界面:showRightorNot=newAlertDialog.Builder(this.getContext();showRightorNot.setIcon(R.drawable.icon);showRightorNot.setTitle("贪吃蛇");showRightorNot.setPositiveButton("确定",this);showRightorNot.setNegativeButton("取消",this);showRightorNot.setMessage("按确定继续,按取消

25、退出游戏").show();3、类模块具体设计TitleView.javaTitleView.java中的成员变量表变量意义赋值mTileArray口privateBitmap声明四种类型的小块,黄绿红黑mTileSizeprotectedstaticfinalint小块边长12mXTileCountprotectedstaticintx方向小块个数9mYTileCount;protectedstaticinty方向小块个数mTileGridprivateint每个小块的数值mXOffsetprotectedint横向偏移量mYOffset;protectedint纵向偏移量pain

26、tprivatePaintnewPaint();TitleView.java成员方法SnakeView.javaSnakeView.java中的成员变量表变量作用赋值TAGpublicstaticfinalString"Snakeview"showRightorNotPrivateAlertDialog.Builder游戏继续提示mDirectionprivateint控制蛇的移动方向SOUTHmNextDirectionprivateint控制蛇的下一个移动方向SOUTHNORTHprivatestaticfinalint控制蛇向上移动1SOUTHprivatestati

27、cfinalint控制蛇向卜移动2EASTprivatestaticfinalint控制蛇向右移动3WESTprivatestaticfinalint控制蛇向左移动4READYpublicstaticfinalint1RUNNINGpublicstaticfinalint控制游戏开始2PAUSEpublicstaticfinalint控制游戏暂停3LOSEpublicstaticfinalint控制游戏结束4iitextViewl;privateTextViewtextView2;privateTextViewtextView3;privateTextViewmCenterPressedpri

28、vatebooleanfalsemUpdateFlagprivatebooleanfalsemModepublicintREADYstageprivateint记录通关等级1mScoreprivateint计分0mSpeedprivateint刷新界囿时间变量600mNSpeedprivateint刷新界囿时间变量mSpeedreprivateRefreshHandler刷新界囿处理变量newRefreshHandler();randomprivatestaticfinalRandomnewRandom();mRecordprivateint=newint10SnakeView.java成员方

29、法MenuActivity.JavaMenuActivity.Java成员变量TAGpublicstaticfinalStringTAGshowRightorNotprivateAlertDialog.BuildershowRightorNotHelp.JavaHelp.Java成员变量onCreateprotectedvoidonCreate304.程序结果保存原程序,启动模拟机,选择javaapplication,运行结果如下:tJ一卜日11:26bbblst11OOGO90®bbfi4;-t11QWERJykI。PA小MBTf,即明图啥ZXc值配BBfH2,小回lx血11:26

30、SnAkc©0Oh胪那欧那期都BT£vvHTtfUW法Lmciiim图ZX5YMBHMEnn5 .总结与展望贪吃蛇是一个简单的游戏,却让我吃了很多的苦头,从搭建开发环境到对程序进行调试,出现了各种各样的问题,像JDK版本现错了啊,环境变量的设置出错啊,调试的时候那个R文件不能够读取我用了3天才发现只是大小写的问题等等,这些让我深刻地(绝对深刻)认识到细节对一个想要成为一个优秀程序员是多么不可或缺的品质。这一次的实验很多代码是从网上找来的,我自己只是起到了一个整合处理的作用,还有一小部分自己还不是完全搞懂,我还将花一部分时间来弄明白他们,争取自己能够独立的编写出一个完整的完美

31、的程序来。6 .附录packagecom.Snake.android;importjava.util.ArrayList;importjava.util.Random;importandroid.app.AlertDialog;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.content.Intent;importandroid.content.res.Resources;importandroid.media.MediaPlayer;importandroid.os.Hand

32、ler;importandroid.os.Message;importandroid.util.AttributeSet;importandroid.view.KeyEvent;importandroid.view.View;importandroid.widget.TextView;/*authorAdministrator*/TileViewimplementspublicclassSnakeViewextendsandroid.content.DialogInterface.OnClickListenerpublicstaticfinalStringTAG="Snakeview

33、"privateAlertDialog.BuildershowRightorNot;privateintmDirection=SOUTH;privateintmNextDirection=SOUTH;设置方向privatestaticfinalintNORTH=1;privatestaticfinalintSOUTH=2;privatestaticfinalintEAST=3;privatestaticfinalintWEST=4;publicstaticfinalintREADY=1;publicstaticfinalintRUNNING=2;publicstaticfinalin

34、tPAUSE=3;publicstaticfinalintLOSE=4;privateTextViewtextViewl;privateTextViewtextView2;privateTextViewtextView3;privatebooleanmCenterPressed=false;privatebooleanmUpdateFlag=false;/是否更新的标志量publicintmMode=READY;privateintmScore=0;privateintmSpeed=600;privateintstage=1;privateintmNSpeed=mSpeed;刷新界面处理器pr

35、ivateRefreshHandlerre=newRefreshHandler();为创建苹果坐标使用随机对象privatestaticfinalRandomrandom=newRandom。;用于存储贪吃蛇中,苹果和蛇的点阵的坐标的信息的集合privateArrayList<Position>mSnakeTrail=newArrayList<Position>();privateArrayList<Position>mAppleTrail=newArrayList<Position>();privateArrayList<Position

36、>mWallTrail=newArrayList<Position>();privateArrayList<Position>mPoisonApple=newArrayList<Position>();privateArrayList<Position>mLoveApple=newArrayList<Position>();MediaPlayermp=MediaPlayer.create(this.getContext(),R.raw.background);相当于数组大小可变/* paramcontext* paramattr

37、s* /classRefreshHandlerextendsHandler每600ms刷新一次/*响应消息*/Override/*publicvoidhandleMessage(Messagemsg)update();invalidate。;/消失重新调用ondraw向外提供人工的调用消息的接口*paramdelayMillis*/publicvoidsleep(longdelayMillis)隔600ms重新调用这个函数this.removeMessages(0);sendMessageDelayed(obtainMessage(0),delayMillis);publicSnakeView

38、(Contextcontext,AttributeSetattrs)super(context,attrs);setFocusable(true);ininSnakeView();publicvoidininSnakeView()初始化界面Resourcesr=this.getContext().getResources();resetTiles(6);loadTile(1,r.getDrawable(R.drawable.redstar);loadTile(2,r.getDrawable(R.drawable.yellowstar);loadTile(3,r.getDrawable(R.dr

39、awable.greenstar);loadTile(4,r.getDrawable(R.drawable.purplewstar);loadTile(5,r.getDrawable(R.drawable.favourite);privateclassPosition存储每个点的坐标publicintx;publicinty;publicPosition(intxposition,intyposition)x=xposition;y=yposition;publicbooleanequals(intnewx,intnewy)if(x=newx&&y=newy)returntru

40、e;returnfalse;publicvoidininNewGame()mSnakeTrail.clear();mAppleTrail.clear();mScore=0;stage=1;mSpeed=600;初始化蛇的位置mSnakeTrail.add(0,newPosition(20,20);mSnakeTrail.add(1,newPosition(19,20);mSnakeTrail.add(2,newPosition(18,20);初始化苹果的位置Apple();Poisonapple();Loveapple();mDirection=NORTH;mNextDirection=NOR

41、TH;键盘响应publicbooleanonKeyDown(intkeyCode,KeyEventevent)/mSpeed=200;if(keyCode=KeyEvent.KEYCODE_DPAD_UP)if(mMode=READY|mMode=LOSE)ininNewGame();setMode(RUNNING);update();mp.start();return(true);if(mMode=PAUSE)setMode(RUNNING);mp.start();return(true);if(mDirection!=NORTH)mNextDirection=SOUTH;return(tr

42、ue);if(keyCode=KeyEvent.KEYCODE_DPAD_DOWN)if(mDirection!=SOUTH)mNextDirection=NORTH;return(true);if(keyCode=KeyEvent.KEYCODE_DPAD_LEFT)if(mDirection!=WEST)mNextDirection=EAST;return(true);if(keyCode=KeyEvent.KEYCODE_DPAD_RIGHT)if(mDirection!=EAST)mNextDirection=WEST;return(true);if(keyCode=KeyEvent.

43、KEYCODE_DPAD_CENTER)if(mCenterPressed=false)setMode(PAUSE);mp.pause();elsesetMode(RUNNING);mp.start();mCenterPressed=!mCenterPressed;if(keyCode=KeyEvent.KEYCODE_1)mUpdateFlag=false;mp.stop();Intentintent=newIntent(this.getContext(),MenuActivity.class);this.getContext().startActivity(intent);returnsu

44、per.onKeyDown(keyCode,event);OverridepublicbooleanonKeyUp(intkeyCode,KeyEventevent)mSpeed=mNSpeed;if(keyCode=KeyEvent.KEYCODE_DPAD_UP)if(mDirection!=NORTH)mNextDirection=SOUTH;return(true);if(keyCode=KeyEvent.KEYCODE_DPAD_DOWN)if(mDirection!=SOUTH)mNextDirection=NORTH;return(true);if(keyCode=KeyEven

45、t.KEYCODE_DPAD_LEFT)if(mDirection!=WEST)mNextDirection=EAST;return(true);if(keyCode=KeyEvent.KEYCODE_DPAD_RIGHT)if(mDirection!=EAST)mNextDirection=WEST;return(true);/TODOAuto-generatedmethodstubreturnsuper.onKeyUp(keyCode,event);publicvoidsetMode(intnewMode)intoldMode=mMode;mMode=newMode;Stringstr=&

46、quot;"if(newMode=RUNNING&&oldMode!=RUNNING)invalidate。;mUpdateFlag=true;textView1.setVisibility(View.INVISIBLE);update();return;if(newMode=PAUSE)str="按暂停键继续开始"mUpdateFlag=false;if(newMode=LOSE)str="游戏结束,按上键重新开始"mUpdateFlag=false;showRightorNot=newAlertDialog.Builder(

47、this.getContext();showRightorNot.setIcon(R.drawable.icon);showRightorNot.setTitle("贪吃蛇");showRightorNot.setPositiveButton("确定",this);showRightorNot.setNegativeButton("取消",this);").show();showRightorNot.setMessage("按确定继续,按取消退出游戏mp.stop();mp.prepareAsync();if(ne

48、wMode=READY)mp.start();str="按上键开始游戏"textView1.setText(str);textView1.setVisibility(View.VISIBLE);publicvoidupdate()if(mUpdateFlag)clearTiles();updateWalls();updateSnake();updateApple();re.sleep(mSpeed);publicvoidupdateWalls()for(intx=0;x<mYTileCount;x+)setTile(3,x,0);/设置顶部界限setTile(3,x,

49、mXTileCount-1);/设置底部界for(inty=1;y<mXTileCount-1;y+)setTile(3,0,y);setTile(3,mYTileCount-1,y);publicvoidupdateSnake()booleanSnakegrow=false;/获取蛇的头部Positionhead=mSnakeTrail.get(0);蛇的新头部PositionnewHead=newPosition(2,2);根据当前的为方向设置坐标的信息mDirection=mNextDirection;switch(mDirection)caseEAST:newHead=newPo

50、sition(head.x,head.y-1);break;caseWEST:newHead=newPosition(head.x,head.y+1);break;caseNORTH:newHead=newPosition(head.x+1,head.y);break;caseSOUTH:newHead=newPosition(head.x-1,head.y);break;/蛇碰壁检测if(newHead.x<1)|(newHead.y<1)|(newHead.x>mYTileCount-2)|(newHead.y>mXTileCount-2)setMode(LOSE)

51、;return;蛇自身冲撞检测intsnakelength=mSnakeTrail.size();for(intsnakeindex=0;snakeindex<snakelength;snakeindex+)Positionc=mSnakeTrail.get(snakeindex);if(c.equals(newHead.x,newHead.y)setMode(LOSE);return;蛇与障碍物的冲撞检测intwallength=mWallTrail.size();for(intwallindex=0;wallindex<wallength;wallindex+)Position

52、c=mWallTrail.get(wallindex);if(c.equals(newHead.x,newHead.y)setMode(LOSE);return;找苹果intapplecount=mAppleTrail.size();Stringstr1="分数:"intappleindex;for(appleindex=0;appleindex<applecount;appleindex+)Positionc=mAppleTrail.get(appleindex);if(c.equals(newHead.x,newHead.y)找至U苹果mAppleTrail.re

53、move(c);Apple();mScore+;if(mScore%3=0)mSpeed*=0.95;mNSpeed=mSpeed;stage+;Apple();Poisonapple();Loveapple();Snakegrow=true;textView2.setText(str1+mScore+"按数字键“1"退出游戏");Stringstr2="第"+stage+"关";textView3.setText(str2);毒苹果处理方法intposioncount=mPoisonApple.size();for(intindex=0;index<posioncount;index+)Positionc=mPoisonApple.get(index);if(c.equals(newHead.x,newHead.y)/找至U

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论