Java课程设计小游戏word文档良心出品.docx

上传人:b****4 文档编号:24369376 上传时间:2023-05-26 格式:DOCX 页数:47 大小:226.96KB
下载 相关 举报
Java课程设计小游戏word文档良心出品.docx_第1页
第1页 / 共47页
Java课程设计小游戏word文档良心出品.docx_第2页
第2页 / 共47页
Java课程设计小游戏word文档良心出品.docx_第3页
第3页 / 共47页
Java课程设计小游戏word文档良心出品.docx_第4页
第4页 / 共47页
Java课程设计小游戏word文档良心出品.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

Java课程设计小游戏word文档良心出品.docx

《Java课程设计小游戏word文档良心出品.docx》由会员分享,可在线阅读,更多相关《Java课程设计小游戏word文档良心出品.docx(47页珍藏版)》请在冰豆网上搜索。

Java课程设计小游戏word文档良心出品.docx

Java课程设计小游戏word文档良心出品

《高级语言程序设计》课程设计报告

1、程序设计说明书

【设计题目】

雷霆行动游戏程序

【问题描述】

雷霆行动是一款供大家休闲娱乐的小游戏,游戏通过鼠标控制我方飞机hero的移动,达到躲闪敌机的目的;利用鼠标键发射子弹和导弹,达到击毁敌机的目的,摧毁敌机有积分。

此游戏为闯关积分类小游戏。

【软件功能】

1.按鼠标左键,游戏开始。

2.利用鼠标移动控制hero自由移动,闪躲敌方子弹。

3.利用鼠标左键发射子弹,实现打中敌方飞机的功能;利用鼠标右键释放导弹,实现摧毁大量敌机的功能,击中一个敌方飞机积一分。

4.hero碰到对方子弹会消耗生命,消耗生命的多少,依据子弹的不同而不同。

5.一关之后会进入下一关。

6.游戏右上角红色的进度条表示hero的生命,当红色全部消失之后,游戏结束,显示死亡。

7.游戏结束后,可重新开始,同1。

【算法思想】

1.创建游戏主界面,确定窗口的坐标。

2.设计游戏开始界面显示信息及信息坐标。

3.设置游戏进行中的信息,hero的移动、释放子弹和导弹,达到击毁敌机的目的。

4.处理游戏进行中的子弹、大爆、爆炸、敌机消失和存在的条件。

5.设置进入下一关的条件。

6.设计游戏结束界面显示信息及信息坐标。

7.处理游戏重新开始满足的条件。

8.装载图像。

9.对游戏进行调试和改进,使这个游戏更加完善。

【类的设计】

本程序共有七个类:

1.MainPanel

属性:

BBv为子弹数组,EEv为敌机数组,BOMBv为爆炸数组,EBv为敌机子弹数组,DBv为大爆数组,E-num为敌机数量,E-max敌机最大数,E-vel为敌机速度,E-mov为敌机横移几率,E-hit为敌机开火几率,Sum为击毁敌机数量,hero-hp为hero生命,back至db-2均为图片,tracker为媒体跟踪器,y为背景滚动变量,seq为hero的动画变量,isfire为hero开火,isblast为是否发爆,blastnum为大爆的数量,blastc为控制大爆,f、ff、s、ss均为游戏界面上显示的信息;

方法:

MainPanel(Game)构造方法,paint(Graphics)建立游戏开始界面如显示的文字,run()控制对象移动,BBmove(int,int)子弹的移动方法,DBmove(int,int)大爆的移动方法,mouseDragged(MouseEvent)鼠标的拖拽用来保证hero不出界,mouseMoved(MouseEvent)鼠标的移动用来控制hero移动,mousePressed(MouseEvent)鼠标按键在组件上按下时调用,重新开始游戏,mouseClicked(MouseEvent)鼠标按键在组件上单击(按下并释放)时调用,释放子弹,mouseReleased(MouseEvent)鼠标按钮在组件上释放时调用,mouseEntered(MouseEvent)鼠标进入组件上调用,mouseExited(MouseEvent)鼠标离开组件时调用;

功能:

游戏的开始、运行、结束与重新开始。

2.Game继承JFrame

属性:

x为游戏主界面的横坐标,y为游戏主界面的纵坐标,pl为hero的子弹;

方法:

Game()创建游戏主界面,main(String[])主方法;

功能:

创建出游戏的主界面。

3.Blast(大爆)

属性:

x为大爆的横坐标,y为大爆的纵坐标,cont为数量,islive为hero存活;

方法:

Blast(int,int)建立大爆的坐标,grow()构造方法;

功能:

构造一个大爆(导弹爆炸)的类。

4.Bomb(爆炸)

属性:

x为爆炸的横坐标,y为爆炸的纵坐标,cont为数量,islive为hero存活;

方法:

Bomb(int,int)建立爆炸的坐标,grow()构造方法;

功能:

构造一个爆炸(子弹击中敌机)的类。

5.Enemy(敌机)

属性:

x为敌机的横坐标,y为敌机的纵坐标,vx敌机数组的横坐标,vy为敌机数组的纵坐标,r为敌机横移几率,f为敌机开火几率,toleft为向左移动敌机,toright为向右移动敌机;

方法:

Enemy(int,int,int,int)建立敌机的坐标,move(int)实现敌机的移动,tofire()敌机释放子弹,hit(int,int)敌机的子弹攻击hero,hitblast(int,int)子弹产生爆炸;

功能:

构造一个敌机的类,实现敌机的移动。

6.EnemyBullet(敌机子弹)

属性:

x、y为敌机子弹的坐标,vx、vy为敌机子弹数组的坐标;

方法:

move()实现敌机子弹的移动,hit(int,int)敌机子弹攻击hero;

功能:

构造一个敌机子弹的类,实现敌机子弹的移动和攻击。

7.PlayerBullet(hero子弹)

属性:

x、y为hero子弹的坐标,v为hero子弹的速度;

方法:

move()实现hero子弹的移动,hit(int,int)hero子弹攻击敌机;

功能:

构造一个hero子弹的类,实现hero子弹的移动和攻击。

 

【用户界面】

游戏开始界面

 

游戏进行中界面

 

游戏结束界面

 

【程序技巧】

1.建立一个主类,其余六个类均通过这个主类来调用

2.响应鼠标事件

3.用户界面采用图形用户界面

4.利用媒体跟踪器监测图像的装载

5.无效的子弹和被摧毁的敌机能及时处理,未被摧毁的敌机与子弹可以保留

6.游戏失败可以重新开始

【模块划分及调用关系】

 

 

 

【模块流程图】

游戏界面主框架模块:

 

游戏操作模块:

 

【运行说明】

按鼠标左键开始游戏,鼠标移动控制hero的移动,按鼠标左键打出子弹,攻击敌机,每打死一个敌机积一分,按鼠标右键放导弹,实现摧毁大量敌机的功能,本游戏共三关,若游戏中途失败,可以重新开始。

2、程序上机调试报告

【语法错误及其排除】

1.无法更改导弹数量。

解决方法:

添加Blastnum=10语句,即有十个导弹;

2.个别图片运行不出来。

解决方法:

将图片格式与程序中相匹配;

3.文字在程序中写出,但在游戏过程中不显示。

解决方法:

将文字的坐标调试好。

【算法错误及其排除】

1.点击鼠标右键无法实现大爆。

解决方法:

mouseReleased(MouseEvente)

2.hero的子弹打中敌机后敌机没有消失。

解决方法:

EBv.remove(i);

3、程序测试结果

【测试数据】

我方飞机的移动,是否能打出子弹,导弹的释放,能否摧毁敌方飞机,是否可以积分。

【输出结果】

游戏初始化

 

 

子弹爆炸情况

 

大爆(导弹爆炸)、飞机移动

【收获及体会】

本来以为课程设计是个很简单的事情,但是随着程序的编写,发现这是一个非常不容易的过程,通过去图书馆和上网查找资料,我发现我还有很多不足,并通过查JDK手册我也学习了很多知识,我意识到JDK手册是非常好的一种学习Java的工具,Java在生活中有很重要的应用性,这提高了我的学习兴趣。

编写程序的过程中我也遇到了很多困难,当程序出现错误运行不出来时,我非常着急,在冷静地分析、调通程序之后,我意识到有耐心、有恒心是多么重要啊!

在今后的学习生活中,我会更加努力,认真、耐心、细心地处理事情,相信我会逐步提高自己的能力。

 

4、源程序代码(Java语言,要求有尽可能多的注释语句)

packagelightning;

importjava.awt.*;

importjava.awt.Image;

importjava.awt.Toolkit;

importjava.awt.MediaTracker;

importjavax.swing.*;

importjava.awt.event.*;

importjava.util.EventListener;

importjava.util.Vector;

importlightning.*;

publicclassMainPanelextendsJPanelimplementsRunnable,MouseMotionListener,MouseListener{

Gamea;

VectorBBv=newVector();//子弹数组

VectorEEv=newVector();//敌机数组

VectorBOMBv=newVector();//爆炸数组

VectorEBv=newVector();//敌机子弹数组

VectorDBv=newVector();//大爆数组

intE_num;

intE_max;//敌机最大数

intE_vel;//敌机速度

intE_mov;//敌机横移几率

intE_hit;//敌机开火几率

intSum;//击坠敌机数量,击坠一个敌机积一分

inthero_hp;//hero生命

Imageback=null;//背景图片

Imagehero=null;//hero图片

Imagefire=null;//hero子弹图片

Imagefire_l=null;//hero子弹2图片

Imageel_0=null;//敌机图片

Imageel_0_l=null;//敌机left图片

Imageel_0_r=null;//敌机right图片

Imageel_bb=null;//敌机子弹图片

Imageel_bb_0=null;//敌机子弹2图片

Imagebomb_0=null;//敌机爆炸0图片

Imagebomb_1=null;//敌机爆炸1图片

Imagebomb_2=null;//敌机爆炸2图片

Imagebomb_3=null;//敌机爆炸3图片

Imagedb_1=null;//大爆1图片

Imagedb_2=null;//大爆2图片

MediaTrackertracker=null;//媒体跟踪器,用来监测图像的装载

ThreadGame_star;

inty;//背景滚动变量

inthero_oldx,hero_oldy;//hero的旧x,y坐标

inthero_x,hero_y;//hero的新x,y坐标

intseq;//hero的动画变量

booleanisfire;//hero开火

booleanisblast;//是否发爆

intBBx,BBy;//子弹的横纵坐标

intDBx,DBy;//大爆的横纵坐标

intblastnum;//大爆的数量

booleanblastc;//控制大爆

Fontf=newFont("黑体",Font.BOLD,30);

Fontff=newFont("黑体",Font.BOLD,90);

FontS=newFont("幼圆",Font.BOLD,15);

FontSS=newFont("幼圆",Font.BOLD,25);

MainPanel(Gamea){

this.a=a;

tracker=newMediaTracker(this);

//将以下图片加到媒体跟踪器中

back=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("back3.jpg"));

tracker.addImage(back,0);

hero=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("hero.jpg"));

tracker.addImage(hero,1);

fire=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("herozidan.jpg"));

tracker.addImage(fire,2);

fire_l=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("herozidan2.jpg"));

tracker.addImage(fire_l,3);

el_0=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("diji.jpg"));

tracker.addImage(el_0,4);

el_0_l=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("dijileft.jpg"));

tracker.addImage(el_0_l,5);

el_0_r=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("dijiright.jpg"));

tracker.addImage(el_0_r,6);

el_bb=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("dijizidan.jpg"));

tracker.addImage(el_bb,7);

el_bb_0=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("el_bb_0.jpg"));

tracker.addImage(el_bb_0,8);

bomb_0=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("bomb_0.jpg"));

tracker.addImage(bomb_0,9);

bomb_1=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("bomb_1.jpg"));

tracker.addImage(bomb_1,10);

bomb_2=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("bomb_2.jpg"));

tracker.addImage(bomb_2,11);

bomb_3=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("bomb_3.jpg"));

tracker.addImage(bomb_3,12);

db_1=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("db1.jpg"));

tracker.addImage(db_1,13);

db_2=Toolkit.getDefaultToolkit().getImage(MainPanel.class.getResource("db2.jpg"));

tracker.addImage(db_2,14);

this.addMouseMotionListener(this);

this.addMouseListener(this);

Game_star=newThread(this);

y=-(5*a.y);

hero_x=a.x/2-50;

hero_y=a.y-150;

hero_oldx=hero_x;

hero_oldy=hero_y;

hero_hp=-1;

seq=0;

Sum=0;

E_num=0;

E_max=9;

E_vel=7;

E_mov=90;

E_hit=97;

isfire=false;

isblast=false;

blastnum=10;

blastc=false;

}

publicvoidpaint(Graphicsg){

g.drawImage(back,0,y,a.x,a.y*6,this);

g.setColor(Color.RED);

g.setFont(S);

g.drawString("导弹:

"+blastnum,a.x-400,25);//绘制大爆的数量

g.drawString("生",a.x-200,40);

g.drawString("命",a.x-200,55);

g.fillRect(a.x-150,65,10,hero_hp);

g.setColor(Color.BLACK);

g.drawRect(a.x-20,64,10,300);

if(seq==0){

g.setColor(Color.RED);

}

if(seq==1){

g.setColor(Color.BLACK);

}

g.setFont(S);

g.drawString("积分:

",a.x-250,25);

g.drawString(String.valueOf(Sum),a.x-210,25);

g.setFont(f);

if(hero_hp==-1){

g.setFont(f);

g.setColor(Color.RED);

g.drawString("雷霆行动",a.x/2-a.x/3,a.y/2-a.y/8);

g.drawString("你能消灭多少敌机?

",a.x/2-a.x/3,a.y/2-a.y/16);

g.setFont(SS);

g.setColor(Color.RED);

g.drawString("请按下鼠标左键开始",a.x/2-a.x/4,a.y/2+a.y/8);

g.dispose();

try{

Thread.sleep(50);

}catch(Exceptione){

}

this.Game_star=null;

}

//如果游戏结束显示如下信息

elseif(hero_hp<0){

g.setFont(ff);

g.setColor(Color.RED);

g.drawString("GAME",a.x/2-a.x/4,a.y/2-a.y/16);

g.drawString("OVER",a.x/2-a.x/4,a.y/2+a.y/16);

g.setFont(SS);

g.setColor(Color.RED);

g.drawString("请按下鼠标左键重来",a.x/2-a.x/4,a.y/2+a.y/10);

g.dispose();

try{

Thread.sleep(50);

}

catch(Exceptione){

}

this.Game_star=null;

}

//显示信息

if(Math.abs(y)>(a.y)*5-50){

g.drawString("本游戏即将开始",a.x/2-a.x/4,a.y/2-a.y/8);

g.drawString("练习模式",a.x/2-a.x/4,a.y/2-a.y/16);

}

if(Math.abs(y)>(a.y)*4&&Math.abs(y)<(a.y)*4+150){

E_max=13;

E_vel=7;

E_mov=90;

E_hit=95;

g.drawString("第一关即将开始",a.x/2-a.x/4,a.y/2-a.y/8);

}

if(Math.abs(y)>(a.y)*3&&Math.abs(y)<(a.y)*3+150){

E_max=16;

E_vel=9;

E_mov=90;

E_hit=93;

g.drawString("第二关即将开始",a.x/2-a.x/4,a.y/2-a.y/8);

}

if(Math.abs(y)>(a.y)*2&&Math.abs(y)<(a.y)*2+150){

E_max=29;

E_vel=11;

E_mov=90;

E_hit=91;

g.drawString("第三关即将开始",a.x/2-a.x/4,a.y/2-a.y/8);

}

if(Math.abs(y)>(a.y)&&Math.abs(y)<(a.y)+150){

E_max=32;

E_vel=13;

E_mov=90;

E_hit=89;

g.drawString("最后了祝你好运",a.x/2-a.x/4,a.y/2-a.y/8);

}

if(y==0){

E_max=40;

E_vel=18;

E_mov=90;

E_hit=86;

g.drawString("向上帝祈祷吧!

",a.x/2-a.x/4,a.y/2-a.y/8);

}

//处理敌机子弹s

for(inti=0;i

EnemyBulletebs;

ebs=(EnemyBullet)EBv.elementAt(i);

if(ebs.y>-50){

if(ebs.cont<6){

g.drawImage(el_bb,ebs.x,ebs.y,13,20,this);

}

if(ebs.cont>=6){

g.drawImage(el_bb_0,ebs.x,ebs.y,13,15,this);

}

}

}

//处理子弹s

for(inti=0;i

PlayerBulletbs;

bs=(PlayerBullet)BBv.elementAt(i);

if(bs.y>-50){

if(bs.cont<3){

g.drawImage(fire_l,bs.x,bs.y,30,30,this);

}

if(bs.cont>=3){

g.drawImage(fire,bs.x,bs.y,30,30,this);

}

}

}

//处理大爆

for(inti=0;i

Blastblast;

blast=(Blast)DBv.elementAt(i);

if(blast.islive){

if(blast.cont<10){

//System.out.println(""+blast.x+""+blast.y);

g.drawImage(db_1,blast.x,blast.y,200,200,this);

}

if(blast.cont>10&&blast.cont<20){

g.draw

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

当前位置:首页 > 解决方案 > 学习计划

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

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