贪吃蛇的研究与设计.docx
- 文档编号:24381692
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:33
- 大小:32.70KB
贪吃蛇的研究与设计.docx
《贪吃蛇的研究与设计.docx》由会员分享,可在线阅读,更多相关《贪吃蛇的研究与设计.docx(33页珍藏版)》请在冰豆网上搜索。
贪吃蛇的研究与设计
技术师学院天河学院
JAVA程序设计课程设计报告
题目:
______贪吃蛇的研究与设计____
学号:
2012041543210__
2012041543210_2012041543210___
班级:
______本软件122班__________
小组成员:
___林盛东郭威更明____
指导教师:
英姿
所属系部:
计算机科学与技术系
2014年4月25日
贪吃蛇的研究与设计
摘要
近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。
“贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。
本文基于Java技术和NetBeans开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。
整个游戏程序分为二个功能模块,八个类模块,实现了游戏的开始、暂停、结束。
通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。
本文在介绍Java相关技术和国外发展现状的基础上,对“贪吃蛇”游戏的整个生命周期的各个开发阶段进行了详细地介绍。
首先,分析了开发本游戏软件的可行性,重点分析本设计所采用的技术的可行性。
其次,从游戏主界面等几方面,分析了本游戏的功能需求;从可使用性和安全性方面分析了属性需求。
然后,进行了游戏的概要设计和详细设计,这也是本文的重点。
概要设计给出二个功能模块的主框架以及八个类模块的函数调用关系;详细设计介绍了Java2标准运行环境的配置,重点给出各个类模块的程序列表,介绍了各个类包含的变量、使用的方法,展示了游戏的界面。
为了保证程序代码的正确性和功能实现的可靠性,本文还介绍了游戏软件的程序调试过程和功能测试结果。
关键词:
Java;NetBeans;贪吃蛇;开发流程
1引言
1.1课题介绍
贪吃蛇是世界知名的益智类小游戏,选择这个题目一方面的原因是为了将我们自己的所学知识加以运用;另一方面,虽然很小就接触这个游戏,但是它的制作方法对我们而言还是很神秘的。
我们希望通过自己的所学知识把它剖析开来,通过自己的动手实践,真正的了解它的本质和精髓。
希望通过这次实践,我们能从中提高自己的编程能力。
并从中学会从零开始分析设计程序。
本游戏的开发语言为Java。
开发工具选用NetBeans。
Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。
这里采用Java作为开发语言主要是基于Java的面向对象和可移植性。
NetBeans是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
数据结构是计算机存储、组织数据的方式。
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。
数据结构往往同高效的检索算法和索引技术有关。
类是面向对象程序设计语言中的一个概念。
类(Class)实际上是对某种类型的对象定义变量和方法的原型。
它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。
类是对某个对象的定义。
它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。
实际上它本身并不是对象,因为它不存在于存中。
当引用类的代码运行时,类的一个新的实例,即对象,就在存中创建了。
虽然只有一个类,但能从这个类在存中创建多个相同类型的对象。
1.2设计的背景和意义
贪吃蛇游戏一款非常经典的手机游戏,因为它比较简单有趣,无论老少都比较适合。
贪吃蛇的设计对每一个Java语言设计者进行语言提高和进阶都是一个很好的锻炼机会。
贪吃蛇游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。
在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。
因此,如何设计和开发好这个贪吃蛇游戏,对于提高Java开发水平和系统的设计能力有极大的帮助。
在设计开发过程中,需要处理好各个类之间的继承关系,还要处理各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。
正是因为如此,本次毕业设计的目的在于学习Java程序设计基本技术,学习用NetBeans开发Java程序的相关技术,熟悉游戏“贪吃蛇”的需求,熟悉项目开发的完整过程。
学会怎样进行一个项目的需求分析、概要设计、详细设计等软件开发过程,熟练地掌握Java程序设计的基本技术和方法,熟练地掌握NetBeans环境的使用方法,培养起初步的项目分析能力和程序设计能力。
2系统分析
2.1可行性分析
贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。
贪吃蛇的核心算法时如何实现移动和吃掉食物,没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架部背景色重绘出队的节点,这样就可以达到移动的效果。
而在吃到食物的时候,则只需把食物入队即可。
实现贪吃蛇的基本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够暂停和开始。
本次设计我将主要运用java语言来完成。
Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。
由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。
如果没有安全保证,用户从网络下载程序执行就非常危险。
Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。
2.2系统需求分析
2.2.1功能需求
本系统主要是完成贪吃蛇游戏的基本操作。
用户可以自己练习和娱乐。
本系统需要满足以下几点要求:
(1)利用方向键来改变蛇的运行方向。
(2)空格键暂停或继续游戏,并在随机的地方产生食物。
(3)吃到食物就变成新的蛇体,碰到墙或者自身则游戏结束,否则正常运行。
2.2.2性能需求
本软件在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。
2.2.3界面需求
游戏主界面模块:
主要包括游戏图形区域界面、游戏开始按钮、暂停游戏按钮、关闭按钮。
游戏的主界面力求美观,爽心悦目。
游戏控制模块:
主要完成控制游戏的开始、暂停、退出等功能,这部分做到易懂、易操作而且准确率高,不易出错。
游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、游戏分数的显示更新界面、新生方块的预览、游戏开始按钮、暂停游戏按钮、退出游戏按钮以及游戏排行榜按钮。
从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面力求美观,爽心悦目。
游戏控制模块是游戏的中心环节,主要完成控制游戏的开始、暂停、退出等功能。
为了能够给玩家一个很好的游戏环境,这部分做到易懂、易操作。
2.3开发环境
操作系统及版本:
Windows7
工具软件:
jdk1.7,NetBeans
编程语言:
JAVA语言
3系统概要设计
3.1程序流程图
3.2类模块设计
本系统共包括8个类文件。
java源文件及其功能如表所示。
表3.1java源文件及其功能
序号
文件名
主要功能
1
Main
该文件为程序入口,含有main方法。
2
MainGui
主界面类,该类用来创建游戏的用户界面,继承自JFrame类。
对主窗口的属性的设置、注册监听者等
3
SnakeKeyListener
蛇的监听器,根据按键改变蛇的方向、速度等设置
4
Food
该文件实现组成蛇身的单位-食物。
5
Box
该文件实现蛇的活动场所
6
Snake
该文件实现蛇类,包含有关蛇的方法属性
7
Clock
该文件为工具类,实现时间,速度的控制
8
PropertyPanel
settingPanel的可视化设置.设置游戏运行状态,移动以及分数更新,实现上下左右移动的方法接口。
3.3系统数据结构设计
3.3.1蛇、食物的表示
我们可以把显示区域想象成一个大大的表格,里面的格子就是组成蛇的基本单位,一个格子可以代表一个食物,使用坐标来区分这些格子。
3.3.2蛇的移动
蛇向前移动一步,可以看作是蛇头前面增加了一个节点,蛇的尾巴上少了一个节点(即去尾,加头)
3.3.3存储蛇身的数据结构
由于要区分蛇头和蛇尾,因此这个数据结构必须是有序的。
另一方面,我们需要经常的访问第一个和最后一个节点,所以LinkedList最合适。
因为它有getFirst(),getLast(),和removeLast()方法。
3.3.4蛇的移动方向
这里讨论蛇的移动方向控制。
蛇下一步移动到哪里,是由方向来控制的。
这里我们用int型常量来表示蛇的移动方向。
因为我们是根据原蛇头的坐标和方向来确定新蛇头的坐标。
在原坐标的基础上,根据蛇头的运动方向来确定新蛇头的坐标,比如向上移动就是y-1.
3.3.5如何显示蛇身
显示蛇身,其实就是填充用颜色填充格子。
需要4个参数,像素坐标x,像素坐标y,格子宽度,格子高度。
像素坐标就是矩形左上角的坐标
3.3.6蛇身的移动方向
(1)相反方向
和上一次移动的方向相反的方向称为相反方向,这种输入应该忽略。
这样可以防止蛇从自己的身体中穿过。
(2)无效方向
在蛇的这一次移动之后和下一次移动之前这个时间间隔输入了多个非相反方向,只有最后一个是有效方向,其他的都是无效方向。
蛇的最终运动方向以有效方向为准。
3.3.7吃到食物判定
这里通过判定坐标是否重合来判断,只需要判断蛇头是否和食物重合就可以了,因为蛇的身体都是走蛇头走过的地方。
4系统详细设计与实现
4.1程序设计
4.1.1主类Main
(1)主类为此程序的入口,定义了Main的对象frame,开始运行此程序。
(2)源代码见文件Main.Java
4.1.2类MainGui
(1)成员变量见表4.1
表4.1主要成员变量
成员变量描述
变量类型
名称
设置面板
privatesettingPanel
settingPanel
按键监听
privatekeyListener
keyListener
蛇场对象
privateBox
Box
主窗口高度
intwindowHeight
windowHeight
主窗口宽度
intwindowWidth
windowWidth
(2)方法见表4.2
表4.2主要方法
方法名
功能
addListener()
注册监听
getBox()
更新蛇长
getSettingPanel()
更新方向
4.1.3类Snake
(1)成员变量见表4.3
表4.3主要成员变量
成员变量描述
变量类型
名称
上下左右(方向)
Int
UP、DOWN、LEFT、RIGHT
蛇体
LinkedList
body
蛇场
Box
box
前进方向
int
direction
是否活着
boolean
islive
颜色
Color
snakeColor
下一节点坐标
Point
nextSite
(2)方法见表4.4
表4.4主要方法
方法名
功能
init()
初始化蛇,方向初始化为向右,增加初始的节点
countNewSite()
计算下一个位置
drawMe()
将蛇画出
stareNewGame()
死亡之后重新开始游戏
4.1.4类Food
(1)成员变量见表4.5
表4.5主要成员变量
成员变量描述
变量类型
名称
颜色
foodColor
Color
表4.6主要方法
方法名
功能
drawMe()
将食物画出
newMe()
重新产生一个食物
4.1.5类Box
蛇场类。
继承自JPanel,Box,蛇的活动场所,也是食物出现的地方.重写了该类的paint()方法,当重绘时时会调用蛇、食物、网格的绘制方法。
由定时器Timer控制,每隔delay时间,执行:
1.重新计算一下位置2.绘制新图像3.更新属性面板的显示,即该游戏的主要原理。
属性面板的时间由countTimer中获取,运行在另外一个线程中,减小计时的误差
4.1.6类SnakeKeyListener
此类为蛇的监听类,实现蛇运动的监听,根据按键改变蛇的方向、速度等设置
该类包含控制器和处理按键逻辑,控制器,控制Box,Snake,Food.负责游戏的逻辑.处理按键事件,可以处理Snake触发的事件,该类覆盖keyPressed()方法:
处理按键事件,根据按键不同,发出不同的指令:
UP:
改变蛇的移动方向为向上
DOWN:
改变蛇的移动方向为向下
LEFT:
改变蛇的移动方向为向左
RIGHT:
改变蛇的移动方向为向右
newGame()开始新游戏的方法
源代码见文件SnakeKeyListener.java
4.1.7类Clock
主要功能是计时。
源代码见文件Globel.java
4.1.8类PropertyPanel
settingPanel的可视化设置.设置游戏运行状态,移动以及分数更新,实现上下左右移动的方法接口。
源代码见文件PropertyPanel.java
4.2各功能界面截图
4.2.1贪吃蛇游戏的基本运行界面
图4.1初始界面
图4.2控制面板
4.2.2程序开始运行界面
(1)按enter键开始游戏,并有暂停和继续功能:
图4.4开始游戏(地图1)
(2)、在蛇运动过程中可以按F11、F12或Z、X进行减速或加速。
(3)、当蛇运动过程中碰到壁时会死亡,选择是否继续。
如图
(3)游戏过程中,若蛇头碰到蛇尾则游戏结束,选择是否继续
5测试
5.1测试的意义
系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。
测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。
应根据开发各阶段的需求、设计等文档或程序的部结构精心设计测试用例,并利用这些实例来运行程序,以便发现错误。
系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析系统设计和实施的最后复查。
根据测试的概念和目的,在进行信息系统测试时应遵循以基本原则。
(1)拟定测试计划。
在制定测试计划时,要充分考虑整个项目的开发时间和开发进童以及一些人为因素和客观条件等,使得测试计划是可行的。
测试计划的容主要有测试的容、进度安排、测试所需的环境和条件、测试培训安排等。
(3)根据测试大纲设计和生成测试用例。
在设计测试用例的时候,可综合利用前面介绍的测试用例和设计技术,产生测试设计说明文档,其容主要有被测项目、输人数据、测试过程、预期输出结果等。
(4)实施测试。
测试的实施阶段是由一系列的测试周期组成的。
在每个测试周期中,测试人员和开发人员将依据预先编制好的测试大纲和准备好的测试用例,对被测软件或设备进行完整的测试。
(5)生成测试报告。
测试完成后,要形成相应的测试报告,主要对测试进行概要说明,列出测试的结论,指出缺陷和错误,另外,给出一些建议,如可采用的修改方法,各项修改预计的工作量及修改的负责人员。
程序运行正常,没有发现什么错误。
6结论
通过这次课程设计,我对上学期所学的JAVA语言程序设计有一个更深刻的了解,将所学的知识应用于实践,由于所学知识有限,为了使游戏能够能够实现自己预先的构想,我们这组通过上网找代码和去图书馆借书找程序,比较画好的流程图及功能模块,不断阅读修改代码使程序达到预期所要实现的目标,完成课程设计后,可以感觉到自己对Java程序的又有了新的认识。
在做Java设计之前也有做过其他的课程设计,大多规模很小。
综合运用以前所学习的知识,设计一个JAVA小游戏即贪吃蛇,并能实现以下的功能:
游戏背景及样式的控制、蛇与食物的颜色控制、游戏的速度控制、游戏暂停、游戏重新开始、游戏的结束。
因为其各个模块间的联系十分紧密,代码重复执行率高,当经过无数次的调试、修改后,能最终看到成品,有无比自豪的心情。
总之,通过本次的课程设计,使我平时学到的理论知识得到了很好地升华,理论与实际得到一次很好的结合,为我今后参加工作打下了坚实的基础,使我受益匪浅。
参考文献
[1]NarcisioTumushabe,TANGuan-zhengAnoverviewofauthenticationsecurityfeaturesinASP.NET,《SchoolofComputerScienceandInformationTechnology》2003(3)
[2]AndersHejlsbergScottWiltamuthPeterGolde.TheC#ProgrammingLanguage[M].POSTS&TELECOMPress,2008.
[3]KarliWatson.BeginningVisualC#2005[M].Wrox,2005
[4]马拉,许锦兴.校友通信录的UML建模和C#实现[J].计算机与数字工程,2008年第12期
[5]徐龙.基于ASP.NET技术的电子留言板设计与实现[J].电脑知识与技术,2009年第25期
[6]震.广播电视大学校友录系统的实现[J].广播电视大学学报,2009年第1期
[7]马骏,逢斌,夏炯.C#网络应用高级编程.人民邮电,2009
[8]梅晓冬,颜烨青.VisualC#网络编程技术与实践.清华大学,2008.
[9]军伟.基于三层框架的C#ASP.NE工程序设计[J].电脑编程技巧与维护,2010年第9期
[10]克成,凌晓.C#程序设计.中国铁道,2009.
[11]艾侠.基于A的webservice调用[J].科技信息,2010,第23期
[12]任艳斐基于VS.NET动态移动Web查询系统的设计,《通信技术》2008年4期
[13]王西锋,晓孪.应用程序中数据库自动备份的实现[J].《现代电子技术》2008年8期
附录主要代码清单
一.MainGui
importjava.awt.BorderLayout;
importjava.awt.Dimension;
importjava.awt.Toolkit;
importjavax.swing.JFrame;
importmysnake.box.Box;
importmysnake.contral.SnakeKeyListener;
importmysnake.settingground.PropertyPanel;
publicclassMainGuiextendsJFrame{
intwindowHeight;//加数字是为了显示效果,下同
intwindowWidth;
privateBoxbox=newBox(this);
SnakeKeyListenerkeyListener=newSnakeKeyListener(this);
privatePropertyPanelsettingPanel=newPropertyPanel();
publicMainGui(){
super("贪吃蛇1.0");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
windowWidth=880+17;
windowHeight=600+40;
Toolkitkit=Toolkit.getDefaultToolkit();//定义工具包
DimensionscreenSize=kit.getScreenSize();//获取屏幕的尺寸
intscreenWidth=screenSize.width;//获取屏幕的宽
intscreenHeight=screenSize.height;//获取屏幕的高
setLocation(screenWidth/2-windowWidth/2,
screenHeight/2-windowHeight/2);//设置窗口居中显示
setSize(windowWidth,windowHeight);
setLayout(newBorderLayout());
add(box,BorderLayout.CENTER);
add(settingPanel,BorderLayout.SOUTH);
addListener();
setVisible(true);
getBox().requestFocus();
}
publicBoxgetBox(){
returnbox;
}
privatevoidaddListener(){
this.addKeyListener(keyListener);
box.addKeyListener(keyListener);
settingPanel.addKeyListener(keyListener);
settingPanel.getRuleText().addKeyListener(keyListener);
}
publicPropertyPanelgetSettingPanel(){
returnsettingPanel;
}
}
二.Box.java
importmysnake.MainGui;
importjava.awt.Color;
importjava.awt.Graphics;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JPanel;
importjavax.swing.Timer;
importmysnake.settingground.Clock;
publicclassBoxextendsJPanel{
MainGuigui;
privateSnakesnake;
privateFoodfood;
privateTimertimer;
privateintdelay=100;
privateColorbackgroundColor=Color.DARK_GRAY;
privateColorwebColor=Color.DARK_GRAY;
privateintwebStyle=1;
privateClockclock;
publicBo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪吃 研究 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)