贪吃蛇系统doc.docx
- 文档编号:5396756
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:41
- 大小:1.90MB
贪吃蛇系统doc.docx
《贪吃蛇系统doc.docx》由会员分享,可在线阅读,更多相关《贪吃蛇系统doc.docx(41页珍藏版)》请在冰豆网上搜索。
贪吃蛇系统doc
单位xxxxxxxxxxx
学号xxxxxxxxx
xxxxxxxxxxxxxx本科毕业论文
(信息管理与信息系统专业)
JAVA贪吃蛇、俄罗斯方块游戏的开发
姓名xxxxxx_
专业信息管理与信息系统_
指导教师______xxxxxxx______
xxxxxxxxxxxxx学院
二0一二年十一月
论文独创性声明
本人声明,所呈交的学位论文系在导师指导下独立完成的研究成果。
文中合法应用他人的成果,均已做出明确标注或得到许可。
论文内容未包含法律意义上已属于他人的任何形式的研究成果,也不包含本人已用于其他学位申请的论文或成果。
本文如违反上述声明,愿意承担以下责任后后果:
1.交回学校授予的学士学位;
2.学校可在相关媒体上对本人的行为进行通报;
3.本文按照学校规定的方式,对因不当取得学位给学校造成的名誉损害,进行公开道歉;
4.本人负责因论文成果不实产生的法律纠纷。
论文作者签名:
日期:
年月日
摘要
Java是由sun公司在1995年推出的一门面向对象的编程语言。
由于Java具有简单、可移植性强、平台无关性、面向对象、多线程等特性,成为了当今大家广泛使用的网络编程语言。
Eclipse是一个基于Java的、可扩展的体系结构的应用开发平台,为编程人员提供了一个良好的Java集成开发环境。
贪吃蛇和俄罗斯方块游戏是80、90后童年的回忆,堪称两款比较经典的游戏。
游戏因操作简单、趣味性强而广受大家的欢迎。
身为90后的我,通过结合大学四年所学知识,使用Java语言和Eclipse开发工具完整的实现了两款游戏的开发,也圆了自己儿时的一个‘梦’。
【关键词】贪吃蛇;俄罗斯方块;Java;Eclipse
Abstract
Javaisbysuncompanyin1995launchedanobject-orientedprogramminglanguage.BecauseofJavaissimple,portabilitystrong,platformindependence,object-oriented,multithreadingfeatures,becomethecurrentwidespreaduseofnetworkprogramminglanguage.EclipseisabasedonJava,extensiblesystemstructureoftheapplicationdevelopmentplatformforprogrammingstaffprovidesagoodJavaintegrateddevelopmentenvironment.
Snakeandtetrisgameis80,90afterchildhoodmemories,thistwoparagraphsmoreclassicgame.Thegamebecauseoftheoperationissimple,interestingstrongandwidewelcome.Asthe90'sI,bycombiningtheuniversityforfouryearsknowledge,theuseofJavaandEclipsedevelopmenttoolscompleterealizedthetwogamedevelopment,alsoroundhischildhooda"dream".
【KeyWords】Snake;Tetris;Java;Eclipse;
目录
摘要I
AbstractII
绪论1
1游戏开发环境的搭建2
1.1JDK的作用及配置2
1.2使用Eclipse的好处3
1.3游戏应用环境4
2游戏分析5
2.1贪吃蛇的需求分析5
2.2俄罗斯方块的需求分析5
2.3游戏可行性分析6
3贪吃蛇的详细设计7
3.1贪吃蛇的设计目标7
3.2贪吃蛇数据结构的设计7
3.3贪吃蛇的主要功能代码11
4俄罗斯方块的详细设计17
4.1俄罗斯方块的设计目标17
4.2俄罗斯方块数据结构的设计17
4.3俄罗斯方块的主要功能代码20
5游戏演示27
5.1贪吃蛇功能界面截图27
5.2俄罗斯方块游戏功能截图31
结论36
参考文献37
致谢38
绪论
我们曾经讨论过游戏的利与弊,德国诗人席勒说过:
“人类在生活中要受到精神和物质双重的约束,在这些约束中就失去了理想和自由。
于是人们利用剩余的精神创造一个自由的世界,它就是游戏。
”也就是说,我们的生活少不了游戏,游戏是一种创造活动,产生于人类的本能。
它能释放压力,锻炼反应能力和逻辑思维能力。
随着电子技术的发展,越来越多的人在使用智能手机。
智能手机的兴起,给电子游戏提供了新的应用平台。
人们只要在自己的手机上下载安装,就能随时随地玩游戏了。
电子产品的更新,使得游戏产业蓬勃发展。
游戏应用的开发,能带来巨大的利益。
贪吃蛇和俄罗斯方块游戏是80、90后童年的回忆,堪称两款比较经典的益智游戏。
游戏因操作简单、趣味性强而广受大家的欢迎。
通过游戏能锻炼人们的反应能力和逻辑思维能力。
这两款游戏随着我国电子产品和计算机的发展而发展,并不断衍生出不同的版本和类似的游戏,非常受广大游戏爱好者的喜爱。
虽然不同的版本,有不同的功能和难度,但是游戏的运作原理和数据结构是一样的。
在游戏的开发中,有很多计算机语言。
Java是由sun公司在1995年推出的一门面向对象的编程语言。
由于Java具有简单、可移植性强、平台无关性、面向对象、多线程等特性,成为了当今大家广泛使用的网络编程语言。
身为90后的我,通过结合大学四年所学知识,使用Java语言和Eclipse开发工具完整的实现了两款游戏的开发,也圆了自己儿时的一个’梦’。
本论文首先,在了解游戏大概的前提下对游戏开发进行可行性分析,尤其是对技术可行性分析。
其次,从游戏界面、游戏规则等方面,对两款游戏进行了功能需求分析。
然后,对游戏进行详细的设计与实现,这是本论文的重点。
在详细设计中介绍了游戏的面向对象设计思想,各个类的联系及方法的实现,并展现游戏的各个功能界面。
1游戏开发环境的搭建
为了能顺利的进行游戏的开发,本游戏采用JAVA编程语言并使用Eclipse集成开发工具。
本章主要介绍,游戏开发环境的搭建。
1.1JDK的作用及配置
JDK是Sun公司推出的JAVA开发工具包,包括JAVA类库、JAVA编译器、JAVA解释器、JAVA运行时的环境和JAVA命令行工具。
它是JAVA程序编译和运行的基本平台,所以必须先配置JDK。
现在Sun公司已经被Oracle公司收购,所以我们要登陆Oracle公司的网站下载JDK。
网站地址为:
。
如图1.1-1所示的页面中找到JDK并下载。
图:
1.1-1JDK下载页面
下载完JDK后,我们进行JDK的安装了。
JDK的安装比较简单,按提示下一步就能完成安装。
这里就不再做详细解释。
安装完JDK后,这里需要完成JDK的Path环境变量的配置。
如果使用的是Windows7操作系统,对Path的设置步骤如下:
(1)右键单击“计算机”,在弹出的窗口中单击高级系统设置,在弹出的窗口“系统属性”对话框中选择“高级”选项卡,如图1.1-2所示。
图:
1.1-2系统属性图:
1.1-3环境变量
(2)单击【环境变量】按钮,弹出环境变量对话框,如图1.1-3所示。
在“系统变量”列表框中选择“Path”变量,并单击【编辑】按钮,弹出“编辑系统变量”对话框,如图1.1-4所示。
图:
1.1-4编辑系统变量
(3)在“变量值”文本框中输入JDK的安装路径,单击【确定】按钮,就完成Path的设置。
(4)通过以上设置,就可以编译和运行JAVA程序了。
1.2使用Eclipse的好处
设置完JDK后,就可以在JDK平台通过Windows下的记事本或写字板等进行开发了。
但是使用记事本开发比较麻烦,操作性不高、工作效率低。
在本游戏的开发中,将采用Eclipse集成开发工具开发。
采用Eclipse开发有以下好处:
(1)Eclipse是开源的,所以是免费的、可节省开发成本。
(2)使用方便,功能强大。
Eclipse支持JDT,提供调试、运行、随笔提示等常见的功能。
(3)Junit单元测试软件,可直接对开发的类进行测试。
(4)CVS客服端可实现对人协作开发。
1.3游戏应用环境
(1)操作系统:
WindowsXP/Windows7/Linux等
(2)应用软件:
JDK1.5以上。
2游戏分析
2.1贪吃蛇的需求分析
贪吃蛇是Gremlin平台在1976年推出了一款街机游戏,该游戏一推出就广受游戏欢迎。
类似的游戏后来出现在早期的游戏机及计算机上,如Atari2600、TRS-80、苹果2等。
直到诺基亚手机向全球推出Snake,让这款游戏走红全球。
本游戏的设计理念是完成贪吃蛇的基本功能,根据游戏的娱乐性需求游戏应满足以下几点要求:
(1)应用Windows窗口作为游戏的工作面板,面板上具有蛇、食物、石头。
(2)游戏面板具备开始游戏、暂停游戏及重新开始游戏的按钮,并各个按钮具备各自的功能。
游戏面板还能显示当前游戏积分及游戏等级。
(3)游戏开始后,蛇能自己爬行并在随机的地方产生一个食物。
(4)可通过键盘上的方向键改变蛇的运动方向。
(5)蛇头触碰到食物时,能吃到食物并增长一节身体长度。
(6)蛇碰到石头或自己的身体时,蛇死亡并且游戏自动结束,否则游戏正常运行。
(7)蛇每吃到一个食物可增加积分;当蛇的身体增长到一定程度时,游戏将升级来提高游戏的难度。
2.2俄罗斯方块的需求分析
俄罗斯方块原名是Tetris,该名字来源于希腊语tetra,意思是“四”,然而游戏的创始人很喜爱网球(tennis)。
于是,游戏创始人把两个单词tetra和tennis合并,命名为Tetris。
该游戏因其操作简单、适合各个年龄层的人群,因此成为轰动全球的一款电视游戏和掌上游戏。
游戏中随机产生28中状态的方块,并从上自由落下,玩家可通过方向键移动和旋转方块,以便以玩家所需要的位置及状态落到指定的位置。
如果下落后,方块的方格能填满某一行,则这一行可消去。
消去一行后,游戏可给玩家加分,如果面板由存在空格的方块填满时,游戏结束。
为此游戏具备以下功能需求。
(1)游戏的界面需求
在游戏中游戏显示的界面是非常重要的,漂亮的游戏界面可提高玩家的兴趣。
该款游戏用火影忍者的图片作为游戏背景,橘黄色的方块能在面板中旋转和下落,落下后落下后变成砖红色的障碍物。
(2)方块形状需求
游戏中的方块具有28中状态,即Z字形、反Z字形、长条形、田字形、7字形、反7字形和T型。
各种方块能通过逆时针旋转变形。
(3)游戏操控需求
方块下落过程,使用键盘上方向键(上、下、左、右键)对该方块进行向上(变形),向下(加速)、向左、向右移动操控。
(4)游戏按钮需求
通过鼠标单击面板上的开始游戏、暂停游戏、重新开始游戏,游戏能对应各种的功能。
(5)游戏显示需求
当不同的方块填满一整行时可自动消除这行,剩余的方块向下移动并统计分数。
2.3游戏可行性分析
(1)经济可行性
本游戏的开发并不注重游戏带来的经济收益和后期发展,只是贯彻完成大学本科毕业设计、提高个人JAVA水平和编程能力的宗旨所进行的开发。
开发过程中只需一台安装了JDK和Eclipse的电脑即可,JDK和Eclipse都可从网上免费下载。
综上所述,游戏开发不存在经济问题。
(2)技术可行性
本游戏采用个人擅长的JAVA编程语言开发,采用JAVASwing图形界面和事件监听技术来控制游戏。
通过大学四年所学知识和上网收集资料,本人开发这两款游戏不存在技术问题。
(3)社会可行性
本人开发这两款游戏只是完成毕业设计,游戏并不发布并且所有的东西都承诺个人独立完成。
所以不存在侵权和影响社会利益的问题,在社会可行性方面是可行的。
3贪吃蛇的详细设计
3.1贪吃蛇的设计目标
根据贪吃蛇的需求分析及可行性分析,现制定贪吃蛇游戏的实现目标如下所述。
通过JAVA编程语言和Eclipse开发工具实现程序编写游戏程序,游戏可以通过键盘上的方向键去改变蛇的运动方向;单击面板上的暂停/继续、重新开始、结束游戏按钮可实现各自对应的功能;在游戏开始后死亡前,蛇能自行移动并在随机的地方产生一个食物;通过玩家的操控当蛇吃到食物时,蛇会自动增长一节身体长度;当蛇吃到石头或自己身体时游戏结束,否则正常运行。
3.2贪吃蛇数据结构的设计
通过以上设计目标的制定,接下来的工作就是具体的实现过程。
怎么把游戏具体的功能抽象成计算机的算法呢?
需要考虑以下几个问题。
(1)蛇、石头和食物的显示
首先我们可以把显示区域想象成一个带有X/Y坐标的大网格,网格中的每个格子可以用来表示一个食物或者是一块石头,一条蛇可以通过一个或多个连起来的格子表示。
其次通过X/Y对应的坐标来区分不同的格子,为了接下来设计的方便我们把最左上角的那个格子的坐标默认为(0,0)。
如图3.2-1所示。
图:
3.2-1蛇、石头和食物的显示
格子的宽度及高度如图3.2-2所示:
图:
3.2-2格子宽度和高度
格子坐标和像素坐标如图3.2-3所示:
图:
3.2-3格子坐标
(2)蛇的移动
怎么实现蛇的移动呢?
其实蛇的移动可以比喻成生活中的火车,火车头不停的向前走,每走一段,后面的车厢就被车头向前拉了一段(跟着火车头向前走了一段)。
为了方便说明,请参照图3.2-4所示。
图:
3.2-4蛇的移动
每当蛇移动一步(第一个格子),我们把他看成是蛇头的前面增加了一个节点(一个格子),蛇的尾巴(最后一个格子)上少了一个节点。
简单的讲就是去尾加头。
如图3.2-5所示。
图:
3.2-5去尾加头
要区分蛇头和蛇尾巴,这就要求这个数据结构是有序的,还要访问第一个和最后一个节点,所以LinkedList最合适,因为它有getFirst(),getLast()方法和removeLast()方法。
(3)蛇的移动方向
蛇下一步移动到哪儿,是由方向来控制的,移动的方向可以int型的常量来表示。
结合上面蛇显示和移动的解决方法再加上蛇移动的方向,蛇的真正移动是如图3.2-6所示的。
图:
3.2-7蛇的移动方向
根据制定的游戏规则,在游戏的操作过程中,蛇移动的方向存在两个无用方向:
相反方向、无效方向。
当玩家按出这两个方向时,游戏应该忽略这两个无用的方向。
相反方向是指与蛇移动方向相反的方向,也就是说蛇不能穿过自己的身体向后移动。
无效方向是指在蛇的第一次移动之后和下一次移动之前的时间间隔内,玩家操作出多个方向,根据游戏的规则,应该只有最后一个方向是有效的,其余方向是无效的。
如图3.2-8所示。
图:
3.2-8游戏方向
(4)判断蛇吃到了什么东西
在蛇移动之后又可能出现四种情况,分别是:
吃到食物、吃到石头、吃到自己的蛇头和什么也没吃到。
这时就出现一个怎么判断蛇吃到什么东西的问题。
判断蛇吃到什么东西,我们只要判断蛇头的坐标与各自东西的坐标是否重合,与什么东西重合就代表吃到了什么东西。
为什么是判断蛇头的坐标,而不是蛇其他身体节点的坐标呢?
因为蛇的身体都是蛇头走过的地方,所以我们只需判断蛇头的坐标即可。
3.3贪吃蛇的主要功能代码
packagecom.ncsxy.snake.controller;
importjava.awt.event.KeyAdapter;
importjava.awt.event.KeyEvent;
importjava.util.HashSet;
importjava.util.Set;
importcom.ncsxy.snake.entities.Food;
importcom.ncsxy.snake.entities.Ground;
importcom.ncsxy.snake.entities.Snake;
importcom.ncsxy.snake.listener.GameListener;
importcom.ncsxy.snake.listener.SnakeListener;
importcom.ncsxy.snake.view.GamePanel;
/**
*控制器
*控制Ground,Snake,Food
*负责游戏的逻辑
*处理按键事件
*
*实现了SnakeListener接口,可以处理Snake触发的事件
*方法snakeEatFood()处理蛇吃到食物后触发的snakeEatFood事件加分
*
*@author杨晓东
*
*/
publicclassControllerextendsKeyAdapterimplementsSnakeListener{
privateSnakesnake;//蛇
privateFoodfood;//食物
privateGroundground;//地形
privateGamePanelgamePanel;//游戏面板
privatebooleanplaying;//游戏状态
//监听器
privateSet
/**
*构造方法
*
*@paramsnake
*@paramfood
*@paramground
*@paramgamePanel
*/
publicController(Snakesnake,Foodfood,Groundground,GamePanelgamePanel){
super();
this.snake=snake;
this.food=food;
this.ground=ground;
this.gamePanel=gamePanel;
}
/**
*升级的方法
*/
publicvoidupgrade(){
//蛇的改变
snake.changeGrade();
//删除地图
ground.remove();
//添加地图
ground.ground_2();
}
/**
*键盘操作处理
*/
@Override
publicvoidkeyPressed(KeyEvente){
//TODOAuto-generatedmethodstub
switch(e.getKeyCode()){
caseKeyEvent.VK_UP:
snake.changeDirection(-1);
break;
caseKeyEvent.VK_DOWN:
snake.changeDirection
(1);
break;
caseKeyEvent.VK_LEFT:
snake.changeDirection
(2);
break;
caseKeyEvent.VK_RIGHT:
snake.changeDirection(-2);
break;
}
}
/**
*SankeListener接口的方法实现蛇移动了
*/
publicvoidsnakeMoved(Snakesnake){
//TODOAuto-generatedmethodstub
if(food.isSnakeEatFood(snake)){
snake.eatFood();
food.newFood(ground.getPoint());
}
if(ground.isSnakeEatRock(snake)){
stopGame();
}
if(snake.isEatBody()){
stopGame();
}
if(snake.upgrade()){
upgrade();
}
gamePanel.display(snake,food,ground);
}
/**
*开始新游戏
*/
publicvoidnewGame(){
playing=true;
snake.reNew();
ground.remove();
ground.ground_1();
food.newFood(ground.getPoint());
for(GameListenerl:
listeners){
l.gameStart();
}
}
/**
*结束游戏
*/
publicvoidstopGame(){
if(playing){
playing=false;
snake.die();
for(GameListenerl:
listeners){
l.gameOver();
}
}
}
/**
*暂停游戏
*/
publicvoidpauseGame(){
if(playing){
snake.setPause(true);
for(GameListenerl:
listeners){
l.gamePause();
}
}
}
/**
*继续游戏
*/
publicvoidcontinueGame(){
if(playing){
snake.setPause(false);
for(GameListenerl:
listeners){
l.gameContinue();
}
}
}
/**
*当前游戏状态
*/
publicbooleanisplaying(){
returnplaying;
}
publicvoidsetPlaying(booleanplaying){
this.playing=playing;
}
/**
*增加监听器
*
*@paraml
*/
publicsynchronizedvoidaddGameListener(GameListenerl){
if(l!
=null)
this.listeners.add(l)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪吃 系统 doc