Java课程设计小游戏.docx

上传人:b****8 文档编号:9167467 上传时间:2023-05-17 格式:DOCX 页数:48 大小:206.78KB
下载 相关 举报
Java课程设计小游戏.docx_第1页
第1页 / 共48页
Java课程设计小游戏.docx_第2页
第2页 / 共48页
Java课程设计小游戏.docx_第3页
第3页 / 共48页
Java课程设计小游戏.docx_第4页
第4页 / 共48页
Java课程设计小游戏.docx_第5页
第5页 / 共48页
Java课程设计小游戏.docx_第6页
第6页 / 共48页
Java课程设计小游戏.docx_第7页
第7页 / 共48页
Java课程设计小游戏.docx_第8页
第8页 / 共48页
Java课程设计小游戏.docx_第9页
第9页 / 共48页
Java课程设计小游戏.docx_第10页
第10页 / 共48页
Java课程设计小游戏.docx_第11页
第11页 / 共48页
Java课程设计小游戏.docx_第12页
第12页 / 共48页
Java课程设计小游戏.docx_第13页
第13页 / 共48页
Java课程设计小游戏.docx_第14页
第14页 / 共48页
Java课程设计小游戏.docx_第15页
第15页 / 共48页
Java课程设计小游戏.docx_第16页
第16页 / 共48页
Java课程设计小游戏.docx_第17页
第17页 / 共48页
Java课程设计小游戏.docx_第18页
第18页 / 共48页
Java课程设计小游戏.docx_第19页
第19页 / 共48页
Java课程设计小游戏.docx_第20页
第20页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Java课程设计小游戏.docx

《Java课程设计小游戏.docx》由会员分享,可在线阅读,更多相关《Java课程设计小游戏.docx(48页珍藏版)》请在冰点文库上搜索。

Java课程设计小游戏.docx

Java课程设计小游戏

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

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;

import java、awt、MediaTracker;

importjavax、swing、*;

importjava、awt、event、*;

importjava、util、EventListener;

importjava、util、Vector;

importlightning、*;

publicclassMainPanelextends JPanelimplementsRunnable,MouseMotionListener,MouseListener{

 Gamea;

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

 Vector EEv=newVector();//敌机数组

  Vector BOMBv=new Vector();//爆炸数组

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

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

 int E_num;

intE_max;//敌机最大数

 int E_vel;//敌机速度

intE_mov;//敌机横移几率

intE_hit;//敌机开火几率

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

inthero_hp;//hero生命

 Imageback=null;//背景图片

Image hero=null;//hero图片

 Image fire=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;

int y;//背景滚动变量

int hero_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=new Font("黑体”,Font、BOLD,90);

FontS=newFont(”幼圆”,Font、BOLD,15);

Font SS=new Font(”幼圆”,Font、BOLD,25);

  MainPanel(Gamea){

 this、a=a;

tracker=new MediaTracker(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=new Thread(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(Graphics g){

 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〈EBv、size();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(int i=0;i<BBv、size();i++){

 PlayerBullet bs;

 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、c

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2