2023年android创新实验报告.pdf





《2023年android创新实验报告.pdf》由会员分享,可在线阅读,更多相关《2023年android创新实验报告.pdf(66页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、项目编号了 海 工 彳 吴 枚4/孝Shanghai University of Engineering Science创新实验报告实验项目名称 基于A ndr。id手机操作系统的游戏软件开发学 生 姓 名 _ _ _ _ _ _ _ _ _ _ _ _ _ 石皓程樊峰辰_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _学 生 学 号 _ _ _ _ _ _ _ _ _/_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _所 在 学 院 _ _ _ _ _ _ _ _电子电气工程学院_ _ _ _ _ _ _
2、 _ _ _ _ _ _ _ _ _ _ _指 导 教 师 施一萍目录一、实验目的二、实验方案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.6 1蛇身、食物和墙的实现3.6 2 解决键盘事件3.6 3 Til eView类的设计3.6 4 S n a k e View 类的设计3.65 Re f r e shHan d 1 e r 类的设计3.7 程序调试与运营四
3、、实验结果和分析五、参考文献六、附录一代码清单七、附录二环境搭建和运营一.实验目的贪吃蛇游戏一款非常经典的手机游戏,由于它比较简朴有趣,无论老少都比较适合。贪吃蛇的设计对每一个Java语言设计者进行语言提高和进阶都是一个很好的锻炼机会。贪吃蛇游戏的设计比较复杂,它涉及面广、牵涉方面多,假如不好好考虑和设计,将难以成功开发出这个游戏。在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。因此,如何设计和开发好这个贪吃蛇游戏,对于提高Ja v a 开发水平和系统的设计能力有极大的帮助。在设计开发过程中,需要解决好各个类之间的
4、继承关系,还要解决各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。本项目在And r o i d 平台下,使用Java语言,And r oid开发技术开发一款界面和谐,功能齐全的贪吃蛇游戏。二.实验方案2.1总体设计思想本软件是针对贪吃蛇小游戏的JAVA程序,运用上、下、左、右方向键来改变蛇的运动方向,长按某个方向键后,蛇的运动速度会加快,在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运营游戏,在到达固定的分数后,游戏速度会加快。2.2 实验流程Java编程语言Andro i d软件的开发环境搭建(Eclipse开发软件、A n dr
5、o id SDK开发框架、Android D e velo p m e n t Too 1 开发环境)Androi d程序的框架结构游戏软件的开发2.3 实验环境实验地点在实训楼1号楼计算中心。计算中心具有较好的实验设备,拥有较高配置的PC机300台(In t e 1酷睿2 Q8300四核解决器、2 G内存),都可以接入校园网和Inter网,完全能满足该创新实验项目的需要。2.4 实验分工李 琦:环境的搭建和游戏的编译邵峻韬:截图和后期的制作三.实验过程3.1Andriod软件开发环境搭建采 用e c lip se开发工具浣在w i n d o w s 7下进行,基于安卓2.2操作系统。环境搭
6、建:1.JD K安装2.Eclips e 安装3.A n dr o i d SD K安装4.A D T安装创建AVD软件总体设计工程中涉及4个A c tivity,分别为S nake(主界面)、Game(游戏界面)、Hei p(游戏说明界面)、Aut h o rVi e w(作者信息界面),通过不同Activ i t y之间的转换实现不同界面之间的切换。S nak e(Activity)继承了 SnakeView类,Snak e Vi e w 类继承了 Ti 1 eVi e w 类。Tile View 类继承了 Vi e w 其实 Snak e的工程蛮简朴的,源文献就三个:Sn a ke.j
7、a v a S n akeVi e w.j a vaTileVi e w.javao Snake类是这个游戏的入口点,T i t leView类进行游戏的绘画,SnakeVi e w 类则是对游戏控制操作的解决。C o ordinal e,Refr eshH andler是 2 个辅助类,也 是 S n akeVi e w 类中的内部类。其中,C o o r di n ate 是一个点的坐标(x,y),R e freshHandle r 将 RefreshHan d ler 对象绑定某个线程并给它发送消息。如下图:ViewActivity#onCreateO:void#onRestartO:v
8、oid#onStartO:void#onResumeO:void#onPauseO:void#onStopO:void#onDestroyO:void#onSavelnstanceStateO:voidZXSnakemSnakeView:SnakeVlewICICLE KEY:String=snake-vleW#onSizeChangedO.void#onDrawO:void onKeyDownO-void invalidate。:voidTileView#mTileSize:int#mXTileCount:Int#mYTileCount:int-mXOffset:int-mYOffset:i
9、nt-mTileGrid:intflO+resetTilesO:void+loadTileO:void+clearTHesO:void+setTileO:voidSnakeView-mRedrawHandler:RefreshHandler-initSnakeViewO-void-initNewGameQ:void-coordArrayUstToArray0:into+saveStateO:void、-coordArrayToArrayListO:void+restoreStateO:void+setTextViewO:void+setModeO i void-addRandomAppleO
10、void updateO void-updateWallsO:void-updateApplesO:void-updateSnakeQ:voidHandler dispatchMessageO:void+handleMessageO:void+hasMessageO:void+obtainMessageO:void postO:void removeMessageO:void+sendMessageO:void+sendMessageDelayedO:void3RefreshHandler+sleepQ:void图 3.13.2模块划分从面向对象程序设计的角度,本项目总体地可以分为游戏界面模块
11、、数据存储模块和控制模块。如下图所示:余 竹 蛇 游 曲图M 2游我放体模块3.3游戏主界面模块游戏界面主框架重要涉及游戏图形区域界面、游戏的开始按钮、暂停按钮、游戏的退出按钮。游戏界面主框架的重要结构图如图3.3所示。阅Q Q淤护土里而3.4 游戏控制模块游戏控制模块重要通过手机键盘上的按钮来控制游戏的开始、游戏的暂停、游戏的退出这三个功能以及控制游戏分数变化。在这个模块中,需要给各个按钮添加响应事件代码,来对上述的功能加以进一步的实现。游戏控制模块的重要框架如图3.4所示。图3.4 游戏控制模块框架3.5模块实现原理3.5.1 游戏界面模块实现1 .实现游戏背景本游戏采用Acti v it
12、y作为游戏背景的载体,在 Android中一个 Activi t y 就相称于windows中的一个窗口,Activity上可以放置许多类型的控件。一个activ ity重要有三个状态:当在屏幕前台时(位于当前任务堆栈的顶部),它是活跃或运营的状态。它就是相应用户操作的a c tiv ity。当它失去焦点但仍然对用户可见时,它处在暂停状态。即是:在它之上有此外一个activity。这个a ctivity也许是透明的,或者未能完全遮蔽全屏,所以被暂停的acti v ity仍对用户可见。暂停的activity仍然是存活状态(它保存着所有的状态和成员信息并连接至窗口管理器),但当系统处在极低内存的情
13、况下,仍然可以杀死这个activ i ty0假如它完全被另一个a c t iv i ty 覆盖是,它处在停止状态。它仍然保存所有的状态和成员信息。然而它不在为用户可见,所以它的窗口将被隐藏,假如其它地方需要内存,则系统经常会杀死这个a c tivityo假如一个a c tivi t y 处在暂停或停止状态,系统可以通过规定它结束(调用它的 f i nish()方法)或直接杀死它的进程来将它驱出内存。当它再次为用户可见的时候,它只能完全重新启动并恢复至以前的状态。当 一 个ac t ivity从这个状态转变到另一个状态时,它 被以下列prot e c t e d方法所告知:v oi d o nC
14、r e ate(Bundle s ave d I nst a nceS t ate)、void o n S t art()、v o id o n Re s tart()、void onResume()、vo id on Pa u se()、vo id o n Stop()、v oid onDes t r oy()2.实现蛇的身体蛇可以看做是一个个节点组成的,因此可以用一个链表来存储蛇身的元素,在画蛇时遍历这个链表讲里面的元素一一画出,这样就实现了一条蛇.3.实现蛇的移动用一个timer(定期器)来不断地刷新游戏画面,每刷新一次就再蛇头的前面(链表的尾部)增长一个新元素,同时把蛇尾的一个元素删掉
15、,这样从视觉上看起来就实现了蛇的移动.4.实现蛇吃食物。蛇移动的过程中假如蛇头的坐标与食物出现的坐标重合了,那么就在蛇头的位置增长一个元素同时不删除蛇尾的最后一个元素,这样蛇每迟到一个食物。身体就会变长一截.3.5.2游戏控制模块实现1.实现操作蛇的移动方向在An droid系统中,手机上的每个按钮都会有一个相应的键值跟它相应,所在可以给相应的按钮设立监听器0 n Cli c k L i s te n er,监听器是一个接口,该接口中有一个方法onCli c k(View v)。当按钮被点击的时候系统会自动调用该监听器 的onClick(View v)方法。所以实现游戏控制的具体代码将被写到该
16、方法中。由于本游戏中不允许蛇向与蛇头相反的方向移动,所以当用户操作时需要判断用户操作的方向是不是跟规则冲突,若冲突则无视该操作,若不冲突则响应当操作,所以需要用一个变量来记录蛇头的当前方向。2.实现游戏暂停在A c tivity的生命周期中,有一个onPau s e()方法.该方法在Activity变得不可见的时候被系统自动调用.在玩游戏过程中,假如有来电或是其它事件中断,这时应当把当前状态保存。以便返回时,还可以继续玩游戏。这就使用。nSa v e Ins t an c eSta t e实现保存当前状态。3.实现游戏恢复Ac t ivity生命周期的onRe s um e()方法.该方法在A
17、ct i v ity从不可见的状态下变得可见时被系统自动调用.在用户接完电话或者在暂停状态下触摸屏幕后可以在该生命周期方法中对游戏进行恢复.4.实现游戏退出当一个Activity退出或者被调用fi ni sh()方法后,系统会调用其生命周期方法onDestroy().当用户退出游戏时,可以在这个方法中对资源进行释放.3.6游戏界面具体实现3.6.1蛇身、食物和墙的实现前面已经提过,蛇身的数据用一个链表来存储,具体我使用A rra y L ist来实现。蛇身的每个元素、食物和墙都是一个坐标对象,画这些东西的时候只需要把它们的坐标传给画的方法就行了。这里需要引进一个坐标类Coordin a te,
18、这是一个涉及两个参数,用于记录X轴和Y轴简朴类,其中涉及一个比较方法,该方法用于判断蛇头于食物或者墙是否重合.该类的代码如下:c l a s s C o o r d i n a t e p u b l i c i n t x;p u b l i c i n t y;p u b 1 i c C o o r d i n a t e (i n t n e w x,i n t n e w Y)x =n e w x;y =n e w Y;p u b l i c b o o l e a n e q u a l s (C o o r d i n a t e other)i f (xo t h e r.x&y
19、 =o t h e r,y)r e turn tr u e;)retu rn f a 1 s e;p u b lic S t r i n g t o S t r i n g ()retu rn ”C o o r d i n a t e:H+x +”,”+y)蛇身的初始长度我设立为5,new 5个C o o r dinat e的对象放入A r rayLi s t中。整个屏幕可以看做是有很多个网格组成的,而蛇就在这些网格中移动。用一个二维数组i n t mTi 1 eG r i d来存储网格的坐标,将蛇身、食物或者墙的坐标传到该数组中,onDraw方法按照该数组中的坐标将屏幕相应位置的网格填充成位
20、图。画蛇身、食物、墙的方法为:pu b l i e v o id o n D r a w (C a n v a s c a n v a s )su p e r.o n D r a w (c a n v a s );fo r (i n t x=0;x mXTile Cou n t;x+)f o r (in t y =0;y 0)c a n v a s .d r a w B i t m a p (m T i l e A r r a y m T i1 e G r i d x y ,mXO f fset+x *mTileS I ze,o m Yof f se t+y *mTil e S i ze,o
21、m P a i nt);3.6 .2 解决键盘事件使用V i e w 类的o n K e y D o w n 方法,该方法由系统监听调用。根据按键的值解决响应事件,该方法中解决了反向移动的问题。m D i r e c t i o n 为当前蛇头的方向,m Ne x t D i r e ct i o n 为按键相应的方向,按键按下后会先判断当前方向是否跟下一方向相反,若相反则不响应事件。具体代码如下:p u b lic b o o lean o n K e y D o w n (i n t k e y C o d e,K e y E v e n t m s g)(i f (k e y C o d
22、 e =K e y E v e n t.YCODE_DPAD_UP)i f (m M o d e =READY m M o d e =LOSE)i n i t N e w G a m e ();s e t M o d e (7?UNN I NG);u p d a t e ();r e tu r n(t r u e);)i f (m M o d e =PAUSE)s e t M o d e (RUN N I NG);u p d a t e ();re t urn(tr u e);)i f (m D i r e c t i o n !=S OUTH)m N e x t D i r e c t i
23、o n =NORTH;)r e t urn(tr u e);i f (keyC o de=KeyEvent.K E Yc ODE_DPA D_ DOWN)i f (mD i re c tio n !=NORTH)mNextD i r e c t i o n=S O UTH;)r etu rn (tr u e);i f (k eyCode=Ke y E ve n t.KEYCODE_ DPAD_LEFT)i f (m Direc t ion!=EAS T)mNext D i r e ct ion=WE S T;r etu rn (t r u e);)i f (keyCode=K ey E ven
24、t.KEYCODE_ D PAD_RIGHT)i f (m D i r ectio n !=WEST)m N extD irectio n=EA S T;r e t u rn(t r u e);re t ur n s uper.on Ke y D own(k e yC o d e,m sg);if(di r ec t ion!=currentDirecti o n)&!n ee d Update)/取出列表中的最后一个元素(蛇的头部)WormLi n k s 1 =(WormLink)wo r m.1i n t x=si.g etE n dX();int y=sl.g e tEn d Y();
25、/不同的运动方向坐标的改变也不同样switch(d ire c tio n)(ca s e UP:/当这段向上运动的时候if(c u rr e n t D irection!=DOWN)y-;n e edUpdate=tr u e;b reak;c a s e DOWN:/当这段向下运动的时候if(c urre n tDirec t ion!=UP)y+;nee d U p da t e=t r ue;b reak;case LEFT:/当这段向左运动的时候if(c urrentD i r e c tion!=R I GHT)x-;n e edU p date=tru e;bre a k;ca
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 android 创新 实验 报告

限制150内