辽 宁 科 技 大 学
新 技 术 专 题 报 告
设计题目: 安卓手机游戏---贪吃蛇
学院、系: 电信学院、计算机科学与技术
专业班级: 计算机 09.1
学生姓名:
刘 帅
指导教师:
龙艳彬 滕薇
成
绩:
2012 年 7 月 1 日
目录
第一章 绪论............................................................................................................... 3
1.1 开发背景......................................................................................................... 3
1.1.1 安卓系统简介...................................................................................... 3
1.1.2 游戏简介.............................................................................................. 3
1.2 开发目的及意义............................................................................................. 4
1.3 开发环境及工具............................................................................................. 4
第二章 需求分析......................................................................................................5
2.1 游戏界面分析................................................................................................. 5
2.2 游戏角色分析................................................................................................. 5
2.3 游戏控制分析................................................................................................. 5
2.4 可行性分析.................................................................................................... 6
第三章 总体设计......................................................................................................7
3.1 系统功能模块层次图..................................................................................... 7
3.2 运行机制......................................................................................................... 8
3.3 贪吃蛇功能流程图....................................................................................... 10
第四章 详细设计与实现......................................................................................... 12
4.1 TiltView 类................................................................................................. 12
4.2 SnakeView 类............................................................................................. 14
4.3 界面设计.................................................................................................... 16
第五章 测试............................................................................................................... 20
5.1 游戏功能测试............................................................................................... 20
5.2 游戏控制测试............................................................................................... 20
5.3 游戏界面测试............................................................................................... 20
5.4 测试结果....................................................................................................... 20
第六章 结论............................................................................................................21
第一章 绪论
1.1 开发背景
1.1.1 安卓系统简介
安卓系统作为新兴的手机操作系统,在问世不久,变风靡全球,占领手机操
作系统里很大的市场份额,与苹果,诺基亚三分天下,Android 是基于 Linux 开
放性内核的操作系统,是 Google 公司在 2007 年 11 月 5 日公布的手机操作系统。
早期由原名为"Android"的公司开发,谷歌在 2005 年收购"Android.Inc"后,继续
对 Android 系统开发运营,它采用了软件堆层(software stack,又名软件叠层)
的架构,主要分为三部分。底层 Linux 内核只提供基本功能,其他的应用软件则
由各公司自行开发,部分程序以 Java 编写。
1.1.2 游戏简介
1976 年,Gremlin 平台推出了一款经典街机游戏 Blockade。游戏中,两名玩家分
别控制一个角色在屏幕上移动,所经之处砌起围栏。角色只能向左、右方向 90
度转弯,游戏目标保证让对方先撞上屏幕或围栏。 听起来有点复杂?其实就是
下面这个样子:
基本上就是两条每走一步都会长大的贪吃蛇比谁后完蛋,玩家要做的就
是避免撞上障碍物和越来越长的身体。更多照片、视频可以看 Games DBase 的
介绍。
Blockade 很受欢迎,类似的游戏先后出现在 Atari 2600、TRS-80、苹果 2
等早期游戏机、计算机上。但真正让这种游戏形式红遍全球的还是 21 年后随诺
基亚手机走向世界的贪吃蛇游戏——Snake。
贪吃蛇游戏是一款老牌的手机游戏,同时也是一款比较需要耐心地游戏。贪
吃蛇游戏就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的食物,越吃越
长。只要蛇头碰到屏幕四周,或者碰到自己的身子,小蛇就立即毙命。玩“贪吃
蛇游戏”,难度最大的不是蛇长得很长的时候,而是开始的时候。那时蛇身很短,
看上去难度不大,却最容易死掉,因为把玩一条小蛇让人容易走神,失去耐心。
1.2 开发目的及意义
通过本次课程设计,了解 android 软件的开发过程,熟悉并掌握 JAVA 语言,HTML.
程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身
体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以
蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下
有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键
后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置
开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单
位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现
与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇
目的 本程序实现主要技巧在于 java 语言的应用。目的在于提高编程的水平。
1.3 开发环境及工具
JDK 安装
采用 eclipse 开发工具,在 windowsxp 下进行,基于安卓 2.2 操作系统。
环境搭建:
1.
2. Eclipse 安装
3. Android SDK 安装
4. ADT 安装创建 AVD
第二章 需求分析
2.1 游戏界面分析
首先应解决操作界面的问题,操作界面应该人性化设计,提示玩家当前游戏状态,
何时开始,按什么按键开始游戏,开始游戏之后,在游戏界面中,以坐标的形式
对整体界面进行划分,将界面划分为许多个小方格,还应设计蛇的样式,苹果的
样式和墙的样式,在蛇吃到苹果后的样式,还有游戏结束或暂停时,界面的显示,
游戏结束后,要显示所得的分数。
2.2 游戏角色分析
设置游戏贪吃蛇初始时由固定个小矩形块组成,并且,游戏中,要随机出现由单
个矩形块构成的苹果,并且在设置苹果的时候,还要设置,不能使将要出现的苹
果出现在蛇的身体之下,在蛇吃到苹果的时候,要将蛇的身体加长,随着游戏的
进行,蛇移动的速度也要加快。此外,要判定游戏成功与失败的条件,当蛇的头
和尾相撞或者蛇的头部撞到了墙上,则游戏失败,此时游戏结束,界面显示所得
分数,当累积分数达到一定标准则游戏成功。另外蛇的移动原理,由外部按键设
置监听控制蛇头的移动方向,在方向的指引下进行移动,蛇及苹果的位置都是由
坐标数组确定的,苹果的位置也是随机产生的蛇的移动原理是后一矩形块覆盖前
一个矩形块。当一个苹果被吃掉的时候,要自动生成并显示下一个苹果的位置。
这些都是在设计过程中需要实现的。
2.3 游戏控制分析
游戏中需要通过按键对蛇的移动方位进行控制,共需要设置四个方位,分别是
“东”“西”“南”“北”,在按键上用“上”“下”“左”“右”,按键与执行部分便
涉及到监听,通过监听指示蛇的运动,此外,要设置蛇移动是的默认方向为“上”
游戏开始时也是由“上”键启动,暂停后根据玩家的操作自动控制蛇的移动方向,
设计过程中还应注意,蛇的移动只能是 90 度偏转,不能进行 180 度偏转。此外
还要设置游戏的四种状态,准备,运行,暂停,结束,蛇体变长的时候要用累加
器进行加分。游戏暂停时,要对当前游戏的参数和状态进行保存。
2.4 可行性分析
贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑
玩家的喜爱,做一个简单的贪吃蛇小游戏。
贪吃蛇的核心算法时如何实现移动和吃掉食物,没有碰到食物的时候,把
当前运动方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指
针所指的节点出队,并以游戏框架内部背景色重绘出队的节点,这样就可以达到
移动的效果。而在吃到食物的时候,则只需把食物入队即可。实现贪吃蛇的基本
的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够暂停和开始。
本次设计我将主要运用 java 语言来完成。Java 语言是一种跨平台,适合于
分布式计算环境的面向对象编程语言,用 Java 写的应用程序不用修改就可在不
同的软硬件平台上运行。
由于 Java 主要用于网络应用程序开发,因此对安全性有较高的要求。如果
没有安全保证,用户从网络下载程序执行就非常危险。Java 通过自己的安全机制
防止了病毒程序的产生和下载程序对本地系统的威胁破坏。
第三章 总体设计
3.1 系统功能模块层次图
工程中包括 4 个 Activity,分别为 Snake(主界面)、Game(游戏界面)、Help
(游戏说明界面)、AuthorView(作者信息界面),通过不同 Activity 之间的转换
实现不同界面之间的切换。Snake(Activity)继承了 SnakeView 类,SnakeView
类继承了 TileView 类。TileView 类继承了 View 其实 Snake 的工程蛮简单的,源
文件就三个: Snake.java SnakeView.java TileView.java。 Snake 类是这个游戏的
入口点, TitleView 类进行游戏的绘画, SnakeView 类则是对游戏控制操作的处
理。 Coordinate, RefreshHandler 是 2 个辅助类,也是 SnakeView 类中的内部
类 。 其 中 , Coordinate 是 一 个 点 的 坐 标 ( x , y ), RefreshHandler 将
RefreshHandler 对象绑定某个线程并给它发送消息。如下图:
类图
3.2 运行机制
任何游戏都需要有个引擎来推动游戏的运行,最简化的游戏引擎就是:在一个线
程中 While 循环,检测用户操作,对用户的操作作出反应,更新游戏的界面,
直到用户退出游戏。
在 Snake 这 个 游 戏 中 , 辅 助 类 RefreshHandler 继 承 自 Handler , 用 来 把
RefreshHandler 与当前线程进行绑定,从而可以直接给线程发送消息并处理消息。
注意一点: Handle 对消息的处理都是异步。 RefreshHandler 在 Handler 的基础
上 增 加 sleep() 接 口 , 用 来 每 隔 一 个 时 间 段 后 给 当 前 线 程 发 送 一 个 消 息 。
handleMessage()方法在接受消息后,根据当前的游戏状态重绘界面,运行机制如