安卓软件开发--基于android系统的贪食蛇游戏设计内容摘要:
概要设计 程序流程设计本游戏的流程如下图所示:触摸屏幕游戏开始,蛇开始移动键盘操作: 向上左移右移向下没有吃到食物且蛇碰到边界游戏结束游戏中途欲中断,稍后继续游戏触摸屏幕暂停游戏游戏暂停进入游戏画面再次触摸屏幕游戏恢复 游戏处理流程图 模块划分从面向对象程序设计的角度,本项目总体地可以分为游戏界面模块、数据存储模块和控制模块。 如下图所示:游戏数据存储模块贪吃蛇游戏游戏主界面模块游戏控制模块 游戏总设计模块 游戏主界面模块游戏界面主框架主要包括游戏图形区域界面、游戏的开始按钮、暂停按钮、游戏的退出按钮。 游戏的主界面架游戏图形区域界面(即游戏画布)游戏控制按钮界面 游戏主界面 游戏控制模块 游戏控制模块主要通过手机键盘上的按钮来控制游戏的开始、游戏的暂停、游戏的退出这三个功能以及控制游戏分数变化。 在这个模块中,需要给各个按钮添加响应事件代码,来对上述的功能加以进一步的实现。 游戏控制模块游戏的移动速度功能能游戏的暂停功能游戏的重新开始 游戏控制模块框架 模块实现原理 游戏界面模块实现本游戏采用Activity作为游戏背景的载体,在Android中一个Activity就相当于windows中的一个窗口,Activity上可以放置许多类型的控件。 一个activity主要有三个状态:当在屏幕前台时(位于当前任务堆栈的顶部),它是活跃或运行的状态。 它就是相应用户操作的activity。 当它失去焦点但仍然对用户可见时,它处于暂停状态。 即是:在它之上有另外一个activity。 这个activity也许是透明的,或者未能完全遮蔽全屏,所以被暂停的activity仍对用户可见。 暂停的activity仍然是存活状态(它保留着所有的状态和成员信息并连接至窗口管理器),但当系统处于极低内存的情况下,仍然可以杀死这个activity。 如果它完全被另一个activity覆盖是,它处于停止状态。 它仍然保留所有的状态和成员信息。 然而它不在为用户可见,所以它的窗口将被隐藏,如果其它地方需要内存,则系统经常会杀死这个activity。 如果一个activity处于暂停或停止状态,系统可以通过要求它结束(调用它的 finish() 方法)或直接杀死它的进程来将它驱出内存。 当它再次为用户可见的时候,它只能完全重新启动并恢复至以前的状态。 当一个activity从这个状态转变到另一个状态时,它被以下列protected方法所通知:void onCreate(Bundle savedInstanceState) 、void onStart() 、void onRestart() 、void onResume() 、void onPause() 、void onStop() 、void onDestroy()2. 实现蛇的身体蛇可以看做是一个个节点组成的,因此可以用一个链表来存储蛇身的元素,在画蛇时遍历这个链表讲里面的元素一一画出,这样就实现了一条蛇.3. 实现蛇的移动用一个timer(定时器)来不断地刷新游戏画面,每刷新一次就再蛇头的前面(链表的尾部)增加一个新元素,同时把蛇尾的一个元素删掉,这样从视觉上看起来就实现了蛇的移动.4. 实现蛇吃食物 蛇移动的过程中如果蛇头的坐标与食物出现的坐标重合了,那么就在蛇头的位置增加一个元素同时不删除蛇尾的最后一个元素,这样蛇每迟到一个食物 身体就会变长一截. 游戏控制模块实现1. 实现操作蛇的移动方向在Android系统中,手机上的每个按钮都会有一个对应的键值跟它对应,所在可以给对应的按钮设置监听器OnClickListener,监听器是一个接口,该接口中有一个方法onClick(View v)。 当按钮被点击的时候系统会自动调用该监听器的onClick(View v)方法。 所以实现游戏控制的具体代码将被写到该方法中。 因为本游戏中不允许蛇向与蛇头相反的方向移动,所以当用户操作时需要判断用户操作的方向是不是跟规则冲突,若冲突则无视该操作,若不冲突则响应该操作,所以需要用一个变量来记录蛇头的当前方向。 2. 实现游戏暂停 在Activity的生命周期中,有一个onPause() ,如果有来电或是其它事件中断, 这时应该把当前状态保存。 以便返回时,还可以继续玩游戏。 这就使用 onSaveInstanceState实现保存当前状态。 3. 实现游戏恢复Activity生命周期的onResume().4. 实现游戏退出当一个Activity退出或者被调用finish()方法后,系统会调用其生命周期方法onDestroy().当用户退出游戏时,可以在这个方法中对资源进行释放. 数据存储模块实现 在Android系统中数据的存储是使用SQLite数据库来实现的,SQLite是一款轻型的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。 它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。 在SQLite中创建一张表,表的结构如下表所示:字段名类型意义playervarchar玩家名字scoreint玩家分数该表用来存放玩家数据。 第五章 详细设计 游戏类图本游戏的类图如下: 游戏类图 游戏界面具体实现 蛇身、食物和墙的实现前面已经提过,蛇身的数据用一个链表来存储,具体我使用ArrayList来实现。 蛇身的每个元素、食物和墙都是一个坐标对象,画这些东西的时候只需要把它们的坐标传给画的方法就行了。 这里需要引进一个坐标类Coordinate,这是一个包括两个参数,用于记录X轴和Y轴简单类,其中包括一个比较方法,:class Coordinate { public int x。 public int y。 public Coordinate(int newX, int newY) { x = newX。 y = newY。 } public boolean equals(Coordinate other) { if (x == amp。 amp。 y == ) { return true。 } return false。 } @Override public String toString() { return Coordinate: [ + x + , + y + ]。 } }蛇身的初始长度我设置为5,new 5个Coordinate的对象放入ArrayList中。 整个屏幕可以看做是有很多个网格组成的,而蛇就在这些网格中移动。 用一个二维数组int[][] mTileGrid来存储网格的坐标,将蛇身、食物或者墙的坐标传到该数组中,onDraw方法按照该数组中的坐标将屏幕相应位置的网格填充成位图。 画蛇身、食物、墙的方法为: @Override public void onDraw(Canvas canvas) { (canvas)。 for (int x = 0。 x mXTileCount。 x ++) { for (int y = 0。 y mYTileCount。 y ++) { if (mTileGrid[x][y] 0) { (mTileArray[mTileGrid[x][y]], mXOffset + x * mTileSize, mYOffset + y * mTileSize, mPaint)。 } } } } 蛇移动的实现使用View类的onKeyDown方法,该方法由系统监听调用。 根据按键的值处理响应事件,该方法中解决了反向移动的问题。 mDirection 为当前蛇头的方向,mNextDirection 为按键对应的方向,按键按下后会先判断当前方向是否跟下一方向相反,若相反则不响应事件。 具体代码如下: @Override public boolean onKeyDown(int keyCode, KeyEvent msg) { if (keyCode == ) { if (mMode == READY | mMode == LOSE) { /* * At the beginning of the game, or the end of a previous one, * we should start a new game. */ initNewGame()。 setMode(RUNNING)。 update()。 return (true)。 } if (mMode == PAUSE) { /* * If the game is merely paused, we should just continue where * we left off. */ setMode(RUNNING)。 update()。 return (true)。 } if (mDirection != SOUTH) { mNextDirection = NORTH。 } return (true)。 } if (keyCode == ) { if (mDirection != NORTH) { mNextDirection = SOUTH。 } return (true)。 } if (keyCode == ) { if (mDirection != EAST) { mNextDirection = WEST。 } return (true)。 } if (keyCode == ) { if (mDirection != WEST) { mNextDirection = EAST。 } return (true)。 } return (keyCode, msg)。 }if ((direction != currentDirection) amp。 amp。 !needUpdate){// 取出列表中的最后一个元素(蛇的头部)WormLink sl = (WormLink)()。 int x = ()。 int y = ()。 // 不同的运动方向坐标的改变也不一样switch (direction) {case UP: // 当这段向上运动的时候if (currentDirection != DOWN) {y。 needUpdate = true。 }break。 case DOWN: // 当这段向下运动的时候if (currentDirection != UP) {y++。 needUpdate = true。 }break。 case LEFT: // 当这段向左运动的时候if (currentDirection != RIGHT) {x。 needUpdate = true。 }break。 case RIGHT: // 当这段向右运动的时候if (currentDirection != LEFT) {x++。 needUpdate。安卓软件开发--基于android系统的贪食蛇游戏设计
相关推荐
应对未来激烈的行业竞争 ,实现安得物流公司做精做强的战略转移。 安得物流公司物流系统重组的战略 安得物流公司物流系统重组的目标 对安得公司物流系统重组的最直接目标是优化原有物流系统,而系统优化的成果需要制定系统目标来衡量系统输出,以确定系统输出是否合理,以便对系统的输入和转化进行进一步的调试。 货源分散、零担运输、亏损路线运输使得成本升高、盈利下 降 现有的物流资源已不能满足业务拓展的需要
度的对称和均匀分布。 避免平面上和立面上的突然变化和不规则的形状。 2)小面积选用跃层 在多层、高层住宅中, 国内近几年比较喜欢设计跃层式住宅,跃层式住宅一般是在独户式一层住宅中采用,在户内设置楼梯为垂直交通。 一般每户在同层内布置房间.完全可以满足使用功能的要求。 目前在多层、高层住宅的中间层大量出现的跃层式住宅,主要是为追求变化和气 派的室内空间,并无其他功能的要求。
材编写之外,针对中国家具产业设计理论和设计书籍薄弱的现象,由我系彭亮老师任主编,组织青年教师周湘桃、潘速圆、于敏洁、顾宇清等编著出版了系列家具设计与制造书籍: 客厅家具设计与制造; 书房、工作室家具设计与制造; 卧房、儿童房家具设计与制造; 厨房卫生间家具设计与制造,于 2020 年江西科技出版社正式出版,受到中国家具企业欢迎,一年之内再版 3 次。 在我系策划组织 4
系列 产生在列,点下一步,点标题,图表标题内输入“总成绩 12 图”,点下一步,选择“作为新工作表插入(即第一个选择)”,名称为图表 1,确定→保存文件→本题完成 17. ( 1)打开当前试题目录下文件 ; ( 2)根据工作表中数据,建立簇状条形图; ( 3)生成图表的作用数据区域是 A2:C6,数据系列产生在列,使用前一列为分类( X)轴坐标刻度标志,使用前一行作为图例说明; (
2 785 810 581 607 617 655 692 704 720 坐姿中指指尖点上举高 1218 1264 1281 1248 1416 1425 1481 1152 1179 1196 1299 1216 1222 1264 组合柜相关实测数据 在一个人机系统 中为了发挥系统的整体功能,使人和机有效地结合,机的结构及功能尺寸是十分重要的。 产品设计者在设计、制造和使用的工程中也
/天。 ②承包人擅自更换项目经理违约金 10000 元 /次。 ③承包人擅自更换项目部其余关键岗位人员违约金 5000 元 /人 /次。 12 行贿犯罪查询 投标 人须提供 (投标人、法定代表人、拟派项目负责人 )2020 年 1月 1日至 2020年 1 月 21 日《检察机关查询行贿犯罪档案结果告知函》的原件 或彩色扫描件 ,如有行贿犯罪记录的,取消投标人投标资格。