java实现贪吃蛇Word格式.docx
《java实现贪吃蛇Word格式.docx》由会员分享,可在线阅读,更多相关《java实现贪吃蛇Word格式.docx(24页珍藏版)》请在冰豆网上搜索。
2.2应用环境………………………………………………………………3
2.3java介绍…………………………………………………………3
2.3.1java语言的特点……………………………………………………4
2.3.2java的主要特征……………………………………………………4
3.系统需求分析……………………………………………………………5
3.1需求分析………………………………………………………………5
3.2可行性分析……………………………………………………………5
4.概要设计……………………………………………………………7
4.1设计思路………………………………………………………………7
4.2设计方法………………………………………………………………7
5.游戏中所需的实体类分析与实现………………………………………7
5.1游戏显示面板(SnakePanel)类……………………………………7
5.2蛇(Snake)类…………………………………………………………8
5.3食物类(Egg)类……………………………………………………8
5.4游戏窗口(SnakeFrame)类………………………………………8
6.游戏详细设计……………………………………………………………8
7.重难点分析……………………………………………………………11
7.1监听事件的实现……………………………………………………11
7.2蛇身移动的线程实现……………………………………12
7.3项目的主程序入口设计……………………………………………13
7.4蛇的数据结构设计与移动显示…………………………14
7.5修正蛇的移动与显示问题…………………………………………17
7.6编写与测试表示食物的类并实现吃食物………………………18
参考文献……………………………………………………………………21
致谢………………………………………………………………………22
内容摘要:
本文用J2SE实现大家耳熟能详的一个贪吃蛇游戏来综合运用所学知识,本游戏运用软件工程思想(螺旋模型),打好游戏主体框架,JAVA的面向对象思想,封装类,接口等概念,来完成本游戏,达到综合运用知识的目的。
关键词:
中央控制器;
游戏面板;
食物;
蛇
Abstract:
Inthispaper,J2SEimplementationofaSnakegamefamiliartotheintegrateduseofwhattheyhavelearned,thisgameistheuseofsoftwareengineeringthinking(spiralmodel),themainframeworkofthefightgame,JAVAobject-orientedthinking,wrapperclasses,interfaceconceptstocompletethisgame,hittingtheintegrateduseofknowledgeandpurpose.
⑴.Thegamedevelopmentplatform:
WINXP;
⑵.JAVADevelopmentEnvironment:
JDK1.5+Eclipse;
⑶.DevelopmentLanguages:
J2SE
Keywords:
Controller;
GamePanel;
Food;
Snake;
1.引言
1.1课题背景与意义
贪吃蛇,手机上一个必不可少的游戏。
但是你知道贪吃蛇这个游戏的由来吗?
据说,蛇引诱夏娃吃了苹果之后,就被贬为毒虫,阴险的象征。
而蛇吃东西是整只动物吞进去的,大概在文艺复兴的时候就有人发明的一种游戏,是现在贪吃蛇的前身。
后来慢慢的发展就变成了今天的贪吃蛇了。
贪吃蛇是大众化的一个程序,人们手机中是一个很常见的一个游戏,人们对它并不陌生,在紧张的现在生活中给人们带来了不少的乐趣,我写的这个贪吃蛇游戏能满足人们业余时间的适当放松,再紧张的生活节奏中适当的放松一下,保持好的心态。
在这个程序中我用了Java语言来编写,运用了Java中的一些常用的功能,Java语言是在国内外广泛使用的一种语言。
Java语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好,纯粹的面向对象的编程,特别适合用于编写应用软件。
1.2JAVA游戏的现状与概述
在现今电子信息高速发展的时代,电子游戏已经深入人们的日常生活,成为老少皆宜的娱乐方式。
但是游戏设计结合了日新月异的技术,在一个产品中整合了复杂的设计、艺术、声音和软件,所以并不是人人皆知。
直到今天,在中国从事游戏设计的人仍然很少,但是游戏行业的发展之快,远超如家电、汽车等传统行业,也正因为如此,游戏人才的教育、培养远落后于产业的发展。
Java作为一种分布式和可移植的计算机语言,在软件开发上有着特别的优点。
它开发方便、快捷,安全性高,在当今计算机飞速发展的时代,Java技术的平台无关性、可重用性、模块化等特点大大减少了重复劳动。
本论文介绍的是使用Java开发的贪吃蛇游戏,本游戏的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高。
选择JAVA作为编程语言。
需要对其变量定义、变量初始化、界面初始化、游戏初始化、然后进入游戏、处理游戏过程中的各种操作熟悉。
此次设计在MicrosoftWindowsXP系统下,以Java为开发语言,在Eclipse平台上进行游戏的开发。
2.系统开发环境
2.1开发工具
SunMicrosystems公司在推出Java语言的同时,推出了一套开发工具JDK。
Sun提供的基于字符模式的Java开发工具包JDK:
Java开发工具(JDK)是许多Java专家最初使用的开发环境。
Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。
Java源程序编写借助于记事本,Editpuls,UltraEdit等第三方编辑工具。
所有的Java文件编辑、编译、调试、解释运行都是通过使用字符命令来执行操作。
JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。
其核心JavaAPI是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。
JDK是整个Java的核心,包括了Java运行环境(JavaRuntimeEnvirnment),一堆Java工具和Java基础的类库(rt.jar)。
不论什么Java应用服务器实质都是内置了某个版本的JDK。
因此掌握JDK是学好Java的第一步。
JDK里面是java类库和java的语言规范,它提供的是无论你用何种开发软件写java程序都必须用到的类库和java语言规范.没有jdk,你的java程序根本就不能用。
最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。
其中IBM的JDK包含的JVM(JavaVirtualMachine)运行效率要比SunJDK包含的JVM高出许多。
而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。
但不管怎么说,我们还是需要先把SunJDK掌握好。
2.2应用环境
⑴.本游戏开发平台:
WINXP;
⑵.JAVA开发环境:
JDK1.5+Eclipse;
⑶.开发语言:
J2SE
2.3java介绍
2.3.1JAVA语言的特点
Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。
2.3.2JAVA的主要特性
JavaJ语言是简单的。
Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。
JavaJ语言是一个面向对象的。
Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。
Java语言是分布式的语言是分布式的。
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(javanet),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。
Java语言是健壮的。
Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。
Java语言是安全的。
Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。
除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。
Java语言是体系结构中立的。
Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节。
Java语言是可移植的。
这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。
Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSIC实现的。
Java语言是解释型的。
如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。
在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
Java是高性能的。
与那些解释型的高级脚本语言相比,Java的确是高性能的。
事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
Java语言是多线程的。
在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。
Java语言是动态的。
Java语言的设计目标之一是适应于动态变化的环境。
Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。
3.系统需求分析
3.1需求分析
本系统主要是完成贪吃蛇游戏的基本操作。
用户可以自己练习和娱乐。
本系统需要满足以下几点要求:
(1)利用方向键来改变蛇的运行方向。
(2)空格键暂停或继续游戏,并在随机的地方产生食物。
(3)吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。
3.2可行性分析
贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个贪吃蛇游戏。
贪吃蛇的核心算法时如何实现移动和吃掉食物,没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架内部背景色重绘出队的节点,这样就可以达到移动的效果。
而在吃到食物的时候,则只需把食物入队即可。
实现贪吃蛇的基本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够暂停和开始。
本次设计我将主要运用java语言来完成。
Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。
由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。
如果没有安全保证,用户从网络下载程序执行就非常危险。
Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。
4.概要设计
4.1设计思路
本次设计的重点之处在于编程思想的形成,设计图像界面,产生随机食物及其位置。
这个程序的关键是表示蛇的图形以及蛇的移动。
用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块。
移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。
如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇。
4.2设计方法
(1)总体设计流程图,如下图所示:
是
否
是
是否
5.游戏中所需的实体类分析与实现
㈠涉及到几个对象(类)
㈡每个类有什么方法
5.1游戏显示面板(SnakePanel)类
该类有一下几个方法
voidpaint();
//用来显示游戏面板
VoidKeyPassed();
//键盘控制
VoidstartRun();
//线程实现移动
5.2蛇(Snake)类,该类有一个方法:
voidmove();
//移动
5.3食物类(Egg)类
5.4游戏窗口(SnakeFrame)类,该类有以下方法:
Voidmain();
主方法,运行程序
showMe();
显示游戏开始的界面
6.详细设计
本有序遵循MVC(Model-View-Controller)所以首先建立以上几个实体类并定义相应的包名rac下:
Egg、Snake、SnakeFrame、SnakePanel四个类,按照以上说明的各个类具有的方法,写上如下代码:
Egg类
packagerac;
importjavax.swing.JPanel;
publicclassEgg{
intx;
inty;
intlength;
JPanelpanel;
}
Snake类
importjava.util.Arrays;
publicclassSnake{
publicfinalstaticintUP=0;
publicfinalstaticintDOWN=1;
publicfinalstaticintLEFT=2;
publicfinalstaticintRIGHT=3;
int[]x;
int[]y;
intdirection;
intspeed;
booleanstarted;
booleandead;
publicSnake(){
}
//移动控制
publicvoidmove(){
switch(direction){
caseUP:
if(y[0]>
=0&
&
started){
for(inti=x.length-1;
i>
0;
i--){
x[i]=x[i-1];
y[i]=y[i-1];
//蛇吃蛇情况
if(i>
4&
x[i]==x[0]&
y[i]==y[0]){
dead=true;
}
}
y[0]-=speed;
if(y[0]<
0){
for(inti=x.length-1;
x[i]=x[i-1];
y[i]=y[i-1];
y[0]=0;
dead=true;
}
break;
}
SnakeFrame类
importjavax.swing.JFrame;
publicclassSnakeFrameextendsJFrame{
privateSnakePanelpanel;
publicSnakeFrame(){
panel=newSnakePanel();
this.addKeyListener(panel);
this.add(panel);
panel.startRun();
publicvoidshowMe(){
this.setSize(1000,640);
this.setTitle("
贪吃蛇"
);
this.setVisible(true);
this.setDefaultCloseOperation(SnakeFrame.EXIT_ON_CLOSE);
publicstaticvoidmain(String[]args){
newSnakeFrame().showMe();
SnakePanel类
7.重难点分析
7.1监听事件的实现
由于蛇不能直接操作显示面板(GamePanel)所以这里定义一个监听器里面定义一个方法:
voidsnakeMove(Snake);
每当蛇移动一步就触发监听器,调用snakeMoved()由Controller去实现,然后由控制器去触发显示面板的事件源,让显示面板完成相应操作。
逻辑图如下:
图2事件监听建立联系
在Snake中增加蛇的方向常量:
publicfinalstaticintUP=0;
实现move()方法
7.2蛇身移动的线程实现
线程实现移动
publicvoidstartRun(){
newThread(){
publicvoidrun(){
while(true){
snake.move();
try{
Thread.sleep(level);
}catch(InterruptedExceptione){
e.printStackTrace();
repaint();
}.start();
7.3项目的主程序入口设计
运行这个带有main()的类,当蛇移动一次,就触发监听器,有控制器(controller)给SnakeFrame发送指令,让它重画,SnakePanel中