2022年智能移动终端应用开发设计报告Android-贪吃蛇终版 .pdf
XX 学院智能移动终端应用开发设计报告(20XX/20XX学年第 XX 学期)题目:基于 Android 系统的贪吃蛇游戏专业:小组成员:设计成绩:年月日名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 20 页 -1 摘要Android 是基于 Linux 开放性内核的操作系统,是Google 公司在 2007年 11月 5 日公布的手机操作系统。早期由原名为 Android的公司开发,谷歌在 2005年收购 Android.Inc 后,继续 对 Android 系统开发运营,它采用了软件堆层(software stack,又名软件叠层)的架构,主要分为三部分。底层Linux 内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Java编写。1 项目背景说明针对当今游戏开发的流行趋势,手机游戏的设计已成为主流,随着计算机技术及硬件技术的不断发展,用户的需求量也越来越多,并且用户追求的效果也越来越好,在此形势下好的设计方法尤为重要,基于 android 系统的手机游戏设计方法简单且效率较高。贪吃蛇游戏也是很多人热衷的游戏,用户不仅要求其界面设计精美,更希望操作简单,程序执行速度快。Android 支持使用 Java 作为编程语言来开发应用程序,而Android 的 Java开发方面从接口到功能,都有层出不穷的变化。考虑到Java 虚拟机的效率和资源占用,谷歌重新设计了Android 的 Java,以便能提高效率和减少资源占用,因而与 J2ME等不同。操作系统与应用程序的沟通桥梁,应用分为两层:函数层(Library)和虚拟机(Virtual Machine)。Android 的中间层多以 Java 实现,并且采用特殊的Dalvik 虚拟机(Dalvik Virtual Machine)。Dalvik虚拟机是一种“暂存器型态”(Register Based)的 Java 虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。贪吃蛇游戏是一款老牌的手机游戏,同时也是一款比较需要耐心地游戏。贪吃蛇游戏就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的食物,越吃越长。只要蛇头碰到屏幕四周,或者碰到自己的身子,小蛇就立即毙命。“贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本文基于Java技术和 android 开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。整个游戏程序分为三个功能模块,五个类模块,实现了游戏的开始、暂停、结束。通过本游戏的开发,达到学习 android 平台操作技术和熟悉软件开发流程的目的。2 项目概述名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 20 页 -2 2.1 设计的目的与意义贪吃蛇游戏是一款非常经典的手机游戏,贪吃蛇游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。因此,在设计开发过程中,需要处理好各个类之间间的逻辑依赖关系和数据通信关系。正是因为如此,本次设计的目的在于学习Java 程序设计基本技术,学习用android开发 Java 程序的相关技术,熟悉游戏“贪吃蛇”的需求,熟悉项目开发的完整过程。学会怎样进行一个项目的需求分析、概要设计、详细设计等软件开发过程,熟练地掌握Java 程序设计的基本技术和方法,熟练地掌握android环境的使用方法,培养初步的项目分析能力和程序设计能力。2.2 设计的主要内容贪吃蛇游戏设计与实现,主要分为以下三个模块:游戏主界面模块、游戏控制模块和游戏菜单模块。在此只实现游戏的游戏主界面模块、游戏控制模块和游戏菜单模块,并且只是实现开始、暂停、退出等最基本简单的功能。本次设计要达到的目标分别从以下模块进行阐述:(1)游戏菜单模块:这个模块主要是为进入游戏做准备,是进入游戏的第一步,提供“开始游戏”“游戏帮助”“退出游戏”等按钮,通过帮助按钮简单介绍游戏规则。(2)游戏主界面模块:游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏分数以及关卡的显示更新界面、提示退出游戏的快捷方式,游戏开始按钮、暂停游戏按钮以及退出游戏按钮。从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。(3)游戏控制模块:这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停、退出,移动,加速等功能。为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。2.3 设计实现的主要功能名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 20 页 -3 本软件在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。(1)游戏主界面模块:主要包括游戏图形区域界面、游戏开始按钮、暂停游戏按钮、关闭按钮。游戏的主界面应该力求美观,爽心悦目。(2)游戏控制模块:主要完成控制游戏的开始、暂停、退出等功能,这部分应该做到易懂、易操作而且准确率高,不易出错。(3)游戏菜单模块:是进入游戏主界面的第一步,提供“游戏帮助”等功能。这部分使贪吃蛇游戏软件更加完善。3 游戏需求分析3.1 需求分析3.1.1用户的特点游戏开发成功后,最终用户为各个年龄段的人群,用户范围相当广泛。本游戏友好的用户界面,简单易学的按钮操作以及简单通俗的游戏规则,使广大的用户不需要专门进行培训,就可以立即学会如何使用。3.1.2功能需求贪吃蛇是一款经典的手机游戏,一条蛇在封闭围墙里,通过按键盘上下左右四个键控制蛇向上下左右四个方向移动,如果蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记1 分;若吃到奖励苹果,加两分;若吃到毒苹果,则减3分。在游戏过程中,如果长按住方向键不放,则蛇的移动速度加快,松开方向键,恢复原速。如果蛇在移动中撞到墙或障碍物或者蛇头撞倒自己身体,则游戏结束!(1)游戏主界面模块需求游戏界面主框架主要包括游戏图形区域界面、游戏开始按钮、游戏暂停按钮、关闭按钮。(2)游戏图形区域界面的需求游戏画布区主要应该包括游戏画布中贪吃蛇随机出现的位置,贪吃蛇重新出现的位置,事物随机出现的位置。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 20 页 -4(3)游戏菜单模块的需求游戏菜单模块主要是为进入游戏主界面做准备,提供“游戏帮助”介绍游戏规则。同时提供进入游戏和退出游戏等功能。3.1.3属性需求在可使用性方面,要求各个功能实现简单,操作方便,系统处理正确;整个系统恢复性能好,连接速度快,以确保系统可使用性好。另外,还要求系统的可扩展性、可维护性、可移植性良好。3.2 功能模块分析软件开发过程中的功能模块设计,主要解决实现该游戏需求的程序模块设计问题。包括如何把该游戏划分成若干个模块、决定各个模块之间的接口、模块之间传递的信息,以及模块结构的设计等。3.2.1 游戏功能本系统主要完成以下几方面的功能:游戏控制功能包括游戏的开始、暂停、退出。界面布局:其他辅助功能(如游戏帮助,游戏积分,游戏过关等)3.2.2 总设计模块的划分游戏总设计模块划分为游戏主要界面模块、游戏控制模块和游戏菜单模块。3.2.3 游戏主界面模块游戏主界面模块主要是指游戏的框图,其包括一下内容:1、游戏界面的边界,即游戏中的墙;2、游戏中蛇的构成,以及苹果的构成;3、游戏中障碍物的构成;4、游戏中分数显示以及关卡显示。3.2.4 游戏控制模块(1)游戏开始控制:我们的程序是使用上键开始游戏,启动游戏后会有一个初始菜单界面,我们点击“开始游戏”,弹出一句话“请按上键开始游戏”。游戏开始后蛇向下移动,然后由控制上下左右键来控制蛇的移动。在程序中我们重新建了一个activity来控制游戏的开始,使游戏的开始界面更美观。(2)游戏暂停控制:名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 20 页 -5 我们是使用 center 键来控制游戏的暂停的,这是一项人性化的设计,当玩家在游戏过程中突遇紧急情况时可以按center键暂停游戏,等玩家空闲后按center 键可以继续游戏。(3)游戏退出控制:在游戏的退出上我们的程序使用了多种方式来应对不同的情况,当玩家正在游戏中时,如想退出可以按“1”键,程序会自动跳转到初始菜单界面,在初始菜单界面点击“退出游戏”即可退出游戏。如果玩家在游戏中由于碰到墙或者咬到自己或者碰到障碍物而导致游戏结束的,游戏或自动弹出一个界面,里面有提示是继续游戏还是退出游戏,当点击“取消”时,游戏就会自动跳转到初始菜单,再点击“退出游戏”即可。4 设计与实现具体实现过程分为以下3 步:项目框架、游戏类图设计、界面设计。(1)项目框架:新建一个 Eclipse 工程并命名为 Snake,工程如下图所示:图 1 Snake 工程工程中包括 4 个 Activity,分别为 Snake(主界面)、Game(游戏界面)、Help(游戏说明界面)、AuthorView(作者信息界面),通过不同 Activity 之间的转换名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 20 页 -6 实现不同界面之间的切换。游戏主界面如下图所示:图 2 游戏主界面(2)游戏类图设计Game(Activity)继承了 SnakeView类,SnakeView类继承了 TileView类。TileView 类继承了 View。TiltView的基类是 View,包含了贪吃蛇游戏画面的各个设定参数,主要负责绘制游戏画面。TileView 类定义如下:publicclass TileView extends View privatestaticfinal String tag =yao;protectedstaticintmTileSize =20;/方格的边长protectedstaticintmXTileCount;/X 轴上方格的个数protectedstaticintmYTileCount;/Y 轴上方格的个数privatestaticintmXOffset;/绘图时 X轴上的起始坐标privatestaticintmYOffset;/绘图时 Y轴上的起始坐标private Bitmap mTileArray;/位图数组privateint mTileGrid;/映射整个游戏画面的数组privatefinal Paint mPaint=new Paint();/画笔public TileView(Context context,AttributeSet attrs)super(context,attrs);Log.i(tag,TileView Constructor);Log.i(tag,mTileSize=+mTileSize);名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 20 页 -7/重置位图数组的长度publicvoid resetTiles(int tilecount)mTileArray=new Bitmaptilecount;Override/适应各种分辨率的屏幕,当改变屏幕大小尺寸时,同时修改tile的相关计数指标protectedvoid onSizeChanged(int w,int h,int oldw,int oldh)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=new int mXTileCount mYTileCount;clearTiles();/这里做了一个 Drawable 到 bitmap 的转换publicvoid loadTile(int key,Drawable tile)Bitmap bitmap=Bitmap.createBitmap(mTileSize,mTileSize,Bitmap.Config.ARGB_8888);Canvas canvas=new Canvas(bitmap);tile.setBounds(0,0,mTileSize,mTileSize);tile.draw(canvas);mTileArraykey=bitmap;/清空图形显示publicvoid clearTiles()Log.i(tag,TileView.clearTiles);for (int x=0;x mXTileCount;x+)for (int y=0;y mYTileCount;y+)setTile(0,x,y);/在相应的坐标位置绘制相应的砖块publicvoid setTile(int tileindex,int x,int y)mTileGridxy=tileindex;/onDraw 名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 20 页 -8 Override/将直接操作的画布绘制到手机界面上publicvoid onDraw(Canvas canvas)Log.i(tag,onDraw);super.onDraw(canvas);Bitmap bmp;float left;float top;for (int x=0;x mXTileCount;x+)for (int y=0;y 0)bmp=mTileArraymTileGridxy;left=x*mTileSize +mXOffset;top=y*mTileSize +mYOffset;canvas.drawBitmap(bmp,left,top,mPaint);SnakeView类定义了游戏运行时的画面改变及蛇体和果子的更新方法。首先用 Handler 机制实现定时刷新,代码如下:class RefreshHandler extends Handler /获取消息并处理Override publicvoid handleMessage(Message msg)SnakeView.this.update();SnakeView.this.invalidate();/刷新view为基类的界面Log.i(tag,handleMessage|Thread Name=+Thread.currentThread().getName();/定时发送消息给 UI线程,以此达到更新效果publicvoid sleep(long delayMillis)this.removeMessages(0);/清空消息队列,Handler 进入对新消息的等待Log.i(tag,sleep|Thread Name=+Thread.currentThread().getName();/定时发送新消息,激活 handler sendMessageDelayed(obtainMessage(0),delayMillis);定义SnakeView()函数初始化游戏,代码如下:public SnakeView(Context context,AttributeSet attrs)名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 20 页 -9 super(context,attrs);Log.i(tag,SnakeView Constructor);initSnakeView();/构造函数中,初始化游戏 定义initSnakeView()初始化 SnakeView类,代码如下:privatevoid initSnakeView()Log.e(tag,initSnakeView);/设置焦点,由于存在文字界面和 游戏界面的跳转。这个 focus 是不可或缺的。setFocusable(true);/取得资源中的图片,加载到砖块字典中。Resources r=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 文档如下:其对应的 Snake.java 文件如下:publicclass Snake extends Activity /*Called when the activity is first created.*/Override publicvoid onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);initialstart();/初始化 publicvoid initialstart()ImageButton imageButton=(ImageButton)this.findViewById(R.id.ImageButton1);Button button1=(Button)this.findViewById(R.id.Button1);Button button3=(Button)this.findViewById(R.id.Button3);Button button5=(Button)this.findViewById(R.id.Button5);button1.setText(作者信息);button3.setText(退出);名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 20 页 -11 button5.setText(游戏说明);imageButton.setImageResource(R.drawable.icon1);/按钮注册到各自的监听器 imageButton.setOnClickListener(new View.OnClickListener()publicvoid onClick(View view)Intent intent=new Intent();intent.setClass(Snake.this,Game.class);startActivity(intent);/跳转到 Game 界面 Snake.this.finish(););button1.setOnClickListener(new View.OnClickListener()publicvoid onClick(View view)/setContentView(R.layout.author);Intent intent=new Intent();intent.setClass(Snake.this,AuthorView.class);startActivity(intent);/跳转到作者信息界面 Snake.this.finish();/注销跳转之前的界面 );button3.setOnClickListener(new View.OnClickListener()publicvoid onClick(View view)Snake.this.finish();/退出应用程序 );button5.setOnClickListener(new View.OnClickListener()publicvoid onClick(View view)Intent intent=new Intent();intent.setClass(Snake.this,Help.class);startActivity(intent);/跳转到游戏说明界面 Snake.this.finish(););游戏界面设计:游戏界面包括一个 button,一个 my.game.snake.SnakeView,其 game.xml 文档如下:But 相对应的 Game.java 文件如下:publicclass Game extends Activity/定义游戏参数private SnakeView mSnakeView;privatestatic String ICICLE_KEY =snake-view;privateint mMode=READY;publicstaticfinalintPAUSE =0;publicstaticfinalintREADY =1;publicstaticfinalintRUNNING=2;publicstaticfinalintLOSE =3;Override publicvoid onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.game);mSnakeView=(SnakeView)findViewById(R.id.snake);/设置界面背景 mSnakeView.setBackgroundResource(R.drawable.background);TextView tv=(TextView)findViewById(R.id.text);Button button4=(Button)this.findViewById(R.id.button4);/根据TextView状态判断是否开始游戏 mSnakeView.setStatusTextView(tv);if (savedInstanceState=null)mSnakeView.setMode(SnakeView.READY);else Bundle bundle=savedInstanceState.getBundle(ICICLE_KEY);if (bundle!=null)mSnakeView.restoreState(bundle);名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 20 页 -13 else mSnakeView.setMode(SnakeView.PAUSE);/按钮注册到监听器 button4.setOnClickListener(new View.OnClickListener()publicvoid onClick(View view)Intent intent=new Intent();intent.setClass(Game.this,Snake.class);startActivity(intent);Game.this.finish(););/设置键盘监听事件,若按下UP 键则开始游戏publicboolean onKeyDown(int keyCode,KeyEvent msg)if (keyCode=KeyEvent.KEYCODE_DPAD_UP)if (mMode=READY|mMode=LOSE)mSnakeView.initNewGame();mSnakeView.setMode(RUNNING);mSnakeView.update();return (true);returnsuper.onKeyDown(keyCode,msg);/判断游戏状态是否为暂停protectedvoid onPause()super.onPause();/Pause the game along with the activity mSnakeView.setMode(SnakeView.PAUSE);Override /保存事件状态publicvoid onSaveInstanceState(Bundle outState)outState.putBundle(ICICLE_KEY,mSnakeView.saveState();作者信息界面设计:此界面包括一个 TextView、一个 button,其 author.xml文档如下:名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 20 页 -14 相对应的 AuthorView.java 文件如下:publicclass AuthorView extends Activity Override publicvoid onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.author);Button button2=(Button)this.findViewById(R.id.Button2);/按钮注册到监听器button2.setOnClickListener(new View.OnClickListener()publicvoid onClick(View view)Intent intent=new Intent();intent.setClass(AuthorView.this,Snake.class);/跳转到主界面 startActivity(intent);/注销当前界面 AuthorView.this.finish(););游戏说明界面设计:此界面包括一个 TextView、一个 button,其 help.xml文档名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 20 页 -15 如下:相对应的 Help.java文件如下:publicclass Help extends Activity Override publicvoid onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.help);Button button6=(Button)this.findViewById(R.id.Button6);/按钮注册到监听器button6.setOnClickListener(new View.OnClickListener()publicvoid onClick(View view)Intent intent=new Intent();intent.setClass(Help.this,Snake.class);/跳转到主界面 startActivity(intent);/注销当前界面 Help.this.finish(););5项目演示名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 20 页 -16 程序运行效果图如下:图 3 进入 Snake 应用程序图 4 游戏主界面名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 20 页 -17 图 5 游戏运行界面图 6 游戏结束界面名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 20 页 -18 6 总结总的来说,这次参与设计贪吃蛇游戏收获很大,达到了实习锻炼的目的。本次实习培养了团队合作精神,自己的Java 语言设计能力得到了提高,体验了软件开发过程,培养了项目开发的分析能力和程序设计能力。首先,从玩游戏到设计游戏的角色转化,体验软件开发过程,培养了项目开发的分析能力。其次,培养了团队合作精神。整个程序开发过程中,小组成员团结合作,努力思考,认真讨论。可以说我们的程序开发小组,凝聚了友情,感受了温情,创造了激情。最后,最直接的收获就是在Android 平台上用 JAVA语言开发程序的能力。这是毕业找工作的一大资本,为从学校的理论学习过渡到工作中的实际操作奠定了基础。7 参考文献1 Google Android Developer Document.2007.11 2 张弈平Google Android SDK 开发范例大全.电子工业出版社3 王伟Android 中文开发文档4 美Ed BurnetteAndroid 基础教程(第三版).人民邮电出版社,2010 5 杨丰盛.Android应用开发揭秘.机械工业出版社,2010 6 李宁.Android开发权威指南.人民邮电出版社,2011 8 小组分工说明查阅整合相关资料,编写、测试游戏程序代码,完成课程报告。查阅整合相关资料,辅助编写、测试游戏程序。查找相关资料,提供设计思路,测试、调试程序。名师资料总结-精品资料欢迎下载-名师精心整理-第 19 页,共 20 页 -19 评语成绩指导教师(签字)年月日注:此表必须在同一页面。名师资料总结-精品资料欢迎下载-名师精心整理-第 20 页,共 20 页 -