本科生毕业论文(设计)
题 目:
基于 Java 的贪吃蛇游戏设计与实现
姓 名:
学 院:
专 业:
班 级:
学 号:
刘辉
信息科技学院
计算机科学与技术
计科 82 班
1928214
指导教师:
黄芬
职称: 副教授
2012 年 5 月 1 日
南京农业大学教务处制
目 录
摘要 ......................................................................3
关键词 ....................................................................3
Key Words .................................................................3
1.游戏的功能与设计 .......................................................4
1.1 需求分析 ..............................................................4
1.2 游戏实现的功能 .......................................................4
1.3 游戏实现原理 ..........................................................4
1.4 可行性分析 ............................................................4
2 基于 J2ME 的贪吃蛇游戏 ..................................................5
2.1 游戏流程图 ............................................................5
2.2 游戏在 J2ME Wireless Toolkit 上的仿真 ..................................7
2.2.1 游戏进入画面 .................................................... 7
2.2.2 贪吃蛇游戏画面 .................................................. 8
2.2.3 蛇吃食物时所改变的状态 ......................................... 11
2.2.4 贪吃蛇的撞击结束功能 ........................................... 11
2.2.5 查看数据排名 ................................................... 14
3 游戏的调试,bug 与展望 ................................................14
3.1 游戏的调试与错误 .....................................................14
3.1.1 游戏按键响应事件无效 ........................................... 14
3.1.2 打包成 jar 问题时出错 ........................................... 15
3.1.3 程序的判断问题 ..................................................15
3.1.4 加入播放声音后,游戏结束时声音变慢 ............................. 15
3.2 当前游戏还存在的 bug ..................................................16
3.2.1 障碍物的 bug ....................................................16
3.2.2 声音的 bug ......................................................16
3.2.3 蛇体结束时的 bug ................................................16
3.3 游戏未完成的展望 ..................................................... 16
4.分析与总结 .............................................................17
致谢 .....................................................................17
参考文献 .................................................................18
基于 Java 的贪吃蛇游戏设计与实现
2
计算机科学与技术专业学生
刘辉
指导教师
黄芬
摘要:随着计算机的普及,电脑游戏也慢慢融入人们的生活中,成为人们放松心情的一种方式。贪
食蛇作为一款经典且易于操作的游戏,一直受到人们的青睐。本文首先介绍了贪吃蛇游戏的设计方
案、贪吃蛇的实现原理;然后以 Java 的微缩版 J2ME 为开发平台,开发实现了移动平台下的贪吃蛇
游戏,并在 J2ME Wireless Toolkit 2.5.2 的手机模拟器中进行了游戏仿真;最后,叙述了游戏开
发过程中出现的错误以及错误调试,并探讨了游戏存在的 bug,对游戏未完成功能进行了展望。
关键词:Java、J2ME、贪吃蛇
Research and implement huge memory game based on Java
Student majoring in computer science and technology
Liu Hui
Tutor
Huang Fen
Abstract:With the popularity of computer, computer games also slowly into people's life, become people
to relax a kind of means. Gluttony snake as a classic and easy to operate, the game has been favored.This
paper first introduced the snake game design scheme,snake in principle;And then to Java version for
miniature of the J2ME development platform,the development achieved mobile the workbench snake
game,and in J2ME Wireless Toolkit 2.5.2 phone simulator in simulation game;Finally,describes the
development process of the mistakes and errors commissioning,and discusses the existing bug game,the
game is not complete function is discussed.
Key Words:Java; J2ME; Greedy snake
手机的普及导致手机游戏市场呈现爆炸式的发展,随着手机性能的增强,手机游戏
的市场在未来几年里将猛增至数十亿美元[1]。在这种状况下对手机游戏开发的需求将大
幅上涨。而现在,手机的性能以及赶上甚至超过目前运行游戏的家用游戏机,甚至部分
个人计算机了,手机的游戏也日渐丰富,日渐完善。与之相对应的则是国产手机游戏的
质量并没有明显提升,而相比之下,外国的著名开发商如 Gameloft, Fishlab 却一直推
出不同类型不同题材的优秀游戏(其中不少是免费),其质量远非国产游戏能比。但同
时可以看到国产手机游戏在具有中国特色的游戏题材的探索方面作了不少努力,并获得
好评。可见在坚持原创的基础上是可以开发出受欢迎的游戏的,而在中国对于原创的优
秀游戏还存在巨大的市场。
贪吃蛇游戏作为一种形成时间较长的经典游戏类型,如战锤系列、火焰之文章系列、
超级玛丽系列等等,起初是计算机性能所限的产物,如今在个人计算机和家用游戏机市
场已经没落,但是在性能较差的掌机和休闲平台(如手机,电视)仍然有很大的发展空
间。然而本次设计不只是开发一款单纯的贪吃蛇游戏,为了将游戏与所学的专业知识相
结合起来,故将游戏的环境设定在windows的Java环境中[2],以J2ME wireless toolkit
为手机模拟环境。作为J2ME的标准开发工具包,J2ME Wireless Toolkit 在J2ME前进的
道路上可谓功不可没。自从 2000 年初次亮相以来,该工具包一直在发展以赶上移动
3
Java 技术外观上快速改变的步伐。不要被从 2.1 版本以来的小改变所误导。新的工具
包在四个重要的领域支持 Java Community Process (JCP) 所指定的新的可选 API:
3D 图形、多媒体通信、蓝牙连网(Bluetooth networking)和数据管理。这里的四个
领域几乎包含了当今社会移动涉笔所能涉及的领域[3]。
J2ME Wireless Toolkit 2.5.2 不仅仅是一个出色工具的增量更新。它包括了对令
人激动的四项新规范的支持,同时定义了六种新的 API。随着无线 Java 技术世界的快
速发展,J2ME Wireless Toolkit 紧紧跟随发展的步伐并且包含您所需的全部工具[4]。
使用 J2MEWireless Toolkit 作为本次试验的模拟器也是为了突出本设计在构想上的独
立。
本文首先介绍了贪吃蛇游戏设计方案、贪吃蛇的实现原理;然后将游戏在 J2ME
Wireless Toolkit 2.5.2 的手机模拟器中进行仿真;然后是对游戏中所出现的错误的调
试、bug 以及对游戏未完成的展望。
1.游戏的功能与设计
1.1 需求分析
本系统主要是完成贪吃蛇游戏的基本操作。让用户可以自己练习和娱乐。本系统需
要满足以下几点要求:
1) 利用方向键来改变蛇的运行方向。
2) 在运行情况下右软键暂停或继续游戏,左软键结束或重开始游戏。
3) 吃到食物就变成蛇体变长,碰到壁、自身或障碍物则游戏结束,否则正常运行。
当吃到一定量的食物时,本级游戏过关,自动进入贪吃蛇下一关,相应的数据改变。
4)当游戏结束时,记录数据并与原记录集中数据进行重新排序,超出数据记录集的
部分数据删除。此时若想查看自己分数排名则可操作右软键即可查看分数排名。
5)游戏结束时,除了画面显示之外,还有音乐播放。
1.2 游戏实现的功能
游戏的主要功能如下:
1)开始时,游戏角色处于界面左上方,通过按键控制上下左右;
2)当游戏开始时,角色通过移动到食物位置吃食物来增长蛇体;
3)游戏界面中有些障碍物,蛇体不能碰到障碍物、自身、或者墙壁,否则游戏结
束;
4)游戏还有计分功能,每当蛇吃一次食物时,计分会根据当前游戏等级加分;
5)当游戏结束的时候,会对记录中的分数进行排序,并列出前10名以供查看。
1.3 游戏实现原理
游戏实现原理如下:
1)通过读取按键响应来控制蛇体前进的方向;
2)通过读取蛇头的坐标是否与食物、自身、障碍物和墙壁的坐标重合来判定蛇是否
是吃食物还是游戏结束;
3)通过读取蛇吃食物的个数和游戏等级相乘以即时得到游戏的分数;
4)通过分数比较将前 10 位分数输入到记录系统中并显示。
5)读取游戏结束函数并播放结束音乐。
1.4 可行性分析
本次设计所采用的工具为 windows 下的 Eclipse。所配置的环境为 JDK 1.6.0_21。
Eclipse 是由 IBM 公司耗巨资开发的集成开发工具,也是目前最流行的 Java 集成开发工
具之一,基于 Java 语言编写,并且是开放源代码的、可扩展的开发工具。Eclipse 平台
最具特色的特征,也是其区别于其他开发工具的特征为:他的平台体系结构是在插件概
4
念的基础上构建的[5]。
而贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家
的喜爱。
贪吃蛇的核心算法是如何实现移动和吃掉食物,以及及时修改相对应的数据,如蛇
体长度,分数等。
当游戏开始时,将蛇体设为一个数组,蛇体每个方向为一个数组元素,包括蛇体方
向,蛇体坐标,此方向蛇体长度。当蛇头没有碰到食物的时候,把当前运动方向上的下
一个节点坐标记录,重画蛇体,以达到蛇移动的效果。而在吃到食物的时候,则只需改
变数组最后一个元素的蛇体长度,然后重画蛇体即可。本次设计实现贪吃蛇的基本的蛇
身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够暂停和开始。
当蛇体吃到食物时,相对应的响应事件除了蛇体成长之外,还有分数的改变。分数
会收到蛇吃到的食物个数,蛇每吃一次食物,个数加一,于是分数便为食物个数乘以游
戏等级乘以单体食物分数,重写分数,以达到分数即时改变的效果。
当游戏结束的时候,游戏响应显示“Game Over”事件时,会即时将分数,游戏名等
数据发送到 rms 中,并与数据中记录的 Topscore 数据记录系统表进行比较。同时游戏
会响起结束音乐。排序后超过一定名次外的删除。以便玩家能够即时的查看自己的分数
与名次。
2 基于 J2ME 的贪吃蛇游戏
J2ME 就是手机上的 Java 开发平台,主要针对消费类电子设备的,例如蜂窝电话和
可视电话、数字机顶盒、汽车导航系统等等[6]。
J2ME 目前成为创建移动设备、消费电子产品,以及嵌入式设备的新应用的最合适的
平台[7]。因此,为了贴近实战,本次设计变采用 J2ME 作为手机开发平台[8]。
2.1 游戏流程图
5
进入游戏
输入游戏名,选择游
戏等级
点击右键“OK”键
游
戏
结
束
游戏开始,蛇体通过上下左右键或
者 2,4,6,8 键来控制蛇的移动方向
点击“Exit”键
点 击 右 键
“Pause”
键,暂停。
再 次 点 击
继续
吃到食物后
当吃了一定数
量的食物后,
游戏等级提高
撞到自身、
障 碍 物 或
者墙壁
显示“Game Over”
并 播 放 游 戏 结 束
音乐
点击右键“menu”键
点击Topscore键
点击左键“Resta
rt”键
游戏分数增加
将最终分数与
Topscore 表中
分数进行排序
显 示 Topscore 前
10 名
图 2-1 游戏流程图
1)进入游戏,输入游戏名,选择游戏等级。选择“OK”键,倘若此时需要关闭程
序,则点击“Exit”键;
2)点击“OK”键之后,游戏进入运行状态,同时画面变为蛇在初始右方向移动,
此时可以通过手机的上下左右键或者2,4,6,8数字键来控制蛇的移动方向。若长按游戏
方向键,则蛇移动速度会加快,若松开则蛇恢复之前的速度。此时若想关闭程序,点击
“Exit”键;
6
3)若蛇撞到障碍物,或者撞到自身又或者撞到墙壁,则显示“Game Over”并播放
结束音乐。同时左右键改变。若想重新开始,点击左键“Restart”键。若不想,想查
看自己分数的排名,则点击右键“menu”键中的“TopScore”键,则可以查看到自己分
数的排名,当然倘若自己的分数比最后一名还低,则自己的数据是进不了排行榜的。若
想结束,则点击“Exit”键;
4)若蛇成功的吃到了一块食物,则首先蛇体增长,变长了;其次,分数会跟据当
前的游戏的等级增加相应的分数;
5)当蛇吃到了一定量的食物之后,游戏等级会提高,表示游戏已过此关,并进入
下一关。
2.2 游戏在J2ME Wireless Toolkit上的仿真
结束环境配置之后,游戏在 J2ME Wireless Toolkit[9]的手机模拟器中进行仿真开
始。
2.2.1 游戏进入画面
进入游戏画面,游戏界面会显示要求玩家输入游戏名以及选择游戏等级,以便于游
戏结束时记录游戏数据:
本界面设计所采用的是继承 Form 类的表格类,通过对类的构造函数的编写,对按
键事件的响应,使得界面看起来非常简洁。部分代码如下:
public MySnake_InputForm() {
super("请输入数据");
tx_Name = new TextField("Name","USER",8,TextField.ANY);
7
String[] nLevel = {"level 1","level 2","level 3","levell 4"};
level = new ChoiceGroup("游戏等级",ChoiceGroup.EXCLUSIVE,nLevel,null);
cmd_Exit = new Command("EXIT",Command.EXIT,1);
cmd_OK = new Command("OK",Command.OK,1);
this.addCommand(cmd_Exit);
this.addCommand(cmd_OK);
this.append(tx_Name);
this.append(level);
this.setCommandListener(this);
}
2.2.2 贪吃蛇游戏画面
按照实用性及功能实现为主的设计原则,贪吃蛇的游戏画面设计比较简洁,如蛇体
是直接以长条代替,食物直接以方块代替。而障碍物也是以长条代替。以下截图以游戏
等级为 4 级为例:
由截图可以看出,左右软键功能已经变化了,按右键可以暂停游戏,而按左键则结
束游戏。以游戏等级 4 级为例的时候,游戏中出现 4 个障碍物。而右边的记录系统则记
录了玩家的游戏名,游戏等级以及此时的游戏分数。我们通过上下左右键或者数字键(2,
4,6,8)来控制蛇的移动方向,而当我们长按蛇当前方向键时,可以发现蛇在此方向上
的移动速度加快了,而我们松开按键时,蛇的速度又恢复原样了。这与 J2ME 的内部架
8