安卓贪吃蛇游戏方案设计书.docx
- 文档编号:9679337
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:45
- 大小:989.04KB
安卓贪吃蛇游戏方案设计书.docx
《安卓贪吃蛇游戏方案设计书.docx》由会员分享,可在线阅读,更多相关《安卓贪吃蛇游戏方案设计书.docx(45页珍藏版)》请在冰豆网上搜索。
安卓贪吃蛇游戏方案设计书
实习实训手册
专业:
10嵌入式系统工程
实训名称:
Android贪吃蛇游戏设计
班级:
姓名:
_________________________
学号:
指导教师:
起止时间:
201年月日至201年月日
信息工程系
Android贪吃蛇游戏设计
Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。
早期由原名为"Android"的公司开发,谷歌在2005年收购"Android.Inc"后,继续对Android系统开发运营,它采用了软件堆层(softwarestack,又名软件叠层)的架构,主要分为三部分。
底层Linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Java编写。
1工程背景说明
针对当今游戏开发的流行趋势,手机游戏的设计已成为主流,随着计算机技术及硬件技术的不断发展,用户的需求量也越来越多,并且用户追求的效果也越来越好,在此形势下好的设计方法尤为重要,基于android系统的手机游戏设计方法简单且效率较高。
贪吃蛇游戏也是很多人热衷的游戏,用户不仅要求其界面设计精美,更希望操作简单,程序执行速度快。
Android支持使用Java作为编程语言来开发应用程序,而Android的Java开发方面从接口到功能,都有层出不穷的变化。
考虑到Java虚拟机的效率和资源占用,谷歌重新设计了Android的Java,以便能提高效率和减少资源占用,因而与J2ME等不同。
操作系统与应用程序的沟通桥梁,应用分为两层:
函数层(Library)和虚拟机(VirtualMachine)。
Android的中间层多以Java实现,并且采用特殊的Dalvik虚拟机(DalvikVirtualMachine)。
Dalvik虚拟机是一种“暂存器型态”(RegisterBased)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。
贪吃蛇游戏是一款老牌的手机游戏,同时也是一款比较需要耐心地游戏。
贪吃蛇游戏就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的食物,越吃越长。
只要蛇头碰到屏幕四周,或者碰到自己的身子,小蛇就立即毙命。
玩“贪吃蛇游戏”,难度最大的不是蛇长得很长的时候,而是开始的时候。
那时蛇身很短,看上去难度不大,却最容易死掉,因为把玩一条小蛇让人容易走神,失去耐心。
Android应用越来越广泛,开发Android游戏也渐渐成为市场的必须,本游戏的开发是基于Android1.5系统,采用eclipse编程实现。
2时间安排
消化资料、系统调查1天
系统分析、总体设计,实施计划5天
撰写报告 2天
演示、验收 1天
3具体要求
1、明确课程设计的目的和重要性,认真领会课程设计的题目,读懂课程设计指导书的要求,学会设计的基本方法与步骤,学会如何运用前修知识与收集、归纳相关资料解决具体问题的方法。
严格要求自己,要独立思考,按时、独立完成课程设计任务。
2、设计报告:
要求层次清楚、整洁规范、不得相互抄袭,凡正文内容有整段完全相同者一律以抄袭论处。
4设计与实现
具体实现过程分为以下3步:
工程框架、游戏类图设计、界面设计。
工程框架
新建一个Eclipse工程并命名为Snake,工程如下图所示:
图1.1Snake工程
工程中包括4个Activity,分别为Snake(主界面)、Game(游戏界面)、Help(游戏说明界面)、AuthorView(作者信息界面),通过不同Activity之间的转换实现不同界面之间的切换。
游戏主界面如下图所示:
图1.2游戏主界面
游戏类图设计
Game(Activity)继承了SnakeView类,SnakeView类继承了TileView类。
TileView类继承了View,如下图所示:
图1.3类图
TiltView的基类是View,包含了贪吃蛇游戏画面的各个设定参数,主要负责绘制游戏画面。
TileView类定义如下:
publicclassTileViewextendsView{
privatestaticfinalStringtag="yao"。
protectedstaticintmTileSize=20。
//方格的边长
protectedstaticintmXTileCount。
//X轴上方格的个数
protectedstaticintmYTileCount。
//Y轴上方格的个数
privatestaticintmXOffset。
//绘图时X轴上的起始坐标
privatestaticintmYOffset。
//绘图时Y轴上的起始坐标
privateBitmap[]mTileArray。
//位图数组
privateint[][]mTileGrid。
//映射整个游戏画面的数组
privatefinalPaintmPaint=newPaint()。
//画笔
publicTileView(Contextcontext,AttributeSetattrs){
super(context,attrs)。
Log.i(tag,"TileViewConstructor")。
Log.i(tag,"mTileSize="+mTileSize)。
}
//重置位图数组的长度
publicvoidresetTiles(inttilecount){
mTileArray=newBitmap[tilecount]。
}
@Override
//适应各种分辨率的屏幕,当改变屏幕大小尺寸时,同时修改tile的相关计数指标
protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){
Log.i(tag,"onSizeChanged,"+"w="+w+"h="+h+"oldw="+oldw+"oldh="+oldh)。
mXTileCount=(int)Math.floor(w/mTileSize)。
mYTileCount=(int)Math.floor(h/mTileSize)。
Log.i(tag,"mXTileCount="+mXTileCount)。
Log.i(tag,"mYTileCount="+mYTileCount)。
mXOffset=((w-(mTileSize*mXTileCount))/2)。
mYOffset=((h-(mTileSize*mYTileCount))/2)。
Log.i(tag,"mXOffset="+mXOffset)。
Log.i(tag,"mYOffset="+mYOffset)。
mTileGrid=newint[mXTileCount][mYTileCount]。
clearTiles()。
}
//这里做了一个Drawable到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。
}
//清空图形显示
publicvoidclearTiles(){
Log.i(tag,"TileView.clearTiles")。
for(intx=0。
x x++){ for(inty=0。 y y++){ setTile(0,x,y)。 } } } //在相应的坐标位置绘制相应的砖块 publicvoidsetTile(inttileindex,intx,inty){ mTileGrid[x][y]=tileindex。 } //onDraw @Override //将直接操作的画布绘制到手机界面上 publicvoidonDraw(Canvascanvas){ Log.i(tag,"onDraw")。 super.onDraw(canvas)。 Bitmapbmp。 floatleft。 floattop。 for(intx=0。 x x++){ for(inty=0。 y y++){ if(mTileGrid[x][y]>0){ bmp=mTileArray[mTileGrid[x][y]]。 left=x*mTileSize+mXOffset。 top=y*mTileSize+mYOffset。 canvas.drawBitmap(bmp,left,top,mPaint)。 } } } } } SnakeView类定义了游戏运行时的画面改变及蛇体和果子的更新方法。 首先用Handler机制实现定时刷新,代码如下: classRefreshHandlerextendsHandler{ //获取消息并处理 @Override publicvoidhandleMessage(Messagemsg){ SnakeView.this.update()。 SnakeView.this.invalidate()。 //刷新view为基类的界面 Log.i(tag,"handleMessage|ThreadName="+Thread.currentThread().getName())。 } //定时发送消息给UI线程,以此达到更新效果 publicvoidsleep(longdelayMillis){ this.removeMessages(0)。 //清空消息队列,Handler进入对新消息的等待 Log.i(tag,"sleep|ThreadName="+Thread.currentThread().getName())。 //定时发送新消息,激活handler sendMessageDelayed(obtainMessage(0),delayMillis)。 } }。 定义SnakeView()函数初始化游戏,代码如下: publicSnakeView(Contextcontext,AttributeSetattrs){ super(context,attrs)。 Log.i(tag,"SnakeViewConstructor")。 initSnakeView()。 //构造函数中,初始化游戏 } 定义initSnakeView()初始化SnakeView类,代码如下: privatevoidinitSnakeView(){ Log.e(tag,"initSnakeView")。 //设置焦点,由于存在文字界面和游戏界面的跳转。 这个focus是不可或缺的。 setFocusable(true)。 //取得资源中的图片,加载到砖块字典中。 Resourcesr=this.getContext().getResources()。 resetTiles(4)。 loadTile(RED_STAR,r.getDrawable(R.drawable.redstar))。 loadTile(YELLOW_STAR,r.getDrawable(R.drawable.yellowstar))。 loadTile(GREEN_STAR,r.getDrawable(R.drawable.greenstar))。 } 此外还定义了updateWalls()、updateApples()、updateSnake()绘制墙、果子、蛇,以及更新画面函数、保存位置坐标函数等,具体代码请详见目录。 界面设计 界面设计包括游戏主界面(Snake)、作者信息界面、游戏说明界面、游戏界面的设计。 界面的设计采用的是xml文档形式,在xml文档中规划好界面布局布局后,分别在java文件中声明。 主界面设计: 主界面包括一个TextView、一个imagebutton、三个button,其main.xml文档如下: xmlversion="1.0"encoding="utf-8"? > android="" android: layout_width="fill_parent" android: layout_height="fill_parent"android: background="@drawable/icon"> android: orientation="vertical" android: layout_width="fill_parent" android: layout_height="fill_parent"android: gravity="center"> textColor="#ff3456ff"android: textSize="40sp"android: layout_height="wrap_content"android: visibility="visible"android: text="Snake"android: layout_width="wrap_content"android: id="@+id/text"android: gravity="center_horizontal"> android: visibility="visible" android: layout_width="wrap_content" android: layout_height="wrap_content" android: id="@+id/ImageButton1"> 其对应的Snake.java文件如下: publicclassSnakeextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState)。 setContentView(R.layout.main)。 initialstart()。 //初始化 } publicvoidinitialstart(){ ImageButtonimageButton=(ImageButton)this.findViewById(R.id.ImageButton1)。 Buttonbutton1=(Button)this.findViewById(R.id.Button1)。 Buttonbutton3=(Button)this.findViewById(R.id.Button3)。 Buttonbutton5=(Button)this.findViewById(R.id.Button5)。 button1.setText("作者信息")。 button3.setText("退出")。 button5.setText("游戏说明")。 imageButton.setImageResource(R.drawable.icon1)。 //按钮注册到各自的监听器 imageButton.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewview){ Intentintent=newIntent()。 intent.setClass(Snake.this,Game.class)。 startActivity(intent)。 //跳转到Game界面 Snake.this.finish()。 } })。 button1.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewview){ //setContentView(R.layout.author)。 Intentintent=newIntent()。 intent.setClass(Snake.this,AuthorView.class)。 startActivity(intent)。 //跳转到作者信息界面 Snake.this.finish()。 //注销跳转之前的界面 } })。 button3.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewview){ Snake.this.finish()。 //退出应用程序 } })。 button5.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewview){ Intentintent=newIntent()。 intent.setClass(Snake.this,Help.class)。 startActivity(intent)。 //跳转到游戏说明界面 Snake.this.finish()。 } })。 } } 游戏界面设计: 游戏界面包括一个button,一个my.game.snake.SnakeView,其game.xml文档如下: xmlversion="1.0"encoding="utf-8"? > android="" android: layout_width="fill_parent" android: layout_height="fill_parent"> android: id="@+id/snake" android: layout_width="fill_parent" android: layout_height="fill_parent" android: background="@drawable/background"/> layout_height="fill_parent"android: id="@+id/relativeLayout1"android: layout_width="fill_parent"> layout_width="wrap_content"android: textColor="#ff8888ff"android: textSize="24sp"android: visibility="visible"android: text="开始"android: layout_centerInParent="true"android: id="@+id/text"android: layout_height="wrap_content"android: gravity="center_horizontal"> layout_width="wrap_content"android: text="返回"android: id="@+id/button4"android: layout_height="wrap_content"android: layout_alignParentBottom="true"> 相对应的Game.java文件如下: publicclassGameextendsActivity{ //定义游戏参数 privateSnakeViewmSnakeView。 privatestaticStringICICLE_KEY="snake-view"。 privateintmMode=READY。 publicstaticfinalintPAUSE=0。 publicstaticfinalintREADY=1。 publicstaticfinalintRUNNING=2。 publicstaticfinalintLOSE=3。 @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState)。 setContentView(R.layout.game)。 mSnakeView=(SnakeView)findViewById(R.id.snake)。 //设置界面背景 mSnakeView.setBackgroundResource(R.drawable.background)。 TextVie
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪吃 游戏 方案设计
![提示](https://static.bdocx.com/images/bang_tan.gif)