基于android的贪吃蛇游戏设计与开发60600.docx
- 文档编号:1851404
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:41
- 大小:1.47MB
基于android的贪吃蛇游戏设计与开发60600.docx
《基于android的贪吃蛇游戏设计与开发60600.docx》由会员分享,可在线阅读,更多相关《基于android的贪吃蛇游戏设计与开发60600.docx(41页珍藏版)》请在冰豆网上搜索。
基于android的贪吃蛇游戏设计与开发60600
课程实训报告
课程名称计算机系统综合实训
课题名称基于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.java11
SnakeView.java12
4.程序结果14
5.总结与展望17
6.附录17
1、程序构思
贪吃蛇游戏是一款非常经典的手机游戏,贪吃蛇游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。
在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。
因此,在设计开发过程中,需要处理好各个类之间间的逻辑依赖关系和数据通信关系。
正是因为如此,本次设计的目的在于学习Java程序设计基本技术,学习用android开发Java程序的相关技术,熟悉游戏“贪吃蛇”的需求,熟悉项目开发的完整过程。
学会怎样进行一个项目的需求分析、概要设计、详细设计等软件开发过程,熟练地掌握Java程序设计的基本技术和方法,熟练地掌握android环境的使用方法,培养初步的项目分析能力和程序设计能力。
2、程序设计
游戏设计的处理流程图:
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){}
}
苹果的实现
声明:
privateArrayList
用于存储苹果的坐标位置
根据游戏的需要,苹果的位置应该是随机产生的,使用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中。 蛇的实现 声明: privateArrayList 用于存储苹果的坐标位置 蛇的初始化 蛇身的初始化在ininNewGame中实现,直接把最初要呈现给玩家的蛇的情况定义出来,即添加一定数量的坐标点进入mSnakeTrail中,使得在最初开始游戏时,有蛇可以进行自由移动。 蛇的移动 游戏中是通过触发来改变坐标(+1,-1)的方式来改蛇头的方向,包括后面的蛇的碰撞检测都要用到蛇头。 获取蛇的头部: Positionhead=mSnakeTrail.get(0); 蛇的新头部: PositionnewHead=newPosition(2,2); 通过设置整型变量mDirection以及mNextDirection来判断蛇下一步移动方向,然后改变蛇头的坐标,使蛇移动 switch(mDirection){ caseEAST: {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 android 贪吃 游戏 设计 开发 60600