java设计报告Word文档下载推荐.docx

上传人:b****6 文档编号:20964937 上传时间:2023-01-26 格式:DOCX 页数:26 大小:104.76KB
下载 相关 举报
java设计报告Word文档下载推荐.docx_第1页
第1页 / 共26页
java设计报告Word文档下载推荐.docx_第2页
第2页 / 共26页
java设计报告Word文档下载推荐.docx_第3页
第3页 / 共26页
java设计报告Word文档下载推荐.docx_第4页
第4页 / 共26页
java设计报告Word文档下载推荐.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

java设计报告Word文档下载推荐.docx

《java设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《java设计报告Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。

java设计报告Word文档下载推荐.docx

本游戏编写的形式是对书本上知识的巩固,如果读者在这之中有什么不懂的地方,可以问我们或者查阅其他图书,进而成为一名基础理论扎实、实践经验丰富的Java高级程序设计人才。

目录

 

第一章游戏简介1

一、功能及规则1

二、游戏中涉及的类1

三、类之间的关系1

四、游戏界面2

五、任务书2

第二章代码部分3

一、控制层(Controller)3

二、实体层7

1、蛇(Snack)7

2、食物(Food)9

3、地形或地面(Ground)10

三、游戏界面设置11

1、主Frame(MainFrame)11

2、游戏设置面板(GameOptionPanel)14

3、游戏显示面板(GamePanel)15

四、监听器16

1、蛇的监听器16

2、游戏监听器16

五、工具类16

第三章总结18

附录19

第一章游戏简介

一、功能及规则

本次java课程设计采用面向对象的思想编写一个贪吃蛇的小游戏,该游戏的功能及规则如下:

1、蛇具有吃食物的功能

2、当蛇吃到食物后自己的身体就会加长一节

3、当蛇吃到自己的身体或者是石头自己就会死掉

4、该游戏具有暂停、开始新游戏、停止游戏的功能

5、方向键控制蛇移动的方向、回车键或空格键暂停/开始游戏、pageuppagedown使蛇加速或减速移动

二、游戏中涉及的类

1、控制器(Controller):

控制Ground、Snake、Food,负责游戏的逻辑,处理按键事件,实现了SnakeListener接口,可以处理Snake触发的事件等。

2、食物(Food):

有x、y坐标和颜色等属性。

3、地形或地面(Ground):

在游戏开始的时候画一个地图。

4、蛇(Snack):

其中包括蛇移动的方法、画自己身体等方法。

5、游戏设置面板(GameOptionPanel):

其中包括游戏开始、暂停、停止按钮及图片等的添加。

6、主界面(MainFrame):

实现GameListener接口、让主界面居中显示等操作。

7、游戏监听器(GameListener):

包括游戏开始、暂停、停止、继续事件。

8、蛇的监听器(SnakeListener):

包括蛇移动事件、蛇吃到食物事件。

9、工具类(Global):

此类中存放了其他类中用到的一些常量。

10、游戏的显示界面(GamePanel):

设置游戏面板的大小和颜色等。

三、类之间的关系

四、游戏界面

五、任务书

设计题目

设计内容

小组成员

分工

贪吃蛇小游戏

用java语言编写一个贪吃蛇的游戏,并运行所实现的功能

组长:

杨茂科

控制器游戏的设置和显示面板设计

杨胜文

食物、石头设计

王明

主frame监听程序的工具类设计

第二章代码部分

一、控制层(Controller)

importjava.awt.event.*;

importjava.awt.*;

importjava.util.*;

importjavax.swing.*;

publicclassControllerextendsKeyAdapterimplementsSnakeListener{

privateGroundground;

//地形

privateSnakesnake;

//蛇

privateFoodfood;

//食物

privateGamePanelgamePanel;

//显示

privateJLabelgameInfoLabel;

//提示信息

privatebooleanplaying;

privateintmap;

//控制器监听器

privateSet<

GameListener>

listeners=newHashSet<

();

publicvoidkeyPressed(KeyEvente){

if(e.getKeyCode()!

=KeyEvent.VK_Y&

&

!

playing)

return;

switch(e.getKeyCode()){//方向键上

caseKeyEvent.VK_UP:

if(snake.isPause()){

snake.changePause();

for(GameListenerl:

listeners)

l.gameContinue();

}

snake.changeDirection(Snake.UP);

break;

caseKeyEvent.VK_DOWN:

//方向键下

snake.changeDirection(Snake.DOWN);

caseKeyEvent.VK_LEFT:

//方向键左

snake.changeDirection(Snake.LEFT);

caseKeyEvent.VK_RIGHT:

//方向键右

snake.changeDirection(Snake.RIGHT);

break;

caseKeyEvent.VK_ENTER:

caseKeyEvent.VK_SPACE:

//回车或空格(暂停)

snake.changePause();

for(GameListenerl:

if(snake.isPause())

l.gamePause();

else

caseKeyEvent.VK_PAGE_UP:

//PAGE_UP加速

snake.speedUp();

caseKeyEvent.VK_PAGE_DOWN:

//PAGE_DOWN减速

snake.speedDown();

}

if(gamePanel!

=null)//重新显示/

gamePanel.redisplay(ground,snake,food);

if(gameInfoLabel!

=null)//更新提示/

gameInfoLabel.setText(getNewInfo());

}

//处理Snake触发的snakeMoved事件

publicvoidsnakeMoved(){

//判断是否吃到食物

if(food!

=null&

food.isSnakeEatFood(snake)){

//吃到食物后,蛇增加身体,再重新丢一个食物

snake.eatFood();

food.setLocation(ground==null?

food.getNew():

ground

.getFreePoint());

}

//如果吃到食物,就肯定不会吃到石头

elseif(ground!

ground.isSnakeEatRock(snake)){

//如果吃到的是石头,或吃到自己的身体,就让蛇死掉

stopGame();

}

if(snake.isEatBody())

=null)

//更新提示

//开始一个新游戏

publicvoidnewGame(){

if(ground!

=null){

switch(map){

default:

ground.init();

break;

}}

playing=true;

snake.reNew();

for(GameListenerl:

l.gameStart();

}

//结束游戏

publicvoidstopGame(){

if(playing){

playing=false;

snake.dead();

l.gameOver();

}}

//暂停游戏

publicvoidpauseGame(){

snake.setPause(true);

l.gamePause();

//继续游戏

publicvoidcontinueGame(){

snake.setPause(false);

l.gameContinue();

//接受Snake,Food,Ground的构造器

publicController(Snakesnake,Foodfood,Groundground,GamePanelgamePanel){

this.snake=snake;

this.food=food;

this.ground=ground;

this.gamePanel=gamePanel;

//先丢一个食物

if(ground!

food!

food.setLocation(ground.getFreePoint());

this.snake.addSnakeListener(this);

}//注册监听器

//多接受一个显示提示信息的JLabel

publicController(Snakesnake,Foodfood,Groundground,

GamePanelgamePanel,JLabelgameInfoLabel){

this(snake,food,ground,gamePanel);

this.setGameInfoLabel(gameInfoLabel);

//得到最新的提示信息return蛇的最新信息

publicStringgetNewInfo(){

if(!

snake.isLive())

return"

"

;

//"

提示:

按Y开始新游戏"

else

returnnewStringBuffer().append("

提示:

).append("

速度"

).append(

snake.getSpeed()).toString()+"

毫秒/格"

//添加监听器paraml

publicsynchronizedvoidaddGameListener(GameListenerl){

if(l!

this.listeners.add(l);

}

//移除监听器

publicsynchronizedvoidremoveGameListener(GameListenerl){

this.listeners.remove(l);

}

publicSnakegetSnake(){returnthis.snake;

publicFoodgetFood(){returnthis.food;

publicGroundgetGround(){returnthis.ground;

//处理蛇吃到食物后触发的snakeEatFood事件

publicvoidsnakeEatFood(){System.out.println("

吃到食物!

"

);

}

publicGamePanelgetGamePanel(){returngamePanel;

//设置GamePanel

publicvoidsetGamePanel(GamePanelgamePanel){this.gamePanel=gamePanel;

publicJLabelgetGameInfoLabel(){returngameInfoLabel;

publicvoidsetGameInfoLabel(JLabelgameInfoLabel){

this.gameInfoLabel=gameInfoLabel;

this.gameInfoLabel.setSize(Global.WIDTH*Global.CELL_WIDTH,20);

this.gameInfoLabel.setFont(newFont("

宋体"

Font.PLAIN,12));

gameInfoLabel.setText(this.getNewInfo());

publicvoidsetGround(Groundground){this.ground=ground;

publicvoidsetSnake(Snakesnake){this.snake=snake;

publicvoidsetFood(Foodfood){this.food=food;

publicintgetMap(){returnmap;

publicvoidsetMap(intmap){this.map=map;

publicbooleanisPlaying(){returnplaying;

publicvoidsetPlaying(booleanplaying){this.playing=playing;

publicbooleanisPausingGame(){returnsnake.isPause();

}}

二、实体层

1、蛇(Snack)

importjava.awt.*;

publicclassSnake{

publicstaticfinalintUP=1;

//方向上

publicstaticfinalintDOWN=-1;

//方向下

publicstaticfinalintLEFT=2;

//方向左

publicstaticfinalintRIGHT=-2;

//方向右

privateLinkedList<

Point>

body=newLinkedList<

//蛇(多个节点)

privateintoldDirection;

//上一次的移动方向

privateintnewDirection;

//下一步的方向(有效方向)

privatePointhead;

//临时存放蛇头的坐标

privatePointtail;

//临时存放蛇尾巴的坐标

privateintspeed;

//移动速度

privatebooleanlive;

//生命,是否活着

privatebooleanpause;

//是否暂停

privateSet<

SnakeListener>

publicstaticfinalColorDEFAULT_HEAD_COLOR=newColor(0xcc0033);

privateColorheadColor=DEFAULT_HEAD_COLOR;

//蛇头的颜色

publicstaticfinalColorDEFAULT_BODY_COLOR=newColor(0xcc0033);

privateColorbodyColor=DEFAULT_BODY_COLOR;

//蛇身体的颜色

publicvoidmove(){//忽略相反方向

if(oldDirection+newDirection!

=0)

oldDirection=newDirection;

//把蛇尾巴拿出来重新设置坐标作为新蛇头,etLocation将返回一个新的Point,tail把尾巴坐标保存下来,吃到食物时再加上

tail=(head=takeTail()).getLocation();

head.setLocation(getHead());

//根据蛇头的坐标再上下左右

switch(oldDirection){//根据方向让蛇移动

caseUP:

head.y--;

break;

caseDOWN:

head.y++;

caseLEFT:

head.x--;

caseRIGHT:

head.x++;

body.addFirst(head);

}//添加到头上去

//一个内部类,驱动蛇定时移动

privateclassSnakeDriverimplementsRunnable{

publicvoidrun(){

while(live){

if(!

pause){

move();

//ControllerListener的状态改变事件

for(SnakeListenerl:

l.snakeMoved();

}

try{

Thread.sleep(speed);

}catch(InterruptedExceptione){

//在尾巴上增加一个节点

publicvoideatFood(){

//把上一次移动拿掉的节点再加上

body.addLast(tail.getLocation());

//触发SnakeListener的snakeEatFood事件

for(SnakeListenerl:

listeners)l.snakeEatFood();

publicvoidchangeDirection(intdirection){this.newDirection=direction;

}//改变方向

publicPointgetHead(){returnbody.getFirst();

}//得到蛇头节点

publicPointtakeTail(){returnbody.removeLast();

}//去掉蛇尾巴

publicintgetLength(){returnbody.size();

}//得到蛇的长度

publicvoidbegin(){newThread(newSnakeDriver()).start();

}//让蛇开始运动

publicvoidreNew(){init();

begin();

}//让蛇复活,并开始运动

//初始化蛇的信息、长度,位置,方向,速度,生命和暂停状态

publicvoidinit(){

body.clear();

//初始化位置在中间

intx=Global.WIDTH/2-Global.INIT_LENGTH/2;

inty=Global.HEIGHT/2;

for(inti=0;

i<

Global.INIT_LENGTH;

i++)

this.body.addFirst(newPoint(x++,y));

oldDirection=newDirection=RIGHT;

//设置默认方向为向右

speed=Global.SPEED;

//初始化速度

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

当前位置:首页 > 高等教育 > 军事

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

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