java编写的贪吃蛇游戏源码Word文档格式.docx

上传人:b****0 文档编号:13276765 上传时间:2022-10-09 格式:DOCX 页数:29 大小:71.67KB
下载 相关 举报
java编写的贪吃蛇游戏源码Word文档格式.docx_第1页
第1页 / 共29页
java编写的贪吃蛇游戏源码Word文档格式.docx_第2页
第2页 / 共29页
java编写的贪吃蛇游戏源码Word文档格式.docx_第3页
第3页 / 共29页
java编写的贪吃蛇游戏源码Word文档格式.docx_第4页
第4页 / 共29页
java编写的贪吃蛇游戏源码Word文档格式.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

java编写的贪吃蛇游戏源码Word文档格式.docx

《java编写的贪吃蛇游戏源码Word文档格式.docx》由会员分享,可在线阅读,更多相关《java编写的贪吃蛇游戏源码Word文档格式.docx(29页珍藏版)》请在冰豆网上搜索。

java编写的贪吃蛇游戏源码Word文档格式.docx

1

7

1、

函数程序结构图

注释:

二、题目分析

通过分析该程序基本需要以下几个类:

Text(Main方法)、Snake(蛇)、Food(食物)、Yard(窗口)、Map(地图)、Node(节点)、PaintThread(线程)、Dir(方向)、KeyMonitor(键盘监听)。

主要实现蛇运动的基本操作和一些事件反应、游戏分数的记录、暂停、重新开始、更改蛇蛇颜色,蛇的移动速度,地图、死亡模式的改变等功能。

本程序运用Java语言知识,用面向对象的思维设计“贪吃蛇”游戏。

3、结果分析

运行程序出现游戏界面,蛇(Snake)头自动向前移动,用键盘的上(Up)下(Down)左(Left)右(Right)键控制蛇头的移动方向。

游戏窗体中在随机位置出现紫色的食物(Food)。

1、每吃一个加5分

2、默认撞墙不死

3、默认速度3

4、默认地图1

5、默认普通蛇身

6、默认30分提升一个速度档次

7、默认每个速度都走完后更换地图并且速度恢复默认,积分归零

功能键:

1、按F1重新开始

2、按空格键暂停/继续

3、按1/2/3/4/5数字键设置蛇的移动速度(逐渐变快)

4、按F2更换地图(3种)

5、按F3普通蛇/彩蛇的切换

6、按F4更换游戏模式(蛇撞到最外围为死亡还是从另一端返回)

该程序初步完成了“贪吃蛇”的游戏雏形,但是缺乏完善。

比如:

界面效果十分粗糙、屏幕闪烁、缺少声音等。

但是,我们通过编写贪吃蛇,能更好的运用面向对象的思维方式了,并学到了许多有用的经验。

四、附录(程序清单)

1、Snake.java

importjava.awt.Color;

importjava.awt.Graphics;

importjava.awt.event.KeyEvent;

publicclassSnake{

Nodehead=null;

Nodetail=null;

intsize=0;

Yardy;

Noden=newNode(1,2,Dir.D);

publicSnake(Yardy){

head=n;

tail=n;

size=1;

this.y=y;

for(inti=0;

i<

3;

i++)

this.Headadd();

}

publicvoidTailadd(){

Nodenode=null;

switch(tail.dir){

caseL:

node=newNode(tail.m+1,tail.n,tail.dir);

break;

caseU:

node=newNode(tail.m,tail.n+1,tail.dir);

caseR:

node=newNode(tail.m-1,tail.n,tail.dir);

caseD:

}

tail.next=node;

node.pre=tail;

tail=node;

size++;

publicvoidDeltail(){

if(size==0)

return;

tail=tail.pre;

tail.next=null;

publicvoidHeadadd(){

switch(head.dir){

caseL:

node=newNode(head.m-1,head.n,head.dir);

caseU:

node=newNode(head.m,head.n-1,head.dir);

caseR:

node=newNode(head.m+1,head.n,head.dir);

caseD:

node=newNode(head.m,head.n+1,head.dir);

node.next=head;

head.pre=node;

head=node;

size++;

publicvoiddraw(Graphicsg){

if(size<

=0)

move();

for(Noden=head;

n!

=null;

n=n.next){

if(head==n){

g.setColor(Color.BLUE);

if(n.dir==Dir.L||n.dir==Dir.R)

g.fillOval(n.m*Yard.B_WIDTH,n.n*Yard.B_WIDTH,Yard.B_WIDTH,Yard.B_WIDTH-3);

else

g.fillOval(n.m*Yard.B_WIDTH,n.n*Yard.B_WIDTH,Yard.B_WIDTH-3,Yard.B_WIDTH);

}

else

n.draw(g);

publicvoidDeadif(){

switch(Yard.STYLE){

case2:

if(head.m<

0||head.n<

30/Yard.B_WIDTH||head.m>

=(Yard.WIDTH/Yard.B_WIDTH)

||head.n>

=(Yard.HEIGHT/Yard.B_WIDTH)){

y.stop();

case1:

intcols=Yard.WIDTH/Yard.B_WIDTH;

introws=Yard.HEIGHT/Yard.B_WIDTH;

if(head.m<

0)head.m=cols;

elseif(head.m>

=cols)head.m=0;

elseif(head.n<

30/Yard.B_WIDTH)head.n=rows;

elseif(head.n>

=rows)head.n=30/Yard.B_WIDTH;

break;

for(Nodep=head.next;

p!

p=p.next){

if(head.m==p.m&

&

head.n==p.n){

switch(Yard.MAP){

//地图1

//地图2

for(intj=10;

j<

Yard.WIDTH/Yard.B_WIDTH-10;

j++)

{

if(head.m==j&

head.n==10)

y.stop();

head.n==20)

case3:

//地图3

for(intj=20;

26;

if(head.m==Yard.WIDTH/Yard.B_WIDTH-10&

head.n==j)

for(intj=5;

10;

if(head.m==10&

default:

voidmove(){

Yard.MOVECHECK=true;

Headadd();

Deltail();

Deadif();

publicvoideat(foode){

if(y.f.getM()==y.s.head.m&

y.f.getN()==y.s.head.n){

e.reAppear();

this.Tailadd();

y.setscore(y.getscore()+5);

publicvoidkeyPressed(KeyEvente){

intkey=e.getKeyCode();

switch(key){

caseKeyEvent.VK_LEFT:

if(head.dir!

=Dir.R)

head.dir=Dir.L;

caseKeyEvent.VK_UP:

=Dir.D)

head.dir=Dir.U;

caseKeyEvent.VK_RIGHT:

=Dir.L)

head.dir=Dir.R;

caseKeyEvent.VK_DOWN:

=Dir.U)

head.dir=Dir.D;

}

2、Food.java

importjava.util.Ra

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1