Java课程设计小游戏.docx
- 文档编号:25202224
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:45
- 大小:193.09KB
Java课程设计小游戏.docx
《Java课程设计小游戏.docx》由会员分享,可在线阅读,更多相关《Java课程设计小游戏.docx(45页珍藏版)》请在冰豆网上搜索。
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;
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、drawImage(db_2,blast、x,blast、y,200,200,this)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 课程设计 小游戏