智能移动终端应用开发设计报告Android

上传人:daj****de 文档编号:125855048 上传时间:2022-07-27 格式:DOCX 页数:21 大小:285.29KB
收藏 版权申诉 举报 下载
智能移动终端应用开发设计报告Android_第1页
第1页 / 共21页
智能移动终端应用开发设计报告Android_第2页
第2页 / 共21页
智能移动终端应用开发设计报告Android_第3页
第3页 / 共21页
资源描述:

《智能移动终端应用开发设计报告Android》由会员分享,可在线阅读,更多相关《智能移动终端应用开发设计报告Android(21页珍藏版)》请在装配图网上搜索。

1、XX 学院智能移动终端应用开发设计报告(20XX/20XX 学年第 XX 学期)题目:基于Android系统的贪吃蛇游戏专业:小组成员:设计成绩:年月日摘要Android 是基于 Linux 开放性内核的操作系统,是 Google 公司在 2007 年 11 月5日公布的手机操作系统。早期由原名为Android的公司开发,谷歌在2005 年收购Android.Inc后,继续对Android系统开发运营,它采用了软件堆层 (software stack,又名软件叠层)的架构,主要分为三部分。底层Linux内核只 提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Java编写。1 项目背景

2、说明针对当今游戏开发的流行趋势,手机游戏的设计已成为主流,随着计算机技 术及硬件技术的不断发展,用户的需求量也越来越多,并且用户追求的效果也越 来越好,在此形势下好的设计方法尤为重要,基于android系统的手机游戏设计 方法简单且效率较高。贪吃蛇游戏也是很多人热衷的游戏,用户不仅要求其界面 设计精美,更希望操作简单,程序执行速度快。Android支持使用Java作为编程语言来开发应用程序,而Android的Java 开发方面从接口到功能,都有层出不穷的变化。考虑到Java虚拟机的效率和资 源占用,谷歌重新设计了 Android的Java,以便能提高效率和减少资源占用, 因而与 J2ME 等不

3、同。 操作系统与应用程序的沟通桥梁,应用分为两层:函数层 (Library)和虚拟机(Virtual Machine)。Android 的中间层多以 Java 实现, 并且采用特殊的Dalvik虚拟机(Dalvik Virtual Machine)o Dalvik虚拟机是 一种“暂存器型态”(Register Based)的Java虚拟机,变量皆存放于暂存器中, 虚拟机的指令相对减少。贪吃蛇游戏是一款老牌的手机游戏,同时也是一款比较需要耐心地游戏。贪 吃蛇游戏就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的食物,越吃越 长。只要蛇头碰到屏幕四周,或者碰到自己的身子,小蛇就立即毙命。“贪吃蛇”

4、 游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本文基于 Java 技术和android开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪 吃蛇”游戏。整个游戏程序分为三个功能模块,五个类模块,实现了游戏的开始、 暂停、结束。通过本游戏的开发,达到学习android平台操作技术和熟悉软件开 发流程的目的。2 项目概述2.1 设计的目的与意义贪吃蛇游戏是一款非常经典的手机游戏,贪吃蛇游戏的设计比较复杂,它涉 及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。在 这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在 这个游戏的开发中,还要应用类的

5、继承机制以及一些设计模式。因此,在设计开 发过程中,需要处理好各个类之间间的逻辑依赖关系和数据通信关系。正是因为如此,本次设计的目的在于学习 Java 程序设计基本技术,学习用 android 开发 Java 程序的相关技术,熟悉游戏“贪吃蛇”的需求,熟悉项目开 发的完整过程。学会怎样进行一个项目的需求分析、概要设计、详细设计等软件 开发过程,熟练地掌握 Java 程序设计的基本技术和方法,熟练地掌握 android 环境的使用方法,培养初步的项目分析能力和程序设计能力。2.2 设计的主要内容贪吃蛇游戏设计与实现,主要分为以下三个模块:游戏主界面模块、游戏控 制模块和游戏菜单模块。在此只实现游

6、戏的游戏主界面模块、游戏控制模块和游 戏菜单模块,并且只是实现开始、暂停、退出等最基本简单的功能。本次设计要达到的目标分别从以下模块进行阐述:(1)游戏菜单模块:这个模块主要是为进入游戏做准备,是进入游戏的第一步,提供“开始游戏” “游戏帮助”“退出游戏”等按钮,通过帮助按钮简单介绍游戏规则。(2)游戏主界面模块:游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图 形区域界面、游戏分数以及关卡的显示更新界面、提示退出游戏的快捷方式,游 戏开始按钮、暂停游戏按钮以及退出游戏按钮。从很大程度上决定了玩家对游戏 的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。(3)游戏控制模块

7、:这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停、退出,移动, 加速等功能。为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操 作。2.3 设计实现的主要功能本软件在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的 过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。(1)游戏主界面模块:主要包括游戏图形区域界面、游戏开始按钮、暂停游戏按钮、关闭按钮。游 戏的主界面应该力求美观,爽心悦目。(2)游戏控制模块:主要完成控制游戏的开始、暂停、退出等功能,这部分应该做到易懂、易操 作而且准确率高,不易出错。(3)游戏菜单模块:是进入游戏主界面的第一步,提供“

8、游戏帮助”等功能。这部分使贪吃蛇游 戏软件更加完善。3 游戏需求分析3.1 需求分析3.1.1 用户的特点游戏开发成功后,最终用户为各个年龄段的人群,用户范围相当广泛。本游 戏友好的用户界面,简单易学的按钮操作以及简单通俗的游戏规则,使广大的用 户不需要专门进行培训,就可以立即学会如何使用。3.1.2 功能需求贪吃蛇是一款经典的手机游戏,一条蛇在封闭围墙里,通过按键盘上下左右 四个键控制蛇向上下左右四个方向移动,如果蛇头撞倒食物,则食物被吃掉,蛇 身体长一节,同时记 1 分;若吃到奖励苹果,加两分;若吃到毒苹果,则减 3 分。在游戏过程中,如果长按住方向键不放,则蛇的移动速度加快,松开方向键,

9、 恢复原速。如果蛇在移动中撞到墙或障碍物或者蛇头撞倒自己身体,则游戏结束!(1)游戏主界面模块需求游戏界面主框架主要包括游戏图形区域界面、游戏开始按钮、游戏暂停按钮、 关闭按钮。(2)游戏图形区域界面的需求游戏画布区主要应该包括游戏画布中贪吃蛇随机出现的位置,贪吃蛇重新出 现的位置,事物随机出现的位置。3) 游戏菜单模块的需求游戏菜单模块主要是为进入游戏主界面做准备,提供“游戏帮助”介绍游戏 规则。同时提供进入游戏和退出游戏等功能。3.1.3 属性需求在可使用性方面,要求各个功能实现简单,操作方便,系统处理正确;整个 系统恢复性能好,连接速度快,以确保系统可使用性好。另外,还要求系统的可 扩展

10、性、可维护性、可移植性良好。3.2 功能模块分析软件开发过程中的功能模块设计,主要解决实现该游戏需求的程序模块设计 问题。包括如何把该游戏划分成若干个模块、决定各个模块之间的接口、模块之 间传递的信息,以及模块结构的设计等。3.2.1 游戏功能本系统主要完成以下几方面的功能:游戏控制功能包括游戏的开始、 暂停、退出。界面布局:其他辅助功能(如游戏帮助,游戏积分,游戏过关等) 3.2.2 总设计模块的划分游戏总设计模块划分为游戏主要界面模块、游戏控制模块和游戏菜单模块。3.2.3 游戏主界面模块 游戏主界面模块主要是指游戏的框图,其包括一下内容:1、游戏界面的边界,即游戏中的墙;2、游戏中蛇的构

11、成,以及苹果的构成;3、游戏中障碍物的构成;4、游戏中分数显示以及关卡显示。3.2.4 游戏控制模块(1)游戏开始控制:我们的程序是使用上键开始游戏,启动游戏后会有一个初始菜单界面,我们 点击“开始游戏”,弹出一句话“请按上键开始游戏”。游戏开始后蛇向下移动, 然后由控制上下左右键来控制蛇的移动。 在程序中我们重新建了一个 activity 来控制游戏的开始,使游戏的开始界面更美观。(2)游戏暂停控制:我们是使用 center 键来控制游戏的暂停的,这是一项人性化的设计,当玩家 在游戏过程中突遇紧急情况时可以按 center 键暂停游戏,等玩家空闲后按 center 键可以继续游戏。(3)游戏

12、退出控制:在游戏的退出上我们的程序使用了多种方式来应对不同的情况,当玩家正在 游戏中时,如想退出可以按“1”键,程序会自动跳转到初始菜单界面,在初始 菜单界面点击“退出游戏”即可退出游戏。如果玩家在游戏中由于碰到墙或者咬 到自己或者碰到障碍物而导致游戏结束的,游戏或自动弹出一个界面,里面有提 示是继续游戏还是退出游戏,当点击“取消”时,游戏就会自动跳转到初始菜单, 再点击“退出游戏”即可。4 设计与实现具体实现过程分为以下 3 步:项目框架、游戏类图设计、界面设计。 项目框架:新建一个Eclipse工程并命名为Snake,工程如下图所示:- src白田m: y. game, snake+虹it

13、horVi ew. j ava十Game, j ava+ JJ Help, j avaI.+Snake, j avaSnakeVi ew. j avaI _ lhTileVi ew. j ava() -Lz gen Generatmd. Java FilesJ + Androi d 1.5assets-; res- dr aw abl e background, png backgrcuidl. png图1 Snak弘工程un理工程中包括4个Activity,分另别为Snoke(主界面)、Game(游戏界面)、Help(游戏说明界面)、AuthorView (作者信息界面),通过不同Activ

14、ity之间的转换i coni. pngaredstar. png5yell owe tar. png实现不同界面之间的切换。游戏主界面如下图所示:图 2 游戏主界面2)游戏类图设计Game (Activity)继承了 SnakeView 类,SnakeView 类继承了 TileView 类。TileView类继承了 View。TiltView的基类是View,包含了贪吃蛇游戏画面的各个设定参数,主要负 责绘制游戏画面。TileView类定义如下: public class T i l e V i ew extends View private static final protected s

15、tatic int protected static int protected static intString tag = yao; mTileSize = 20;/方格的边长 mXTileCount; /X轴上方格的个数 mYTileCount;/Y轴上方格的个数private static int mXOffset;/绘图时X轴上的起始坐标 private static int mYOffset;/绘图时Y轴上的起始坐标 priva te Bit map mTileArray;/位图数组private int mTileGrid;/映射整个游戏画面的数组 priva te final

16、Pai nt mPai nt 二 new Pai nt();/画笔public TileView(Context context, AttributeSet attrs) super (context, attrs);Log.i(tag, TileView Constructor);Log.i(tag, mTileSize= + mTileSize);/重置位图数组的长度public void resetTiles(int tilecount) mTileArray = new Bitmaptilecount;Override/适应各种分辨率的屏幕,当改变屏幕大小尺寸时,同时修改tile的相关

17、计 数指标protected void 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= +

18、 mYTileCount);mXOffset = (w - (mTileSize * mXTileCount) / 2); mYOffset = (h - (mTileSize * mYTileCount) / 2); Log.i(tag, mXOffset= + mXOffset);Log.i(tag, mYOffset= + mYOffset); mTileGrid = new intmXTileCountmYTileCount; clearTiles();/这里做了一个Drawable到bitmap的转换 public void loadTile(int key, Drawable ti

19、le) 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;/清空图形显示public void clearTiles() Log.i(tag, TileView.clearTiles);for (int x = 0; x mXTileCoun

20、t; x+) for (int y = 0; y mYTileCount; y+) setTile(0, x, y);/在相应的坐标位置绘制相应的砖块public void setTile(int tileindex,int x,int y) mTileGridxy = tileindex;/ onDrawOverride/将直接操作的画布绘制到手机界面上public void onDraw(Canvas canvas) Log.i(tag, onDraw); super.onDraw(canvas);Bitmap bmp;float left;float top;for (int x = 0

21、; 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 RefreshHandlerextends Handler / 获取消息并处理Overridepublic voi

22、d handleMessage(Message msg) SnakeView.this.update();SnakeView. this.invalidate();/刷新view为基类的界面 Log.i(tag, handleMessage|ThreadName=+Thread.currentThread().getName();/定时发送消息给UI线程,以此达到更新效果 public void sleep(long delayMillis) this.removeMessages(O); /清空消息队列,Handler进入对新消息 的等待Log.i(tag, sleep|Thread Nam

23、e=+Thread.currentThread().getName();/定时发送新消息,激活handler sendMessageDelayed(obtainMessage(0), delayMillis);定义SnakeView()函数初始化游戏,代码如下:public SnakeView(Context context, AttributeSet attrs) super(context, attrs);Log.i(tag, SnakeView Constructor);ini tSnakeView();/构造函数中,初始化游戏定义ini tSnakeView()初始化SnakeView

24、类,代码如下: private void 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.dr

25、awable.yellowstar); loadTile(GREEN_STAR, r.getDrawable(R.drawable.greenstar);此外还定义了updateWalls()、updateApples()、updateSnake()绘制墙、果子、 蛇,以及更新画面函数、保存位置坐标函数等,具体代码请详见目录。(3)界面设计界面设计包括游戏主界面(Snake)、作者信息界面、游戏说明界面、游戏界 面的设计。界面的设计采用的是xml文档形式,在xml文档中规划好界面布局布 局后,分别在 java 文件中声明。主界面设计:主界面包括一个TextView、一个imagebutton、

26、三个button, 其 main.xml 文档如下: 其对应的 Snake.java 文件如下:public class Snake extends Activity /* Called when the activity is first created. */ Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main);initialstart();/ 初始化public void initialstart(

27、)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( 退出 );butto

28、n5.setText( 游戏说明 );imageButton.setImageResource(R.drawable.icon1);/ 按钮注册到各自的监听器 imageButton.setOnClickListener(new View.OnClickListener() public void onClick(View view) Intent intent=new Intent();intent.setClass( Snake.this,Game.class); stARtActivity(intent) ;/跳转至到Game界面Snake.this.finish(););button1

29、.setOnClickListeneR(new View.OnClickListeneR() public void 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.OnClickListe

30、neR() public void onClick(View view) Snake. this.finish();/退出应用程序);button5.setOnClickListeneR(new View.OnClickListeneR() public void onClick(View view) Intent intent=new Intent(); intent.setClass( Snake.this,Help.class); start Ac tivi ty(in ten t);/跳转到游戏说明界面Snake.this.finish(););游戏界面设计:游戏界面包括一个butto

31、n, 个my.game.snake.SnakeView, 其 game.xml 文档如下:my.game.snake.SnakeView 相对应的 Game.java 文件如下:public class Game extends Activity /定义游戏参数private SnakeView mSnakeView;private static String ICICLE_KEY = snake-view;private int mMode = READY;public static finalpublic static final public static final public st

32、atic finalint PAUSE = 0;int READY = 1;int RUNNING = 2;int LOSE = 3;Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.game);mSnakeView = (SnakeView) findViewById(R.id.snake); / 设置界面背景mSnakeVi ew.setBackgroundResource(R.drawab l e.backg

33、round); TextView tv = (TextView) findViewById(R.id.text);Button button4 = (Button)this.findViewById(R.id.button4); /根据Tex tView状态判断是否开始游戏 mSnakeView.setStatusTextView(tv);if (savedInstanceState = null) mSnakeView.setMode(SnakeView.READY); else Bundle bundle =savedInstanceState.getBundle(ICICLE_KEY);

34、if (bundle != null) mSnakeView.restoreState(bundle); else mSnakeView.setMode(SnakeView.PAUSE);/ 按钮注册到监听器 button4.setOnClickListener(new View.OnClickListener() public void onClick(View view) Intent intent=new Intent(); intent.setClass( Game.this,Snake.class); startActivity(intent);Game.this.finish();

35、);/设置键盘监听事件,若按下UP键则开始游戏 public boolean 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 );return super.onKeyDown(keyCode, msg); /判断游戏状态是否为暂停 protecte

36、d void onPause() super.onPause();/ Pause the game along with the activity mSnakeView.setMode(SnakeView.PAUSE);Override/保存事件状态public void onSaveInstanceState(Bundle outState) outState.putBundle(ICICLE_KEY, mSnakeView.saveState();作者信息界面设计:此界面包括一个TextView、一个button,其author.xml 文档如下:Button android:layo u

37、t_ wid th二wrap_co ntent android:text二返回 android:visibility=visible android:layout_height=wrap_content android:id=+id/Button2android:layout_x=269dip android:layout_y=322dip相对应的Aut horView.java文件如下:public class AuthorViewextends ActivityOverridepublic void onCreate(Bundle savedInstanceState) super.onC

38、reate(savedInstanceState); setContentView(R.layout.author); Button button2 = (Button)this.findViewById(R.id.Button2); /按钮注册到监听器button2.setOnClickListener(new View.OnClickListener() public void onClick(View view) Intent intent=new Intent(); intent.setClass( AuthorView. this,Snake. class);/跳转到主界面 star

39、tActivity(intent);/注销当前界面AuthorView.this.finish(););游戏说明界面设计:此界面包括一个Tex tView、一个butt on,其help.xml文档如下: Button android:layo ut_ wid th二wrap_co ntent android:text二返回 android:visibility=visible android:layout_height=wrap_content android:id=+id/Button6android:layout_x=272dip android:layout_y=244dip 相对应的

40、Help.java文件如下:public class Help extends ActivityOverridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.help);Button button6 = (Button)this.findViewById(R.id.Button6); / 按钮注册到监听器button6.setOnClickListener(new View.OnClickListener() public v

41、oid onClick(View view) Intent intent=new Intent(); intent.setClass( Help.this,Snake.class); / 跳转到主界面 startActivity(intent);/ 注销当前界面He lp. this. finish(););程序运行效果图如下:图 3 进入 Snake 应用程序口 11 5554:ADT21图 4 游戏主界面图 5 游戏运行界面图 6 游戏结束界面6总结总的来说,这次参与设计贪吃蛇游戏收获很大,达到了实习锻炼的目的。 本次实习培养了团队合作精神,自己的Java语言设计能力得到了提高,体验了 软

42、件开发过程,培养了项目开发的分析能力和程序设计能力。首先,从玩游戏到设计游戏的角色转化,体验软件开发过程,培养了项目开 发的分析能力。其次,培养了团队合作精神。整个程序开发过程中,小组成员团结合作,努 力思考,认真讨论。可以说我们的程序开发小组,凝聚了友情,感受了温情,创 造了激情。最后,最直接的收获就是在 Android 平台上用 JAVA 语言开发程序的能力。 这是毕业找工作的一大资本,为从学校的理论学习过渡到工作中的实际操作奠定 了基础。7参考文献1 Google Android Developer Document. 2007.112 张弈平 Google Android SDK 开发范例大全. 电子工业出版社3 王伟 Android 中文开发文档4 美Ed Burnette. Android基础教程(第三版).人民邮电出版社,20105 杨丰盛.Android应用开发揭秘机械工业出版社,20106 李宁.Android开发权威指南人民邮电出版社,20118 小组分工说明 查阅整合相关资料,编写、测试游戏程序代码,完成课程报告。 查阅整合相关资料,辅助编写、测试游戏程序。 查找相关资料,提供设计思路,测试、调试程序。评语成绩指导教师(签字)年月日注:此表必须在同一页面。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!