java版的贪吃蛇毕业论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
j a v a版的贪吃蛇毕业论
文
Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】
贪吃蛇
姓名:
摘要:
本文用J2SE实现大家耳熟能详的一个贪吃蛇游戏来综合运用所学知识,本游戏运用软件工程思想(螺旋模型),打好游戏主体框架,JAVA的面向对象思想,封装类,接口等概念,来完成本游戏,打到综合运用知识的目的。
⑴.本游戏开发平台:WINXP;
⑵.JAVA开发环境: +Eclipse;
⑶.开发语言:J2SE
关键词:
中央控制器;游戏面板;食物;蛇;石头
The Greed Snake
Abstract: In this paper, J2SE implementation of a Snake game familiar to the integrated use of what they have learned, this game is the use of software engineering thinking (spiral model), the main framework of the fight game, JAVA object-oriented thinking, wrapper classes, interface concepts to complete this game, hitting the integrated use of knowledge and purpose.
⑴. The game development platform: WINXP;
⑵. JAVA Development Environment: + Eclipse;
⑶. Development Languages: J2SE
Keywords:Controller;GamePanel;Food;Snake;Ground
前言
贪吃蛇游戏背景:
蛇引诱夏娃吃了苹果之后,就被贬为毒虫,阴险的象征。
而蛇吃东西是整只动物吞进去的,大概在文艺复兴的时候(好象是那个时候但是不确定)就有人发明的一种游戏,是现在贪吃蛇的前身。
后来慢慢的发展就变成了今天的贪吃蛇了、现在贪吃蛇主要应用于手机游戏。
本文运用软件工程思想、JAVA面向对象编程、类的封装、抽象类的使用(接口),游戏编码规范遵循MVC模式,循序渐进实现贪吃蛇的相关功能。
一:游戏中的面向对象分析与设计
㈠●涉及到几个对象(类)
㈡●每个类有什么方法
1 . 首先得有个游戏显示面板(GamePanel)类
该类有一个方法void display(); 得有个蛇(Snake)类
该类有以下几个方法:
void move(); 一个食物类(Food)类
该类有以下方法:
boolean is SnakeEatFood(Snake); 一个背景石头(Ground)类
该类有以下方法:
Boolean isSnakeEatRock(Snake);
un(); }
并在Run方法中增加
for(SnakeListener l: listener)
{
; }
try
{
(1000);
}
catch (InterruptedException e)
{
();
}
四:编写对各个类进行测试的程序代码
构建一个新类Game来测试程序代码:
package class Game {
public static void main(String[] args) {
JFrame jf=new JFrame("我的论文");
Snake snake=new Snake();
Ground ground=new Ground();
Food food=new Food();
GamePanel gamepanel=new GamePanel();
Controller controller=new Controller(snake, ground, food, gamepanel);
;
(400, 0);
(800, 600);
(gamepanel);
(controller);
(controller);
(true);
();
}
}
运行这个带有main()的类,在Eclipse 的Console窗口中可以看到如下信息:
Snake's move
GamePanel's display
Snake's drawMe
Ground's drawme
Food's drawme
Snake's drawMe
Ground's drawme
Food's drawme
Snake's move
GamePanel's display
Snake's drawMe
Ground's drawme
Food's drawme
这就意味着,当蛇移动一次,就触发监听器,有控制器(controller)给GamePanel发送指令,让它重画,GamePanel中的
public void display(Snake snake,Ground ground, Food food)
{
"GamePanel's display");
=snake;
=ground;
=food;
();
}
这个方法依次画出几个实体,所以打印出上述信息。
到了这一步我们的基本框架打好了,下面开始第5步
五:蛇的数据结构设计与移动显示
分析:
要区分蛇头和蛇尾巴,这就要求这个数据结构是有序的,
还要经常访问第一个和最后一个节点,所以LinkedList最合适,因为它有getFirst(),getLast()方法和removeLast()方法
蛇下一步移动到哪是由方向控制的,前面已经定义过,蛇透坐标如下图:
图3 蛇头方向计算新蛇头坐标
在Snake的 move()中增加
();
int x=().x;
int y=().y;
switch(direction)
{
case UP:
y--;
break;
case DOWN:
y++;
break;
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
}
Point newhead=new Point(x,y);
;
int y=().y;
switch(olddirection)
{
case UP:
y--;
if(y<0)
{
y=;
}
break;
case DOWN:
y++;
if(y>=
{
y=0;
}
break;
case LEFT:
x--;
if(x<0)
{
x=;
}
break;
case RIGHT:
x++;
if(x>=
{
x=0 ;
}
break;
}
Point newhead=new Point(x,y);
&& y==().y)
{
return true;
}
}
}
return false;
}
public static Point getPoint()
{
Random random=new Random();
int x=0,y=0;
do{
x=;
y=;
}while(rocks[x][y]==1);
return new Point(x,y);
}
public void drawme(Graphics g)
{
"Ground's drawme");
for(int x=0;x<;x++)
for(int y=0;y<;y++)
{
if(rocks[x][y]==1)
{
(shitou);
(x*, y*, , , true);
}
}
}
}
再在各个调用方法中填上相应参数,运行Game类,效果如图:
图8 添加了食物、石头后的图
为窗口数值大小增加35PX 因为此时的窗口标题栏占用了些空间,导致下面的石头没有显示出来,修改Game类中的
*+10,*+35);再测试,效果显示完全正常下面继续开发:
九:为蛇增加吃到石头而死掉的功能
这里我们采用吃食物一样的方式,当舌头的坐标与石头重合时,就让蛇死掉,至于蛇死掉我们只需要将Snake中的县城结束掉即可,所以我们在Snake中定义boolean life=true;
当蛇头坐标与石头坐标重合的时候只要将此变量设置为false,用life作为蛇线程的循环条件,具体代码如下:
定义蛇的die方法public void die()
{
life=false;
, "您控制的蛇因为意外死亡,呜呼哀哉,死的可真惨啊~~", "游戏结束", 2);
"The snake is dead");
}
并将Game类中的public static JFrame jf=new JFrame("我的论文");
放到main方法前面,下面测试游戏,如下图:
图9 蛇吃到食物后死亡
当蛇吃到石头就死亡了!
十:为蛇增加吃到蛇身而死掉的功能:
同样我们用舌头去便利蛇身体,当舌头鱼蛇身体重合时则调用蛇的die();代码如下:
修改Snake中
public boolean isEatBody()
{
"Snake's eat body");
for(int i=1;i<();i++)
{
if(i).equals()))
return true;
}
return false;
}
并在Controller中的SnakeMove(Snake snake)中增加如下代码:
if())
{
();
}
运行游戏测试效果如下图所示:
图10 蛇吃到身体后死亡
到此时贪吃蛇的基本功能已经基本实现~由于篇幅有限只写到这,源码以及帮助文档附件我随后贴上!请读者参照我附上的文件包!!
结束语:通过上述游戏开发过程,我们对J2SE的面向对象设计思想,抽象类的使用(接口)以及软件工程思想有了一次综合性的练习,设计游戏中遇到的逻辑错误,可以通过Eclipse的Debug来进行调试,培养我们的思维,逻辑能力。
参考文献: [1]张孝祥-JAVA就业培训教程
[2]软件工程-西安电子科技大学出版社
[3]胡伏湘,雷军环.Java程序设计实用教程.清华大学出
版社,
2005.。