您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > android创新实验报告
项目编号创新实验报告实验项目名称基于Android手机操作系统的游戏软件开发学生姓名石皓程樊峰辰学生学号021112218/021112230所在学院电子电气工程学院指导教师施一萍目录一、实验目的二、实验方案2.1总体设计思想2.2实验流程(步骤)2.3实验环境2.4实验分工三、实验过程3.1Andriod软件开发环境搭建3.2模块划分3.3游戏主界面模块3.4游戏控制模块3.5模块实现原理3.51游戏界面模块实现3.52游戏控制模块实现3.6游戏界面具体实现3.61蛇身、食物和墙的实现3.62处理键盘事件3.63TileView类的设计3.64SnakeView类的设计3.65RefreshHandler类的设计3.7程序调试与运行四、实验结果和分析五、参考文献六、附录一代码清单七、附录二环境搭建和运行一.实验目的贪吃蛇游戏一款非常经典的手机游戏,因为它比较简单有趣,无论老少都比较适合。贪吃蛇的设计对每一个Java语言设计者进行语言提高和进阶都是一个很好的锻炼机会。贪吃蛇游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。因此,如何设计和开发好这个贪吃蛇游戏,对于提高Java开发水平和系统的设计能力有极大的帮助。在设计开发过程中,需要处理好各个类之间的继承关系,还要处理各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。本项目在Android平台下,使用Java语言,Android开发技术开发一款界面友好,功能齐全的贪吃蛇游戏。二.实验方案2.1总体设计思想本软件是针对贪吃蛇小游戏的JAVA程序,利用上、下、左、右方向键来改变蛇的运动方向,长按某个方向键后,蛇的运动速度会加快,在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行游戏,在到达固定的分数后,游戏速度会加快。2.2实验流程Java编程语言Android软件的开发环境搭建(Eclipse开发软件、AndroidSDK开发框架、AndroidDevelopmentTool开发环境)Android程序的框架结构游戏软件的开发2.3实验环境实验地点在实训楼1号楼计算中心。计算中心具有较好的实验设备,拥有较高配置的PC机300台(Intel酷睿2Q8300四核处理器、2G内存),都可以接入校园网和Inter网,完全能满足该创新实验项目的需要。2.4实验分工李琦:环境的搭建和游戏的编译邵彧韬:截图和后期的制作三.实验过程3.1Andriod软件开发环境搭建采用eclipse开发工具在windows7下进行,基于安卓2.2操作系统。环境搭建:1.JDK安装2.Eclipse安装3.AndroidSDK安装4.ADT安装创建AVD软件总体设计工程中包括4个Activity,分别为Snake(主界面)、Game(游戏界面)、Help(游戏说明界面)、AuthorView(作者信息界面),通过不同Activity之间的转换实现不同界面之间的切换。Snake(Activity)继承了SnakeView类,SnakeView类继承了TileView类。TileView类继承了View其实Snake的工程蛮简单的,源文件就三个:Snake.javaSnakeView.javaTileView.java。Snake类是这个游戏的入口点,TitleView类进行游戏的绘画,SnakeView类则是对游戏控制操作的处理。Coordinate,RefreshHandler是2个辅助类,也是SnakeView类中的内部类。其中,Coordinate是一个点的坐标(x,y),RefreshHandler将RefreshHandler对象绑定某个线程并给它发送消息。如下图:图3.13.2模块划分从面向对象程序设计的角度,本项目总体地可以分为游戏界面模块、数据存储模块和控制模块。如下图所示:3.3游戏主界面模块游戏界面主框架主要包括游戏图形区域界面、游戏的开始按钮、暂停按钮、游戏的退出按钮。游戏界面主框架的主要结构图如图3.3所示。3.4游戏控制模块游戏控制模块主要通过手机键盘上的按钮来控制游戏的开始、游戏的暂停、游戏的退出这三个功能以及控制游戏分数变化。在这个模块中,需要给各个按钮添加响应事件代码,来对上述的功能加以进一步的实现。游戏控制模块的主要框架如图3.4所示。贪吃蛇游戏游戏主界面模块游戏控制模块图3.2游戏总体模块游戏的主界面架游戏图形区域界面(即游戏画布)游戏控制按钮界面图3.3游戏主界面游戏数据存储模块3.5模块实现原理3.5.1游戏界面模块实现1.实现游戏背景本游戏采用Activity作为游戏背景的载体,在Android中一个Activity就相当于windows中的一个窗口,Activity上可以放置许多类型的控件。一个activity主要有三个状态:当在屏幕前台时(位于当前任务堆栈的顶部),它是活跃或运行的状态。它就是相应用户操作的activity。当它失去焦点但仍然对用户可见时,它处于暂停状态。即是:在它之上有另外一个activity。这个activity也许是透明的,或者未能完全遮蔽全屏,所以被暂停的activity仍对用户可见。暂停的activity仍然是存活状态(它保留着所有的状态和成员信息并连接至窗口管理器),但当系统处于极低内存的情况下,仍然可以杀死这个activity。如果它完全被另一个activity覆盖是,它处于停止状态。它仍然保留所有的状态和成员信息。然而它不在为用户可见,所以它的窗口将被隐藏,如果其它地方需要内存,则系统经常会杀死这个activity。如果一个activity处于暂停或停止状态,系统可以通过要求它结束(调用它的finish()方法)或直接杀死它的进程来将它驱出内存。当它再次为用户可见的时候,它只能完全重新启动并恢复至以前的状态。当一个activity从这个状态转变到另一个状态时,它被以下列protected方法游戏控制模块游戏的移动速度功能能游戏的暂停功能游戏的重新开始图3.4游戏控制模块框架所通知:voidonCreate(BundlesavedInstanceState)、voidonStart()、voidonRestart()、voidonResume()、voidonPause()、voidonStop()、voidonDestroy()2.实现蛇的身体蛇可以看做是一个个节点组成的,因此可以用一个链表来存储蛇身的元素,在画蛇时遍历这个链表讲里面的元素一一画出,这样就实现了一条蛇.3.实现蛇的移动用一个timer(定时器)来不断地刷新游戏画面,每刷新一次就再蛇头的前面(链表的尾部)增加一个新元素,同时把蛇尾的一个元素删掉,这样从视觉上看起来就实现了蛇的移动.4.实现蛇吃食物蛇移动的过程中如果蛇头的坐标与食物出现的坐标重合了,那么就在蛇头的位置增加一个元素同时不删除蛇尾的最后一个元素,这样蛇每迟到一个食物身体就会变长一截.3.5.2游戏控制模块实现1.实现操作蛇的移动方向在Android系统中,手机上的每个按钮都会有一个对应的键值跟它对应,所在可以给对应的按钮设置监听器OnClickListener,监听器是一个接口,该接口中有一个方法onClick(Viewv)。当按钮被点击的时候系统会自动调用该监听器的onClick(Viewv)方法。所以实现游戏控制的具体代码将被写到该方法中。因为本游戏中不允许蛇向与蛇头相反的方向移动,所以当用户操作时需要判断用户操作的方向是不是跟规则冲突,若冲突则无视该操作,若不冲突则响应该操作,所以需要用一个变量来记录蛇头的当前方向。2.实现游戏暂停在Activity的生命周期中,有一个onPause()方法.该方法在Activity变得不可见的时候被系统自动调用.在玩游戏过程中,如果有来电或是其它事件中断,这时应该把当前状态保存。以便返回时,还可以继续玩游戏。这就使用onSaveInstanceState实现保存当前状态。3.实现游戏恢复Activity生命周期的onResume()方法.该方法在Activity从不可见的状态下变得可见时被系统自动调用.在用户接完电话或者在暂停状态下触摸屏幕后可以在该生命周期方法中对游戏进行恢复.4.实现游戏退出当一个Activity退出或者被调用finish()方法后,系统会调用其生命周期方法onDestroy().当用户退出游戏时,可以在这个方法中对资源进行释放.3.6游戏界面具体实现3.6.1蛇身、食物和墙的实现前面已经提过,蛇身的数据用一个链表来存储,具体我使用ArrayList来实现。蛇身的每个元素、食物和墙都是一个坐标对象,画这些东西的时候只需要把它们的坐标传给画的方法就行了。这里需要引进一个坐标类Coordinate,这是一个包括两个参数,用于记录X轴和Y轴简单类,其中包括一个比较方法,该方法用于判断蛇头于食物或者墙是否重合.该类的代码如下:classCoordinate{publicintx;publicinty;publicCoordinate(intnewX,intnewY){x=newX;y=newY;}publicbooleanequals(Coordinateother){if(x==other.x&&y==other.y){returntrue;}returnfalse;}publicStringtoString(){returnCoordinate:[+x+,+y+];}}蛇身的初始长度我设置为5,new5个Coordinate的对象放入ArrayList中。整个屏幕可以看做是有很多个网格组成的,而蛇就在这些网格中移动。用一个二维数组int[][]mTileGrid来存储网格的坐标,将蛇身、食物或者墙的坐标传到该数组中,onDraw方法按照该数组中的坐标将屏幕相应位置的网格填充成位图。画蛇身、食物、墙的方法为:publicvoidonDraw(Canvascanvas){super.onDraw(canvas);for(intx=0;xmXTileCount;x++){for(inty=0;ymYTileCount;y++){if(mTileGrid[x][y]0){canvas.drawBitmap(mTileArray[mTileGrid[x][y]],mXOffset+x*mTileSize,mYOffset+y*mTileSize,mPaint);}}}}3.6.2处理键盘事件使用View类的onKeyDown方法,该方法由系统监听调用。根据按键的值处理响应事件,该方法中解决了反向移动的问题。mDirection为当前蛇头的方向,mNextDirection为按键对应的方向,按键按下后会先判断当前方向是否跟下一方向相反,若相反则不响应事件。具体代码如下:publicbooleanonKeyDown(intkeyCode,KeyEventmsg){if(keyCode==KeyEvent.KEYCODE_DPAD_UP){if(mMode==READY|mMode==LOSE){initNewGame();setMode(RUNNING);update();return(true);}if(mMode==PAUSE){setMode(RUNNING);update();return(true);}if(mDirection!=SOUTH){mNextDirection=NORTH;}return(true);}if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN){if(mDirection!=NORTH){mNextDirection=SOUTH;}return(true);}if(keyCode==KeyEvent.KEYCODE_DPAD_LEFT){if(mDirectio
本文标题:android创新实验报告
链接地址:https://www.777doc.com/doc-450636 .html