《基于J2ME平台与Eclipse开发环境的贪吃蛇小游戏毕业论文.doc》由会员分享,可在线阅读,更多相关《基于J2ME平台与Eclipse开发环境的贪吃蛇小游戏毕业论文.doc(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、毕 业 论 文(设 计)论文(设计)题目: 邵小兵姓 名 计算机与信息工程学院学 号 计算机科学与技术院 系 2011级专 业 年 级 指导教师 20 年 月 日目 录摘 要1ABSTRACT1第1章 绪论21.1 研究意义及研究现状21.1.1 研究意义21.1.2 研究现状21.2 开发环境概述31.2.1 开发工具Eclipse31.2.2 开发平台J2ME31.2.3 开发语言Java3第2章 系统分析42.1 需求分析42.2 可行性分析52.2.1 社会可行性分析52.2.2 技术可行性分析52.2.3 经济可行性分析5第3章 总体设计63.1 设计原则与实现目标63.2 系统运行
2、总体流程设计63.3 系统功能模块设计83.3.1 游戏总设计模块83.3.2 游戏主界面模块83.3.3 游戏控制模块83.3.4 游戏进度管理模块93.3.5 游戏排行榜模块93.3.6 游戏类模块10第4章 详细设计114.1程序设计思路114.2类模块具体设计114.2.1 GameStart类114.2.2 GameFrame类124.2.3 GamePanel类124.2.4 Snake类144.2.5 Barrier类144.2.6 Food类144.2.7 GameRecords类144.2.8 Record类144.2.9 GameConstant类144.2.10 Read
3、Record类144.2.11 WriteRecord类144.3 关键功能具体实现154.3.1 蛇、食物、石头的表示154.3.2 蛇的移动方向表示154.3.3 食物及障碍物的随机生成174.3.4 如何判断蛇吃掉食物184.3.5 如何实现键盘控制蛇运行方向184.3.6 如何判断游戏结束194.3.7 如何实现游戏进度的保存与加载204.3.8 如何实现游戏得分排行榜21第5章 系统测试235.1 游戏测试235.1.1 进入游戏235.1.2 运行游戏235.1.3 加载保存游戏245.1.4 游戏排行榜265.2 游戏创新与不足275.2.1 创新点275.2.2 不足点27参考
4、文献28致 谢29 摘 要在当今社会,随着科技的发展,人们的生活节奏越来越快,工作生活压力也随之增大,此时一款可以随时随地娱乐的手机游戏就成了必需品。因此,设计一个操作简单、娱乐性强、界面美观的小游戏,在繁忙的工作之余适当地玩玩这个游戏,不仅可以调节情绪,使人心情愉悦,更能健脑益智,为更好的投入学习工作做好准备。现在设计的这一款贪吃蛇游戏,就是满足以上要求而开发出来的。贪吃蛇是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本论文基于J2ME平台与Eclipse开发环境,采用Java语言,开发了一个贪吃蛇小游戏,整个游戏程序分为四个功能模块,十一个类模块,实现了游戏的开始、暂停、结束、得分、
5、排行、保存加载进度等功能。通过本次游戏的开发,可以达到学习Java技术和熟悉软件开发流程的目的。关键词:手机游戏;J2ME;Eclipse;Java;贪吃蛇29ABSTRACTIn todays society, with the development of science and technology, the rhythm of peoples life become more and more fast and the working stress also increase.At this point a entertainment game on mobile phones whi
6、ch can be played anywhere has become necessary. Therefore, wo can design a small game which is simple, entertaining and have a beautiful interface. To play the small game in the busy work life, it not only can adjust the mood, make people feel better, but also can exercise the brain and make a prepa
7、ration for the rest word and study.Now we design the Snake game to meet the above requirements. Snake game is a classic game and it is popular for the simple operatione and entertaining. This article is based on J2ME platform and the Eclipse development environment to develop a very good Snake game.
8、 The whole game program is divided into four function modules, eleven class module and the function of game start, pause, end, score, ranking,saving the progress or loading the progress must be implemented.Through this development of the game,wo can achieve the purpose of learning Java technology an
9、d be familiar with the process of software development.Key words: cell phone game;J2ME; Eclipse; Java;Snake第1章 绪论本章先对系统的研究意义以及国内外研究现状进行了详细论述,然后介绍了系统的开发工具Eclipse,接着对开发平台J2ME作了简单说明,最后详细阐述了Java开发语言的语言特点。1.1 研究意义及研究现状1.1.1 研究意义在我们的生活中有很多的游戏,但是游戏不同,给玩家带来的也会是不同的感觉和生活理念,游戏平台经过游戏机到电视游戏,然后从电脑游戏到手机游戏,中间经历了很多的
10、技术更新和变革1。随着新技术的发展和人们生活水平的提高,手机逐渐普及。手机小巧便捷、易于携带,因此成为我们日常生活中必备的通讯工具,基于手机平台的游戏也就拥有了巨大的市场空间,而随着3G的应用与发展,手机游戏必然会迎来新的热潮。现在全世界有超过数十亿部移动电话正在被使用,虽然这些手机只有一部分是支持Java游戏的手机,但是这个数目正在快速地提高并且在几年内Java手机将要成为行业标准,移动游戏的市场潜力比其它任何平台都要大。在现代社会,人们的压力日益增大,需要劳逸结合才能获得更高的工作效率,工作之余的娱乐对每一个人来说都是必不可少的2。贪吃蛇游戏是一款非常经典的手机游戏,它比较简单有趣,深受男
11、女老少喜欢。贪吃蛇的设计对每一个Java语言学习者都是一个很好的锻炼机会,本次设计不仅考查了我综合运用以前所学知识的能力,同时也锻炼了我的实际动手能力。1.1.2 研究现状目前的手机游戏数量众多,但日本、韩国、欧美等地开发的游戏几乎占据了中国手机游戏80%的市场。国内手机游戏开发商开发能力与国外开发商比较,力量相对薄弱,目前国内手机游戏仍以单机版游戏为主,网游版游戏产品所占比重较低3。从整体行业来看,中国手机游戏行业正处于快速发展期,手机游戏市场未来前景巨大。这些年由于Java技术的不断发展,Java程序的运行速度有了显著提升,而硬件技术的不断发展,使得Java处理比较复杂的3D图形成为可能4
12、。Java3D技术的出现,使Java语言可以充分的利用现有显卡强大的硬件加速能力,目前已经有很多基于Java的2D和3D游戏,其中不乏大型多人在线游戏。Java游戏正焕发着越来越蓬勃的生命力,在整个游戏产业中所占的比例也越来越大。1.2 开发环境概述1.2.1 开发工具EclipseEclipse 是一个基于Java 的可扩展开发平台,是最强大的、最易于使用的Java快速开发工具之一5。Eclispse把Java编程语言的强大威力和图形用户界面化的快速开发环境的易用性有机地结合在一起,使创建应用程序、类和工程的过程变得简单,设计器与双向开发工具的使用使图形界面的设计变得非常容易。1.2.2 开
13、发平台J2ME随着无线应用技术和嵌入式系统越来越受到人们的欢迎,Sun公司为了迎合这一发展趋势推出了J2ME平台。J2ME是于1999年在JavaOne大会上正式被提出来的,是Sun公司为小型电子产品的应用程序开发专门提供的Java版本。从体系结构上来看,J2ME按层来组织开发平台,它主要由JVM层, Configuration层和Profile层三部分构成6。J2ME的核心是配置层,其中定义了JVM,JVM的作用是与设备底层的操作系统沟通,Profile则提供访问设备以及图形界面的API,加上简表层共同构成了J2ME的运行环境。1.2.3 开发语言JavaJava是一种可以开发跨平台应用软件
14、的面向对象语言,Java 技术具有很好的通用性、高效性和安全性,广泛应用于个人电脑、游戏控制台、数据中心、互联网和移动电话7。在全球移动互联网的产业大环境下,Java更是具备了显著的优势和广阔的前景。Java语言具有如下特点:(1)简单性。Java是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务8,开发者只需要知道一些基本概念就能够编写出一些应用程序。(2)面向对象语言。Java的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。(3)健壮性。Java致力于检查程序在编译时和运行时的错误,减少了内存出错的可能性9,并且提供垃圾收集器自动回收不用的内存。第2章 系统分析
15、系统分析是软件生命周期中重要的一步,也是起决定性的一步。通过它可以全面了解整个系统的功能和性能方面的要求,为软件设计打下坚实的基础。系统分析工作主要包括需求分析与可行性分析。2.1 需求分析需求分析的最基本任务是精准地回答“系统必须做什么”这个问题10。为了能够开发出真正令用户满意的产品,开发者首先要知道用户的需求。对软件需求的深层次理解是软件开发工作获得成功的前提条件,不论开发者把设计做得如何优秀,如果不能够真正满足用户的需求就只会令用户失望,给自己带来烦恼。本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的开始、暂停、退出、加速减速、统计分数、排行榜等功能,游戏总体分为游戏主
16、界面、游戏控制、游戏进度管理和游戏排行榜四个模块。其中游戏主界面模块主要包括游戏图形区域界面、游戏开始按钮、暂停游戏按钮、关闭按钮、加载保存进度按钮、打开游戏排行榜按钮等,游戏的主界面应该力求美观,爽心悦目。游戏控制模块主要完成按键事件与逻辑事件的处理,这部分应该做到易懂、易操作而且准确率高,不易出错。游戏进度管理模块主要实现当前游戏进度的保存与加载已保存的游戏进度,游戏排行榜模块主要实现玩家得分的排名。综上所述,本系统需要满足以下几点要求:(1)有良好的方块形状设计方法来绘制小蛇、食物与障碍物,小蛇由几个方块组成,食物与障碍物由一个方块组成。(2)能够随机产生食物与障碍物。(3)实现按钮、键
17、盘事件与逻辑事件的响应。(4)实现游戏过程中的暂停、继续以及贪吃蛇运行速度调整。(5)实现得分功能,分数每增加50分在原有基础上随机产生一个障碍物。(6)可以通过键盘方向键(上,下,左,右)来改变蛇的运动方向。(7)实现游戏结束的判断:蛇头触碰到蛇身或者蛇头触碰到障碍物。(8)通过序列化和反序列化来完成游戏进度的保存和加载功能。(9)能够实现玩家得分排行榜功能,排行榜上列出前十名玩家的信息。2.2 可行性分析可行性分析的主要目的是在该项目投资决策前,对项目有关工程技术、经济、社会等方面的情况进行调查、研究、分析11,对各种可能的技术方案进行比较论证。可行性分析是考察所开发软件的可能性和可行性,
18、进而确定项目投资建设是否可行的科学分析方法。2.2.1 社会可行性分析游戏开发至今已经有三十多年,随着硬件的水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是,游戏这个名称一直存在于每个人的日常生活中,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色,这些都为开发的这款贪吃蛇游戏提供了必要条件。2.2.2 技术可行性分析(1)开发的软件可行性本次设计我将运用java语言来完成。Java语言是一种跨平台、适合于分布式计算环境的面向对象编程语言,用Java写的应用程序不用修改就可以在不同的软硬件平台上运行。Eclipse开发工具是最强大的、最易于使用的Java快速开发工具之一12。Ecli
19、pse把Java编程语言的威力和图形用户界面化的快速开发环境的易用性有机地结合在一起,它使图形界面的设计变得很容易,并能够提高以后的工程性能。因此Java和Eclipse的结合,将使本次设计的技术可行性大大提高。(2)开发的硬件可行性电脑的发展速度一日千里,所以在硬件上应该没有问题,不过要注意的是硬件系统的稳定性问题,这个是非常关键的问题。2.2.3 经济可行性分析Java平台的自由和开放性使得开发人员只需要很少的投资,游戏的易于维护性也使本游戏的开发投资大大减少13。因此本系统的开发在经济上对开发者来说不存在太大的压力。第3章 总体设计本系统开发过程中的总体设计,主要解决实现该游戏需求的程序
20、模块设计问题,包括如何把该游戏划分成若干个模块、实现各个模块之间的接口、模块之间相互传递信息以及模块结构的设计等。3.1 设计原则与实现目标软件开发是一项系统工程,必须遵照共同的设计原则,以便保障系统的质量,尽可能高地加强系统的各种指标。 (1)实用性原则:要尽最大可能满足实际工作的需求,要充分考虑各管理环节以及各业务层次处理数据的实用性,界面设计要力争做到美观大方,功能设计要尽可能做到简便实用。(2)可扩展性原则:为适应将来技术的发展,系统应具备很好的可维护性和可扩展性14。软件设计应力争做到组织化、模块化,使应用系统尽可能灵活配置,能够适应不同的情况。从总体上来看,本系统的设计主要为了实现
21、以下目标:(1)加深对面向对象编程思想的理解。(2)掌握多线程技术的应用。(3)熟悉Java GUI图形界面开发工具的使用。(4)了解Java流输入输出的应用。3.2 系统运行总体流程设计根据游戏的需求分析,我们可以知道系统的总体运行过程。首先,进入游戏界面,单击开始游戏,界面随机产生食物,蛇体开始运行,初始方向为右。游戏运行过程中,可以通过键盘上的上下左右键控制蛇的运动方向,可以通过单击暂停按钮暂停游戏,再次单击开始按钮游戏重新开始。可以通过保存游戏按钮将当前游戏的状态存入磁盘文件,再次单击载入游戏可以从刚才的地方重新游戏。当蛇碰到障碍物或者自身时,本局游戏结束,会弹出对话框,要求输入玩家姓
22、名,然后弹出对话框询问是否重新游戏,单击是,重新游戏,单击否,退出游戏,游戏的具体运行流程如图1所示。单击开始游戏产生食物,蛇开始向右运行键盘操作左移右移下移单击保存游戏保存进度单击开始游戏游戏恢复进入游戏界面是否暂停是否重新游戏蛇碰到蛇体或石头单击载入游戏打开进度本局结束,得分写入玩家分数排行榜退出游戏上移是否保存进度 单击暂停游戏暂停游戏是否图1 系统运行流程图3.3 系统功能模块设计3.3.1 游戏总设计模块本设计所开发的是基于Java的一个贪吃蛇游戏软件,根据游戏需求中游戏所要实现的功能,整个游戏分为游戏主界面、游戏控制、游戏进度管理、游戏排行榜四个模块,如图2所示。贪吃蛇游戏游戏主界
23、面模块游戏排行榜模块游戏控制模块游戏进度管理模块图2 游戏总设计模块图3.3.2 游戏主界面模块游戏的主界面是进入游戏后,能够给玩家第一感觉的部分,因此,游戏的主界面应该力求美观,爽心悦目,如图3所示。游戏的主界面框架游戏图形区域界面游戏控制按钮界面图3 游戏主界面模块图3.3.3 游戏控制模块这个模块是游戏的中心环节,主要实现监听游戏的按键事件与逻辑事件,为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作,如图4所示。游戏控制模块游戏按键控制游戏逻辑控制图4 游戏控制模块图3.3.4 游戏进度管理模块这个模块是为了实现游戏进度的保存和加载功能,如图5所示。游戏进度管理模块游戏进度存
24、储游戏进度加载图5 游戏进度管理模块图3.3.5 游戏排行榜模块该模块主要是为了实现玩家得分的排行榜功能,主要有游戏得分写入和游戏排行榜两部分,如图6所示。游戏排行榜模块游戏排行榜实现游戏得分写入图6 游戏排行榜模块图3.3.6 游戏类模块系统主要有十一个类,如描述蛇、食物、障碍、游戏面板等不同对象的类,各个类的具体功能见表1。表1 游戏类模块表序号类名主要功能1GameStart该文件为程序入口,含有main方法2GameFrame用来设计游戏的用户界面3GamePanel游戏控制面板,作为整个程序的控制器4GameConstant该文件为一个工具类,存放一些常量5Food该文件实现食物类6
25、Barrier该文件实现障碍物类7Snake该文件实现蛇类8GameRecords该文件用于实现玩家的排行榜9Record记录玩家信息的类10ReadRecord读取玩家信息11WriteRecord写入玩家信息第4章 详细设计系统详细设计主要对贪吃蛇游戏各模块的功能、性能、输入输出、算法、接口、程序逻辑等给出详细的设计方案,为软件开发制定详细的计划,这是程序员进行开发及未来测试的最重要步骤。4.1程序设计思路系统的事件控制器也叫事件监听器,是整个系统的核心,主要负责对按键事件与逻辑事件的处理,事件监听器主要由ActionListener接口和KeyListener接口实现。贪吃蛇通过键盘控制
26、蛇的运动方向是由KeyListener来负责监听,游戏的其他按键事件如游戏开始、暂停、退出等以及各种逻辑事件如判断游戏是否结束是由ActionListener负责监听,事件监听机制如图7所示。事件控制器处理按键事件处理逻辑事件触发按键事件Snake蛇GamePanel重新显示根据不同情况,向Snake、Food、Barrier发出不同指令Barrier障碍物Food食物图7 事件监听机制图4.2类模块具体设计4.2.1 GameStart类此类为程序的入口类,定义了GameFrame的对象frame,实现游戏的初始化。4.2.2 GameFrame类(1)此类定义了用于实现游戏界面按钮功能的全
27、部变量,如描述游戏开始菜单项、游戏结束菜单项、游戏加速菜单项等,详细内容见表2。表2 成员变量表成员变量描述变量类型名称选项菜单栏JMenuBarmenuBar游戏面板private GamePanelpanel速度标签private intspeedFlag设置菜单private JMenusetMenu帮助菜单private JMenuhelpMenu开始菜单项private JMenuItemstartGame暂停菜单项private JMenuItempauseGame游戏加速项private JRadioButtonMenuItemspeedGame打开进度项private JMen
28、uItemloadGame保存进度项private JMenuItemsaveGame排行榜项private JMenuItemrecordGame(2)以下为内部私有类,都继承于ActionListener接口,如描述开始游戏、暂停游戏、加载游戏等不同的按键事件,见表3。表3 内部私有类表内部类描述类型名称监听游戏是否要开始privateStartAction监听游戏是否要暂停privatePauseAction监听是否要读取游戏privateLoadAction监听是否要保存游戏privateSaveAction监听是否要加速游戏privateSpeedAction监听是否要打开排行榜pr
29、ivateRecordAction4.2.3 GamePanel类该类为显示面板类,系统的最主要功能如监听机制都由该类来实现。(1)此类定义描述各个不同游戏对象的变量,如蛇对象、障碍对象、食物对象等,主要成员变量见表4。表4 主要成员变量表成员变量描述变量类型名称游戏界面对象private GameFrameframe蛇对象private Snakesnake食物对象private Gridfood石头对象private Barrierbarrier计时器对象private Timertimer是否产生石头booleanneedToGenerateBarrie是否产生食物booleanneed
30、ToGenerateFood游戏网格对象private Gridgrid监听游戏状态对象private TimerActiontimerAction(2)GamePanel类里面共有两个内部私有类,分别为监听按键事件与监听逻辑事件的类,见表5。表5 内部私有类表内部类描述类型名称监听按键事件privateKeyHandler监听逻辑事件privateTimerAction(3)GamePanel类定义了实现系统功能的大部分方法,如游戏初始化、蛇吃掉食物、写入分数等方法,见表6。表6 主要方法表方法名称方法类型功能描述GamePanel()public构造方法Init()private游戏初始化
31、judgeGameOver()private判定游戏是否结束isFoodAvailable()boolean产生石头是否与食物冲突isBarrierAvailable()boolean产生石头石头与墙体冲突generateFoodByRandom()private随机产生食物eatFood()private蛇吃掉食物isSnakeHeadTouchBarrier()boolean蛇是否碰到石头isSnakeHeadTouchBody()boolean蛇石头碰到自身loadGameDataFromFile()private加载记录的逻辑saveGameDataToFile()private保存记
32、录的逻辑writeScore()private写入分数4.2.4 Snake类(1)成员变量有定义方向的变量direction与定义集合类private List的变量list。(2)此类定义了蛇对象实现运动必须具备的几个方法,如自行移动、改变方向等,主要方法见表7。表7 主要方法表方法名方法类型功能描述Snake()public类构造方法changeDirection()public改变蛇体运动Draw()public绘制蛇体Move()public蛇体运动setDirectionpublic设置蛇体运动方向4.2.5 Barrier类此类为描述障碍物的类,通过构造函数由二维数组实现障碍墙体
33、的初始化。4.2.6 Food类此类为描述食物的类。4.2.7 GameRecords类此类用于实现玩家的排行榜功能,主要通过内部类RecordComparator实现Comparator接口来实现功能。4.2.8 Record类此类用于记录玩家游戏过程中的得分信息。4.2.9 GameConstant类此类为工具类,其中存放了其他类中用到的一些常量,如表示蛇运行方向的常量LEFT、RIGHT、UP、DOWN,表示窗体长宽的常量WIDTH、HEIGHT。4.2.10 ReadRecord类 此类为从排行榜读取玩家信息的类,由方法readRecordsFromFile()实现读取功能。4.2.1
34、1 WriteRecord类此类为把玩家信息写入排行榜的类,由方法writeRecordToFile()实现读取功能。4.3 关键功能具体实现4.3.1 蛇、食物、石头的表示我们可以把显示区域想象成一个大大的表格,里面的格子就是组成蛇的基本单位,一个格子可以代表一个食物,也可以代表一个石头,几块连在一起的石头就可以代表一条蛇。使用坐标来区分这些格子,如图8所示。图8 蛇、石头、食物的表示图主要实现代码为:protected void paintComponent(Graphics g) g.setColor(new Color(0xcfcfcf);g.fillRect(0, 0, Global
35、.WIDTH *Global.CELL_SIZE, Global.HEIGHT * Global.CELL_SIZE); if(snake!= null & food != null & ground != null) this.snake.drawMe(g); this.food.drawMe(g); this.ground.drawMe(g);4.3.2 蛇的移动方向表示要区分蛇头和蛇尾巴,这就要求这个数据结构是有序的,还要经常访问第一个和最后一个节点,所以 LinkedList 最合适,因为它有 addFirst(),removeLast()和getLast()等方法。蛇向前移动一步,可
36、以看作是蛇头前面增加了一个节点,蛇的尾巴上少了一个节点(即去尾,加头)。蛇下一步移动到哪里,是由方向来控制的。这里我们用int型常量来表示蛇的移动方向,因为我们是根据原蛇头的坐标和方向来确定新蛇头的坐标。在原坐标的基础上,根据蛇头的运动方向来确定新蛇头的坐标,比如向上移动就是y-1。(1)相反方向。和上一次移动的方向相反的方向称为相反方向,这种方向应该忽略,这样可以防止蛇从自己的身体中穿过。 (2)无效方向。在蛇的这一次移动之后和下一次移动之前这个时间间隔内输入了多个非相反方向,只有最后一个是有效方向,其它的都是无效方向,蛇的最终运动方向以有效方向为准,如图9所示。图9 蛇的移动方式主要实现代
37、码为:public void move()System.out.println(Snakes move);if(!(oldDirection + newDirection = 0)oldDirection = newDirection; oldTail = body.removeLast();int x = body.getFirst().x;int y = body.getFirst().y;switch(oldDirection)case UP:y-;if(y=Global.HEIGHT)y = 0;break;case LEFT:x -;if(x= Global.WIDTH)x = 0;
38、break; Point newHead = new Point(x,y); body.addFirst(newHead); 4.3.3 食物及障碍物的随机生成食物的随机产生是当蛇吃掉食物后,监听器监听到食物被吃掉后,会让Food类再次调用随机生成食物的方法new food(),在游戏面板上随机产生一个食物。随机产生障碍物的功能可以有多种实现,本系统将分数的改变作为产生随机数的条件,分数每增加50分,在原有的基础上随机产生一个障碍物(不改变原来已经有的障碍物位置)。主要实现代码如下:private void generateBarrierByRandom() Random r = new Ra
39、ndom(); int randomX = r.nextInt(SnakeGameConstant.GRID_COLUMN_NUMBER); int randomY = r.nextInt(SnakeGameConstant.GRID_ROW_NUMBER); if (isBarrierAvailable(randomX, randomY) barrier.getBarriersList().add( new Grid(randomX, randomY, Color.YELLOW); needToGenerateBarrie = false; else generateBarrierByRan
40、dom(); 4.3.4 如何判断蛇吃掉食物这里通过判定坐标是否重合来判断,只需要判断蛇头是否和食物重合就可以了,因为蛇的身体都是走蛇头走过的地方。蛇每走动一次,监听器会调用判断食物是否被吃掉的方法isSnakeEatFood(),该方法返回True,则生成新的食物,返回Flase,则蛇继续移动。主要实现代码如下:public boolean isSnakeEatFood(Snake snake)System.out.println(Foods isSnakeEatFood);return this.equals(snake.getHead();public void eatFood()Sys
41、tem.out.println(Snakes eatFood);body.addLast(oldTail);4.3.5 如何实现键盘控制蛇运行方向该功能主要通过实现KeyListener接口实现,把键盘的四个方向键分别定义为常量LEFT、RIGHT、UP、DOWN,当发生方向按键事件时,监听器会把表示方向的常量Direction传递给Snake类的move()方法,监听器会根据传递过去的方向来判断蛇的移动方向,如果为有效方向,则蛇头根据传过来的方向移动,如果为相反方向或者无效方向,则忽略传递过来的方向,按照原来的方向继续移动。主要实现代码如下:public void keyPressed(Ke
42、yEvent e) switch(e.getKeyCode()case(KeyEvent.VK_UP):snake.changeDirection(Snake.UP);break;case KeyEvent.VK_DOWN:snake.changeDirection(Snake.DOWN);break;case KeyEvent.VK_LEFT:snake.changeDirection(Snake.LEFT);break;case KeyEvent.VK_RIGHT:snake.changeDirection(Snake.RIGHT);break;4.3.6 如何判断游戏结束蛇移动后可能会出
43、现三种情况,吃掉食物、碰到障碍、碰到自身,如果吃掉食物则生成新的食物然后游戏继续,如果碰到障碍或者自身则游戏结束。监听器会根据Snake类的isSnakeEatFood()方法与isSnakeEatRock()来判断是否碰到自身或者障碍,如果碰到,则调用die()方法,游戏结束。主要实现代码如下:public void snakeMoved(Snake snake) this.snake = snake;if(food.isSnakeEatFood(snake)snake.eatFood();food.newFood(ground.getPoint();if(ground.isSnakeEatRock(snake)snake.die(); gamePanel.display(snake,food,ground);4.3.7 如何实现游戏进度的保存与加载游戏进度的保存和加载功能是通过序列化和反序列化来完成的。