java设计报告.docx
- 文档编号:7836201
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:26
- 大小:104.76KB
java设计报告.docx
《java设计报告.docx》由会员分享,可在线阅读,更多相关《java设计报告.docx(26页珍藏版)》请在冰豆网上搜索。
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;
//控制器监听器
privateSet
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;//方向右
privateLinkedList
privateintoldDirection;//上一次的移动方向
privateintnewDirection;//下一步的方向(有效方向)
privatePointhead;//临时存放蛇头的坐标
privatePointtail;//临时存放蛇尾巴的坐标
privateintspeed;//移动速度
privatebooleanlive;//生命,是否活着
privatebooleanpause;//是否暂停
privateSet
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;//初始化速度
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 设计 报告