您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 安卓贪吃蛇游戏设计111111111111
武汉轻工大学数学与计算机学院专业:网络工程题目:贪吃蛇游戏设计班级:1202姓名:吴天亮学号:1205110121指导教师:袁操2015.10.28Android贪吃蛇游戏设计游戏简介:贪吃蛇游戏是一款老牌的手机游戏,同时也是一款比较需要耐心地游戏。贪吃蛇游戏就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的食物,越吃越长。只要蛇头碰到屏幕四周,或者碰到自己的身子,小蛇就立即毙命。玩“贪吃蛇游戏”,难度最大的不是蛇长得很长的时候,而是开始的时候。那时蛇身很短,看上去难度不大,却最容易死掉,因为把玩一条小蛇让人容易走神,失去耐心。Android应用越来越广泛,开发Android游戏也渐渐成为市场的必须,本游戏的开发是基于Android1.5系统,采用eclipse编程实现。Snake工程工程中包括4个Activity,分别为Snake(主界面)、Game(游戏界面)、Help(游戏说明界面)、AuthorView(作者信息界面),通过不同Activity之间的转换实现不同界面之间的切换。游戏主界面如下图所示:图1.2游戏主界面○2游戏类图设计Game(Activity)继承了SnakeView类,SnakeView类继承了TileView类。TileView类继承了View,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;xmXTileCount;x++){for(inty=0;ymYTileCount;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;xmXTileCount;x++){for(inty=0;ymYTileCount;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{//获取消息并处理@OverridepublicvoidhandleMessage(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());//定时发送新消息,激活handlersendMessageDelayed(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()绘制墙、果子、蛇,以及更新画面函数、保存位置坐标函数等,具体代码请详见目录。○3界面设计界面设计包括游戏主界面(Snake)、作者信息界面、游戏说明界面、游戏界面的设计。界面的设计采用的是xml文档形式,在xml文档中规划好界面布局布局后,分别在java文件中声明。主界面设计:主界面包括一个TextView、一个imagebutton、三个button,其main.xml文档如下:?xmlversion=1.0encoding=utf-8?AbsoluteLayoutxmlns:android=:layout_width=fill_parentandroid:layout_height=fill_parentandroid:background=@drawable/iconLinearLayoutandroid:orientation=verticalandroid:layout_width=fill_parentandroid:layout_height=fill_parentandroid:gravity=centerTextViewandroid:textColor=#ff3456ffandroid:textSize=40spandroid:layout_height=wrap_contentandroid:visibility=visibleandroid:text=Snakeandroid:layout_width=wrap_contentandroid:id=@+id/textandroid:gravity=center_horizontal/TextViewImageButtonandroid:visibility=visibleandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:id=@+id/ImageButton1/ImageButtonButtonandroid:id=@+id/Button1android:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:visibility=visible/ButtonButtonandroid:id=@+id/Button5android:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:visibility=visible/ButtonButtonandroid:id=@+id/Button3android:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:visibility=visible/Button/LinearLayout/AbsoluteLayout其对应的Snake.java文件如下:publ
本文标题:安卓贪吃蛇游戏设计111111111111
链接地址:https://www.777doc.com/doc-4944868 .html