java设计报告.docx

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

java设计报告.docx

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

java设计报告.docx

java设计报告

贵州师范大学职业技术学院

J

a

v

a

题目:

贪吃蛇游戏

姓名:

杨茂科杨胜文王明

班级:

08计应

指导老师:

徐凯老师

实习地点:

实验楼一机房

实习时间:

2010年11月29日——2010年12月17日

前言

Java语言虽然发展历史比较短,却是人们公认的一种优秀的面向对象编程语言。

它以C/C++语言为基础,同时对C/C++语言进行了成功改造。

由于Java语言不仅具有强大功能,使得它成为基于Internet网络应用开发的首选语言。

Java是当前最流行的程序设计语言之一,它的出现大大地促进了软件产业和互联网的发展。

Java之所以如此地流行是因为它是一种简单易学易用的、纯面向对象的、可移植的、安全的、高效的、健壮的、分布式的、多线程的、结构中立的、可解释执行的和动态的语言。

Java拥有包括Sun、IBM在内的世界各大软件厂商的支持,因而发展迅速。

经过10多年的发展,Java语言已从最初的Oak发展到了JavaSE6。

本游戏以JavaSE6.0为基础,融合了程序设计人员必备的基础理论知识,如面向对象思想理论、面向对象软件分析。

本游戏由我们组的三个人员共同完成,其中有三部分组成:

第一章游戏的简介部分:

包括游戏的功能、规则、以面向对象思想所涉及到的类、各个类之间的关系、游戏整体运行的情况。

使每一个不了解该游戏的同学都能很好的读懂。

第二章代码部分:

包括本游戏在设计过程中所涉及到所有类的代码。

第三章总结:

不管我们以后是做什么事,都要善于总结自己的得失,时刻的让自己进步。

本游戏编写的形式是对书本上知识的巩固,如果读者在这之中有什么不懂的地方,可以问我们或者查阅其他图书,进而成为一名基础理论扎实、实践经验丰富的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;

//控制器监听器

privateSetlisteners=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:

//方向键下

if(snake.isPause()){

snake.changePause();

for(GameListenerl:

listeners)

l.gameContinue();}

snake.changeDirection(Snake.DOWN);

break;

caseKeyEvent.VK_LEFT:

//方向键左

if(snake.isPause()){

snake.changePause();

for(GameListenerl:

listeners)

l.gameContinue();}

snake.changeDirection(Snake.LEFT);

break;

caseKeyEvent.VK_RIGHT:

//方向键右

if(snake.isPause()){

snake.changePause();

for(GameListenerl:

listeners)

l.gameContinue();}

snake.changeDirection(Snake.RIGHT);

break;

caseKeyEvent.VK_ENTER:

caseKeyEvent.VK_SPACE:

//回车或空格(暂停)

snake.changePause();

for(GameListenerl:

listeners)

if(snake.isPause())

l.gamePause();

else

l.gameContinue();

break;

caseKeyEvent.VK_PAGE_UP:

//PAGE_UP加速

snake.speedUp();

break;

caseKeyEvent.VK_PAGE_DOWN:

//PAGE_DOWN减速

snake.speedDown();

break;}

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!

=null&&ground.isSnakeEatRock(snake)){

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

stopGame();}

if(snake.isEatBody())

stopGame();

if(gamePanel!

=null)

//更新提示

if(gameInfoLabel!

=null)

gameInfoLabel.setText(getNewInfo());}

//开始一个新游戏

publicvoidnewGame(){

if(ground!

=null){

switch(map){

default:

ground.init();

break;}}

playing=true;

snake.reNew();

for(GameListenerl:

listeners)

l.gameStart();}

//结束游戏

publicvoidstopGame(){

if(playing){

playing=false;

snake.dead();

for(GameListenerl:

listeners)

l.gameOver();}}

//暂停游戏

publicvoidpauseGame(){

snake.setPause(true);

for(GameListenerl:

listeners)

l.gamePause();}

//继续游戏

publicvoidcontinueGame(){

snake.setPause(false);

for(GameListenerl:

listeners)

l.gameContinue();}

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

publicController(Snakesnake,Foodfood,Groundground,GamePanelgamePanel){

this.snake=snake;

this.food=food;

this.ground=ground;

this.gamePanel=gamePanel;

//先丢一个食物

if(ground!

=null&&food!

=null)

food.setLocation(ground.getFreePoint());

this.snake.addSnakeListener(this);}//注册监听器

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

publicController(Snakesnake,Foodfood,Groundground,

GamePanelgamePanel,JLabelgameInfoLabel){

this(snake,food,ground,gamePanel);

this.setGameInfoLabel(gameInfoLabel);

if(gameInfoLabel!

=null)

gameInfoLabel.setText(getNewInfo());}

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

publicStringgetNewInfo(){

if(!

snake.isLive())

return"";//"提示:

按Y开始新游戏";

else

returnnewStringBuffer().append("提示:

").append("速度").append(

snake.getSpeed()).toString()+"毫秒/格";}

//添加监听器paraml

publicsynchronizedvoidaddGameListener(GameListenerl){

if(l!

=null)

this.listeners.add(l);}

//移除监听器

publicsynchronizedvoidremoveGameListener(GameListenerl){

if(l!

=null)

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.*;

importjava.util.*;

publicclassSnake{

publicstaticfinalintUP=1;//方向上

publicstaticfinalintDOWN=-1;//方向下

publicstaticfinalintLEFT=2;//方向左

publicstaticfinalintRIGHT=-2;//方向右

privateLinkedListbody=newLinkedList();//蛇(多个节点)

privateintoldDirection;//上一次的移动方向

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

privatePointhead;//临时存放蛇头的坐标

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

privateintspeed;//移动速度

privatebooleanlive;//生命,是否活着

privatebooleanpause;//是否暂停

privateSetlisteners=newHashSet();

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++;break;

caseLEFT:

head.x--;break;

caseRIGHT:

head.x++;break;}

body.addFirst(head);}//添加到头上去

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

privateclassSnakeDriverimplementsRunnable{

publicvoidrun(){

while(live){

if(!

pause){

move();

//ControllerListener的状态改变事件

for(SnakeListenerl:

listeners)

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

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

oldDirection=newDirection=RIGHT;//设置默认方向为向右

speed=Global.SPEED;//初始化速度

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

当前位置:首页 > 经管营销 > 经济市场

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

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