基于android的贪吃蛇游戏设计与开发.doc

上传人:wj 文档编号:1238202 上传时间:2023-04-30 格式:DOC 页数:32 大小:2.04MB
下载 相关 举报
基于android的贪吃蛇游戏设计与开发.doc_第1页
第1页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第2页
第2页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第3页
第3页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第4页
第4页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第5页
第5页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第6页
第6页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第7页
第7页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第8页
第8页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第9页
第9页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第10页
第10页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第11页
第11页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第12页
第12页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第13页
第13页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第14页
第14页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第15页
第15页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第16页
第16页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第17页
第17页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第18页
第18页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第19页
第19页 / 共32页
基于android的贪吃蛇游戏设计与开发.doc_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于android的贪吃蛇游戏设计与开发.doc

《基于android的贪吃蛇游戏设计与开发.doc》由会员分享,可在线阅读,更多相关《基于android的贪吃蛇游戏设计与开发.doc(32页珍藏版)》请在冰点文库上搜索。

基于android的贪吃蛇游戏设计与开发.doc

课程实训报告

课程名称计算机系统综合实训

课题名称基于Android的贪吃蛇游戏开发

专业计算机科学与技术

班级

学号

姓名

指导教师

2013年12月4日

湖南工程学院

课程实训任务书

课程名称计算机系统综合实训

课题基于Android的贪吃蛇游戏开发

专业班级

学生姓名

学号

指导老师

审批

任务书下达日期2013年12月4日

任务完成日期2013年12月20日

目录

1、程序构思 2

2、程序设计 3

2.1游戏功能 3

2.2总设计模块的划分 4

2.3游戏主界面模块 4

2.4游戏控制模块 4

2.5类模块设计 4

3、程序实现 5

3.1、游戏界面的实现 5

3.2、游戏整个框架的构建 6

3.3、实现键盘响应事件 8

3.4、刷新 9

3.4、实现页面的切换 9

3.5、加载游戏 9

3.6、游戏背景界面的改进 9

3.8、添加音效 10

3.9、游戏本身的完善 10

3、类模块具体设计 11

TitleView.java 11

SnakeView.java 12

4. 程序结果 14

5. 总结与展望 17

6.附录 17

1、程序构思

贪吃蛇游戏是一款非常经典的手机游戏,贪吃蛇游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。

在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。

因此,在设计开发过程中,需要处理好各个类之间间的逻辑依赖关系和数据通信关系。

正是因为如此,本次设计的目的在于学习Java程序设计基本技术,学习用android开发Java程序的相关技术,熟悉游戏“贪吃蛇”的需求,熟悉项目开发的完整过程。

学会怎样进行一个项目的需求分析、概要设计、详细设计等软件开发过程,熟练地掌握Java程序设计的基本技术和方法,熟练地掌握android环境的使用方法,培养初步的项目分析能力和程序设计能力。

2、程序设计

游戏设计的处理流程图:

开始

初始化界面和蛇身

放置食物

蛇开始运动

蛇吃到食?

蛇长大

蛇死亡?

继续续?

退出界面

N

N

Y

N

Y

游戏者按键选择

Y

2.1游戏功能

本系统主要完成以下几方面的功能:

游戏控制功能——包括游戏的开始、暂停、退出

界面布局

其他辅助功能(如游戏帮助,游戏积分,游戏过关等)

2.2总设计模块的划分

游戏总设计模块划分为游戏主要界面模块、游戏控制模块和游戏菜单模块。

2.3游戏主界面模块

游戏主界面模块主要是指游戏的框图,其包括一下内容:

1、游戏界面的边界,即游戏中的墙;

2、游戏中蛇的构成,以及苹果的构成;

3、游戏中障碍物的构成;

4、游戏中分数显示以及关卡显示。

2.4游戏控制模块

(1)游戏开始控制:

我们的程序是使用上键开始游戏,启动游戏后会有一个初始菜单界面,我们点击“开始游戏”,弹出一句话“请按上键开始游戏”。

游戏开始后蛇向下移动,然后由控制上下左右键来控制蛇的移动。

在程序中我们重新建了一个activity来控制游戏的开始,使游戏的开始界面更美观。

(2)游戏暂停控制:

我们是使用center键来控制游戏的暂停的,这是一项人性化的设计,当玩家在游戏过程中突遇紧急情况时可以按center键暂停游戏,等玩家空闲后按center键可以继续游戏。

(3)游戏退出控制:

在游戏的退出上我们的程序使用了多种方式来应对不同的情况,当玩家正在游戏中时,如想退出可以按“1”键,程序会自动跳转到初始菜单界面,在初始菜单界面点击“退出游戏”即可退出游戏。

如果玩家在游戏中由于碰到墙或者咬到自己或者碰到障碍物而导致游戏结束的,游戏或自动弹出一个界面,里面有提示是继续游戏还是退出游戏,当点击“取消”时,游戏就会自动跳转到初始菜单,再点击“退出游戏”即可。

2.5类模块设计

src源码目录:

Snake.java为主界面类;

SnakeView为贪吃蛇类的视图主要逻辑控制和绘制类;

TitleView为界面的整体视图;

MenuActivity为菜单类,可以跳转到Help类和Snake类;

Help为游戏帮助类。

3、程序实现

3.1、游戏界面的实现

1、先声明用来存放绘画图像的X,Y轴的位置的数组:

private int[][] mTileGrid;

2、编写存放图片索引用图片的X,Y轴位置;

public void setTile(int tileindex, int x, int y)

{ mTileGrid[x][y]=tileindex;}

3.把图片素材加入到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);

mTileArray[key]=bitmap;

}

4、调用以上的方法以循环的方式位置数组赋值以及图片的索引,

private void updateWalls(){

 for (int x=0;x< mXTileCount;x++){

   setTile(GREEN_STAR,x,0);

   setTile(GREEN_STAR,x, mYTileCount -1);        }

 for (int y=1;y< mYTileCount -1;y++){

   setTile(GREEN_STAR,0,y);/设置左边的界线的位置

setTile(GREEN_STAR, mXTileCount -1,y);/设置右边的界线的位置

        }}

5、重写VIEW 类里面的方法。

 把界线画出。

 public void onDraw(Canvascanvas)

{

   super.onDraw(canvas);

   for (int x=0;x< mXTileCount;x+=1){

      for (int y=0;y< mYTileCount;y+=1){

         if (mTileGrid[x][y]>0){

          canvas.drawBitmap(mTileArray[mTileGrid[x][y]],

          mXOffset +x* mTileSize,

           mYOffset +y* mTileSize,mPaint);}

同上可见:

 整个界面其实就是由图片数组拼直面成的。

到此,则可以实现游戏背景墙。

3.2、游戏整个框架的构建

1实现方案

游戏的整个框架的构建包括基本的蛇身,苹果的实现,有两种方案:

方案一:

使用常用的数组来存储蛇身和苹果的点集的信息。

此方案的优点是对数组的操作较为熟悉,实现简单,但是部分操作较为麻烦,有可能出现数组越界,或者浪费太多存储空间。

方案二:

使用动态数组ArrayList来存储蛇身和苹果点集的信息。

ArrayList可以用来定义为各种不同类型的数组,不仅仅局限于int整型;而且ArrayList为用户编程提供了各种借口,比如插入,删除元素,统计元素个数等,实现较为简单,不会出现数组越界的问题。

结合各种因素的考虑,我们在设计中采用第二种方案。

定义Position方法,用于存储蛇身和苹果的点集坐标

privateclassPosition{//存储每个点的坐标

publicintx;

publicinty;

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(newMode==PAUSE){}

if(newMode==LOSE) {}

if(newMode==READY) {}

}

苹果的实现

声明:

privateArrayListmAppleTrail=newArrayList();

用于存储苹果的坐标位置

根据游戏的需要,苹果的位置应该是随机产生的,使用java.util.Random类中提供的随机数实现苹果坐标的随机。

intnewapplex=2+random.nextInt((mYTileCount-2)-4);

intnewappley=2+random.nextInt((mXTileCount-2)-4);

newapple=newPosition(newapplex,newappley);

检测苹果坐标是否与蛇的坐标以及墙的左边冲突

设置冲突标志位:

booleanflag=false;

intsnakelength=mSnakeTrail.size();

for(intindex=0;index

{

if(mSnakeTrail.get(index).equals(newapple.x,newapple.y))

{flag=true;}

}

墙的冲突检测方法与上同;当产生的新坐标没有问题时,则把新坐标加入到mAppleTrail中。

蛇的实现

声明:

privateArrayListmAppleTrail=newArrayList();

用于存储苹果的坐标位置

蛇的初始化

蛇身的初始化在ininNewGame中实现,直接把最初要呈现给玩家的蛇的情况定义出来,即添加一定数量的坐标点进入mSnakeTrail中,使得在最初开始游戏时,有蛇可以进行自由移动。

蛇的移动

游戏中是通过触发来改变坐标(+1,-1)的方式来改蛇头的方向,包括后面的蛇的碰撞检测都要用到蛇头。

获取蛇的头部:

Positionhead=mSnakeTrail.get(0);

蛇的新头部:

PositionnewHead=newPosition(2,2);

通过设置整型变量mDirection以及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(intwallindex=0;wallindex

{

Positionc=mWallTrail.get(wallindex);

if(c.equals(newHead.x,newHead.y))

{

setMode(LOSE);

return;

} }

蛇吃苹果的实现

蛇所经过的每一个坐标, 他们都要在苹果所在的ArrayList mAppleList = new ArrayList())坐标集里面集依次判断,若是坐标相同,那个这个苹果就被蛇吃了 。

找苹果的方法:

intapplecount=mAppleTrail.size();

intappleindex;

for(appleindex=0;appleindex

{

Positionc=mAppleTrail.get(appleindex);

if(c.equals(newHead.x,newHead.y)){}

}

3.3、实现键盘响应事件

键盘主要起操作作用, 可以控制蛇的行走方向:

publicbooleanonKeyDown(intkeyCode,KeyEventevent)//键盘响应

{

if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN){

if(mDirection!

=SOUTH)

{

mNextDirection=NORTH;

}

return(true);

}

……..

}

3.4、刷新

只要继承Handler类就可以对消息进行控制,或者处理 

class RefreshHandler extends Handler{

//响应消息

        public void handleMessage(Messagemsg){

            SnakeView.this.update();// 重要页面

            SnakeView.this.invalidate();刷新页面

        }

// 向外提供人工的调用消息的接口,

        public void sleep(long delayMillis){

            this.removeMessages(0);//注消消息

// 添加消息,

            sendMessageDelayed(obtainMessage(0),delayMillis);           

        }

3.4、实现页面的切换

程序中从主菜单界面到游戏界面的切换以及从主菜单界面到游戏帮助界面都采用的是活动的切换方法;

使用startActivity(newIntent(MenuActivity.this,Snake.class));

实现不同活动之间的切换,即从一个页面跳转到另一个上。

另一种方案也能实现页面的切换就是,通过控制页面上的控件如按钮的显示,隐藏来达到切换的目的,但是这种方式较为复杂。

3.5、加载游戏

通过ininNewGame方法来初始化新游戏,通过Update方法更新游戏设置。

3.6、游戏背景界面的改进

为贪吃蛇游戏设计了背景,使其更具有观赏新,使玩家赏心悦目。

3.8、添加音效

为游戏添加了音效,使游戏在听觉上给人以耳目一新的感觉;具体实现方法:

通过调用android.media.MediaPlayer类函数,声明对象:

MediaPlayermp=MediaPlayer.create(this.getContext(),R.raw.background);

通过mp.start();

mp.pause();

mp.stop();

来控制游戏不同状态时的音乐状态。

3.9、游戏本身的完善

10、为游戏设置关卡

根据玩家的得分为游戏设置了关卡,难度逐渐加强,蛇的移动速度逐渐加快。

每一关卡中的障碍物是固定不变的,为简单起见,只设置了五个关卡

通过Obstacle函数来设置关卡的障碍物,其中函数中以当前处于的关卡数作为判断依据。

publicvoidObstacle()

{

switch(stage){

case5:

case4:

case3:

case2:

}}

游戏中设置的有三种不同的苹果:

普通,加分,和毒苹果

吃掉普通的苹果加一分;吃掉加分的苹果加两分;吃掉毒苹果减三分并加速

每一种苹果的实现方法都一样,使用ArrayList动态数组

每种苹果都采用随机的方法实现,实现方式基本与蛇找到苹果相同,只是在细节上略有区别

privatevoidPoisonapple();

privatevoidLoveapple();

设置退出快捷键

在游戏进行中,设置了退出快捷键,可以直接退出游戏,更加方便玩家操作。

具体实现还是依靠键盘响应函数:

游戏中是数字“1”键作为退出快捷键

publicbooleanonKeyDown(intkeyCode,KeyEventevent)

if(keyCode==KeyEvent.KEYCODE_1){

mUpdateFlag=false;

mp.stop();

Intentintent=newIntent(this.getContext(),MenuActivity.class);

this.getContext().startActivity(intent);

}

设置加速

根据实际操作需要,当操控蛇的移动时,若按下方向键不放,则蛇在该方向上的运行速度就会加快;若松开方向键则恢复原速度。

通过设置整型变量mSpeed和mNSpeed,其中mNSpeed用来保存蛇在该关卡的移动速度。

通过键盘响应函数publicbooleanonKeyDown(intkeyCode,KeyEventevent)和publicbooleanonKeyUp(intkeyCode,KeyEventevent)一起来实现加速功能。

提示对话框

在游戏结束后弹出对话框询问玩家的下一步动作,按确定按钮继续开始新的游戏,按取消退出游戏。

这项功能需要android.content.DialogInterface类的支持,

声明对象:

privateAlertDialog.BuildershowRightorNot;

弹出对话框的界面:

showRightorNot=newAlertDialog.Builder(this.getContext());

showRightorNot.setIcon(R.drawable.icon);

showRightorNot.setTitle("贪吃蛇");

showRightorNot.setPositiveButton("确定",this);

showRightorNot.setNegativeButton("取消",this);

showRightorNot.setMessage("按确定继续,按取消退出游戏").show();

3、类模块具体设计

TitleView.java

TitleView.java中的成员变量表

变量

类型

意义

赋值

mTileArray[]

privateBitmap

声明四种类型的小块,黄绿红黑

mTileSize

protectedstaticfinalint

小块边长

12

mXTileCount

protectedstaticint

x方向小块个数

mYTileCount;

protectedstaticint

y方向小块个数

mTileGrid

privateint[][]

每个小块的数值

mXOffset

protectedint

横向偏移量

mYOffset;

protectedint

纵向偏移量

paint

privatePaint

newPaint();

TitleView.java成员方法

SnakeView.java

Snake

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2