JAVA吃豆豆项目报告Word格式文档下载.docx

上传人:b****5 文档编号:17802164 上传时间:2022-12-10 格式:DOCX 页数:19 大小:126.86KB
下载 相关 举报
JAVA吃豆豆项目报告Word格式文档下载.docx_第1页
第1页 / 共19页
JAVA吃豆豆项目报告Word格式文档下载.docx_第2页
第2页 / 共19页
JAVA吃豆豆项目报告Word格式文档下载.docx_第3页
第3页 / 共19页
JAVA吃豆豆项目报告Word格式文档下载.docx_第4页
第4页 / 共19页
JAVA吃豆豆项目报告Word格式文档下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

JAVA吃豆豆项目报告Word格式文档下载.docx

《JAVA吃豆豆项目报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《JAVA吃豆豆项目报告Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。

JAVA吃豆豆项目报告Word格式文档下载.docx

2总体设计

2.1主类设计

2.2游戏功能的设计

大嘴鱼在吃到小鱼后会升级,速度加快。

3详细设计与实现

3.1大嘴鱼的设计

首先生成创建imgae,获取image的画笔Graphics,利用Graphics完成游戏界面的绘制。

Food类的绘制,遍历Food集合,向Food类的paint方法传入画笔。

绘制大嘴鱼,小鱼。

Food对象用自身方法绘制自己。

另绘制积分字段,根据游戏时长绘制游戏状态。

最后讲image画入Frame中,完成界面的绘制过程。

Frame继承了Runnable方法,在其run方法中,每30毫秒,调用repaint方法,重绘场景,完成地图场景的刷新。

/**

*@(#)fish.BigMouthFish.java2008-7-31

*CopyRightInformation:

Tarena

*Project:

fish

*JDKversionused:

jdk1.6.4

*Comments:

大嘴鱼类

*Version:

1.0

*SrDateModifiedByWhy&

Whatismodified

*1.2008-7-31小猪新建

**/

packagefish;

importjava.awt.Color;

importjava.awt.Graphics;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjavax.swing.Timer;

/**

*大嘴鱼类<

br>

*此类继承AcitonListener,实现AcitonPerformed方法,练习ActionListener的另一种实现方法<

*此类还练习定时器Timer的使用<

*此类还练习图形类Graphics的使用<

*2008-7-31

*@author达内科技[TarenaTrainingGroup]

*@version1.0

*@sinceJDK1.6(建议)

*/

publicclassBigMouthFishimplementsActionListener{

/**大嘴鱼嘴的方向:

0-上*/

publicstaticintUP=0;

/**大嘴鱼嘴的方向:

1-右*/

publicstaticintRIGHT=1;

2-下*/

publicstaticintDOWN=2;

3-左*/

publicstaticintLEFT=3;

/**大嘴鱼的身体大小,以size为半径画圆*/

publicintsize=50;

/**大嘴鱼现在的方向(以嘴的方向为基准)*/

publicintdirection=RIGHT;

/**大嘴鱼身体的颜色*/

privateColorcolor=Color.CYAN;

/**大嘴鱼的位置x*/

publicintposx=80;

/**大嘴鱼的位置y*/

publicintposy=80;

/**大嘴鱼的速度,鱼每次前进的像素*/

publicintspeed=4;

/**大嘴鱼眼睛的大小*/

privateinteyesize=size/5;

/**大嘴鱼眼睛的位置x*/

privateinteyeposx=posx+size/2;

/**大嘴鱼眼睛的位置y*/

privateinteyeposy=posy+size/5;

/**大嘴鱼眼睛的颜色*/

privateColoreyecolor=Color.RED;

/**大嘴鱼嘴的最大角度的一半*/

privateintmaxMonth=30;

/**大嘴鱼现在嘴角的角度*/

privateintmonthsize=30;

/**大嘴鱼的嘴是否张开*/

privatebooleanisOpen=true;

privateTimertime=null;

*大嘴鱼缺省构造函数.<

*创建一个位置为(200,200),大小为50,方向为右,颜色为Color.CYAN,速度为10的大嘴鱼

publicBigMouthFish(){

//this的使用。

this(200,200,50,RIGHT,Color.CYAN,4);

}

*根据位置、大小、方向、颜色、速度构造一个大嘴鱼。

*@paramposx大嘴鱼的位置x。

*@paramposy大嘴鱼的位置y。

*@paramsize大嘴鱼的大小。

*@paramdirection大嘴鱼的方向:

0-上;

1-右;

2-下;

3-左。

出入错误时,默认改为1。

*@paramcolor大嘴鱼的颜色。

*@paramspeed大嘴鱼的速度。

publicBigMouthFish(intposx,intposy,intsize,intdirection,Colorcolor,intspeed){

this.posx=posx;

this.posy=posy;

this.size=size;

if(direction==1||direction==2||direction==3||direction==4)

this.direction=direction;

this.color=color;

this.speed=speed;

eyesize=size/7;

initEye();

time=newTimer(FishPool.reTime,this);

time.start();

}

*大嘴鱼移动。

根据鱼的方向移动鱼。

publicvoidmove(){

switch(direction){

case0:

posy--;

break;

case1:

posx++;

case2:

posy++;

case3:

posx--;

default:

}

*改变大嘴鱼身体的颜色。

*@paramcolor欲改变大嘴鱼身体的颜色

publicvoidchangeColor(Colorcolor){

*改变大嘴鱼的方向

*@paramdirection欲改变大嘴鱼的方向

publicvoidchangeDir(intdirection){

this.direction=direction;

*使用画笔绘画大嘴鱼.大嘴鱼的头像:

一个扇形的是鱼脸,上面有一个小圆是眼睛<

*1.保存画笔颜色<

*2.绘制大嘴鱼的脸<

*3.绘制大嘴鱼的眼睛<

*4.恢复画笔颜色<

*@paramg画笔

publicvoidpaint(Graphicsg){

//保存画笔的颜色

Colorc=g.getColor();

//绘制鱼脸

g.setColor(color);

//从(posx,posy)点开始,绘制宽为size,高为size,开始角度为(direction%2==0?

(direction+1):

(direction-1))*90+monthsize,弧度为360-2*maxMonth的弧形

g.fillArc(posx,posy,size,size,(direction%2==0?

(direction-1))*90+monthsize,360-2*monthsize);

//绘制鱼眼

g.setColor(eyecolor);

g.fillOval(eyeposx,eyeposy,eyesize,eyesize);

//恢复画笔颜色

g.setColor(c);

*大嘴鱼张嘴闭嘴事件<

*此处只负责鱼的角度的变化,不负责鱼的重绘。

*重绘在鱼池中实现。

<

*这样的好处:

保证鱼的绘制和步伐分开。

显示层和逻辑层单独处理。

(面向对象的责任问题)。

*@parame事件对象

publicvoidactionPerformed(ActionEvente){

if(isOpen){

monthsize-=2;

if(monthsize<

=0)

isOpen=false;

}else{

monthsize+=2;

if(monthsize>

=maxMonth)

isOpen=true;

*方向改变时,眼睛的改变。

privatevoidinitEye(){

case0:

eyeposx=posx+size/7;

eyeposy=posy+size/2-eyesize;

break;

case1:

eyeposx=posx+size/2;

eyeposy=posy+size/7;

case2:

eyeposx=posx+size*5/7;

eyeposy=posy+size/2;

case3:

eyeposx=posx+size/2-eyesize;

default:

}

3.2小鱼的设计

小鱼15秒内如果没被吃掉,将在10秒后消失。

消失前会闪烁不停。

*@(#)fish.FishBean.java2008-7-31

豆豆类

*豆豆类

*@authorAdministrator

publicclassFishBeanimplementsActionListener{

/**小鱼的位置x*/

publicintposx=190;

/**小鱼的位置y*/

publicintposy=190;

/**小鱼的大小,以size为半径画豆豆(圆)。

publicintsize=10;

/**小鱼的当前颜色*/

privateColorcolor=Color.MAGENTA;

/**小鱼的新颜色*/

privateColornewColor=Color.MAGENTA;

/**小鱼的旧颜色*/

privateColoroldColor=Color.GRAY;

/**小鱼消失时的闪烁时间*/

publicstaticintflickerTime=350;

/**小鱼消失时的闪烁次数*/

publicstaticintfilckerNum=8;

privateinthasFileckedNum=0;

/**小鱼消失时闪烁的定时器*/

privateTimertimer=null;

*缺省构造函数。

按位置(40,40),大小15,颜色Color.MAGENTA构造一个豆豆。

publicFishBean(){

this(190,190,10,Color.MAGENTA,Color.GRAY);

*按照位置、大小、颜色构造一个豆豆类。

*@paramposx豆豆的水平坐标x。

*@paramposy豆豆的垂直坐标y。

*@paramsize豆豆的大小。

*@paramnewColor豆豆的颜色。

*@paramoldColor豆豆的旧颜色

publicFishBean(intposx,intposy,intsize,ColornewColor,ColoroldColor){

this.newColor=newColor;

this.oldColor=oldColor;

this.color=newColor;

timer=newTimer(flickerTime,this);

*移动豆豆到新的位置。

*@paramposx豆豆的新水平坐标x。

*@paramposy豆豆的新垂直坐标y。

publicvoidnewPos(intposx,intposy){

*绘制豆豆。

g.fillOval(posx,posy,size,size);

*停止Timer。

publicvoidstopTimer(){

color=newColor;

timer.stop();

hasFileckedNum=0;

*启动Timer。

publicvoidrunTimer(){

timer.start();

*定时器事件。

hasFileckedNum++;

if(color.equals(newColor)||color==newColor)

color=oldColor;

else

color=newColor;

//定时器运行的次数完成时,停止定时器。

if(hasFileckedNum==filckerNum&

&

timer.isRunning()){

stopTimer();

*Timer定时器是否运行中。

*@return返回Timer是否运行中。

publicbooleantimerIsRunning(){

returntimer.isRunning();

3.3碰撞检测代替的实现

该游戏并不对大嘴鱼进行碰撞检测。

省去了地图绘制过程。

利用之前所生成的坐标点集合。

大嘴鱼并不对地图边缘进行碰撞检测。

*@(#)tools.FishUtilities.java2008-7-31

tools

检测大嘴鱼和小鱼碰撞类。

packagetools;

importfish.BigMouthFish;

importfish.FishBean;

*检测大嘴鱼和小鱼碰撞类。

*此类练习Math的静态函数的使用。

publicclassFishUtilities{

*返回大嘴鱼是否吃掉了小鱼。

*方式:

检测2鱼(圆)之间是否相切或相交。

*判断2圆心之间的距离小于2圆半径之和。

此处判断小于大嘴鱼的半径即可。

让大嘴鱼可以吃掉小鱼。

*@paramfish

*@parambean

*@return返回大鱼是否吃掉小鱼。

publicstaticbooleanisInteraction(BigMouthFishfish,FishBeanbean){

returnMath.pow(fish.posx+fish.size/2-bean.posx-bean.size/2,2)+Math.pow(fish.posy+fish.size/2-bean.posy-bean.size/2,2)<

=Math.pow(fish.size/2,2);

大嘴鱼移动的时候,先改变tx、ty临时坐标,判断临时坐标是否在坐标集中。

如果在,将临时坐标赋予坐标。

否则恢复临时坐标,将无法移动。

3.4随机出现小鱼的实现

小鱼被大鱼吃掉后将会随机刷新在地图的某一个地点。

*@(#)RandomUtil.java2008.07.01

DataCollectorSys_Client

数学类-随机数生成类

*1.2007.07.17小猪新建

importjava.util.Random;

*数学类-随机数生成类

*2008-07-16

publicclassRandomUtil{

*生成a-b的随机数

*@parama整数a

*@paramb整数b

*@returna-b的随机数

publicstaticintrandomInt(inta,intb){

intt,n=0;

if(a>

b)

{

t=a;

a=b;

b=t;

t=(int)(Math.ceil(Math.log10(b)));

//对b向上取整

while(true)

n=(int)(Math.random()*Math.pow(10,t));

//随机数*10的t次方

if(n>

=a&

n<

=b)

//System.out.println("

生成的随机数如下:

"

+n);

returnn;

*返回0-a的随机数。

*@parama整数a。

*@return返回0-a的随机数。

publicstaticintrandomInt(inta){

returnnewRandom().nextInt(a);

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

当前位置:首页 > 小学教育 > 数学

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

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