Java雷电游戏项目报告模板.docx
《Java雷电游戏项目报告模板.docx》由会员分享,可在线阅读,更多相关《Java雷电游戏项目报告模板.docx(15页珍藏版)》请在冰点文库上搜索。
![Java雷电游戏项目报告模板.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/ed135f49-b6f0-45c3-bb8c-533d7ddd8856/ed135f49-b6f0-45c3-bb8c-533d7ddd88561.gif)
Java雷电游戏项目报告模板
北京青年政治学院小学期
达内JAVA课程项目报告
项目题目:
雷电游戏的设计与实现
专业班级:
学生姓名:
学生学号:
指导教师姓名:
目录
一、系统目标X
二、系统设计思路X
三、系统详细设计X
四、系统实现X
五、系统设计总结XX
六、参考文献XX
1、系统目标
通过本游戏的设计,综合自己在校期间所学的理论知识,设计开发雷电游戏,使自己熟应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软件工程的系统理论,进一步巩固和加强自身对J2SE基础知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。
通过本游戏的开发,主要实现游戏的可操作性及美观性,同时使自己对JAVA语言的了解更进一层,为将来的实际工作打下坚实的基础。
二、系统设计思路
1、定义窗口的属性
2、分别设置背景图片,英雄飞机图片,敌机图片,子弹图片,爆炸的图片
3、分别设置敌机和英雄飞机的运动轨迹
4、写出判断敌机是否与英雄飞机相撞,子弹是否击中敌机的代码
5、设置一些丰富游戏的细致属性,例:
绘制积分情况和血量图,子弹发射的频率等
3、系统详细设计
1、定义窗口属性
(1)创建一个窗体对象
(2)设置窗体的标题
(3)设置窗体的大小
(4)关闭窗口时退出程序
(5)设置窗体在屏幕当中显示的位置
(6)设置窗体的显示
注:
游戏面板应做到1、继承JPanel2、实现相应的接口线程和鼠标监听事件
2、定义并设置游戏中的主要元素
(1)定义一个英雄飞机并对其属性进行设置
(2)定义一个存放英雄机子弹的集合
(3)定义存储敌机的数组,敌机初始化值为10并将其放入到数组当中
(4)创建一个生成随机数的Random对象
(5)定义一个存放爆炸图片的集合
(6)设置敌机的属性,并将创建好的敌机添加到数组当中
(7)绘制图片。
分别绘制英雄机的子弹,英雄飞机,敌机,爆炸图片
(8)对子弹的设置。
将创建的子弹添加到存放子弹的集合当中,控制子弹的发射频率,让子弹飞,得到集合中的每一个子弹,当鼠标的某一个键按下时,发射子弹,英雄机子弹自动移动等。
(9)写出鼠标点击,释放,拖拽时调用的方法代码
3、做判断时所用的代码编写
(1)判断子弹是否击中敌机
获取敌机的中心坐标
判断是否击中敌机的心脏
(2)判断敌机是否与英雄机相撞等
4、丰富游戏的设置
绘制得分情况,绘制英雄飞机血量图和游戏结束等字体
四、系统实现(游戏代码展示)
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjava.awt.event.MouseMotionListener;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Random;
importjavax.swing.ImageIcon;
importjavax.swing.JPanel;
publicclassGamePanelextendsJPanelimplementsRunnable,MouseListener,
MouseMotionListener{
privateFlightheroFlight;
privateListheroFires;
//定义存储敌机的数组
privateFlight[]flights;
//初始化敌机为10架
privateintnum=10;
//创建一个生成随机数的Random对象
privateRandomran=newRandom();
//定义一个统计积分的属性
privateintscore;
//定义一个存放爆炸图片的集合
privateListbomPics;
//创建面板的构造器,对属性进初始化
publicGamePanel(){
//创建存放爆炸图片集合的对象
bomPics=newArrayList();
//创建英雄飞机的对象,并对其属性进行设置
heroFlight=newFlight();
heroFlight.setWidth(80);
heroFlight.setHeight(80);
heroFlight.setX(200);
heroFlight.setY(300);
heroFlight.setDirection(Flight.UP);
heroFlight.setImage(newImageIcon("src/images/hero.gif").getImage());
heroFlight.setPanel(this);
heroFlight.setSpeed(3);
heroFlight.setWasFire(false);
heroFlight.setBload(100);
//创建存储英雄子弹的集合对象
heroFires=newArrayList();
//对存放敌机的数组进行创建并进行元素的初始化
flights=newFlight[num];
//创建敌机并将其放入到数组当中
for(inti=0;iFlightenemyFlight=newFlight();
//设置敌机的属性
enemyFlight.setWidth(40);
enemyFlight.setHeight(40);
enemyFlight.setX(ran.nextInt(500));
enemyFlight.setY(-ran.nextInt(600));
enemyFlight.setDirection(ran.nextInt(100)%3);
enemyFlight.setSpeed(ran.nextInt(3)+2);
enemyFlight.setImage(
newImageIcon("src/images/enemyPlane.gif")
.getImage());
enemyFlight.setPanel(this);
enemyFlight.setWasFire(false);
//将创建好的敌机添加到数组当中
flights[i]=enemyFlight;
}
}
//绘制图片
@Override
publicvoidpaint(Graphicsg){
super.paint(g);
this.setBackground(Color.BLACK);
g.drawImage(
newImageIcon("src/images/back3.gif").getImage(),
0,0,500,600,this);
if(heroFlight.getBload()>0){
//绘制英雄机的子弹
for(inti=0;iFireheroFire=heroFires.get(i);
heroFire.drawFire(g);
}
//绘制英雄飞机
heroFlight.drawFlight(g);
//绘制敌机
for(inti=0;iflights[i].drawFlight(g);
}
//绘制爆炸图片
for(inti=0;iBomPicbomPic=bomPics.get(i);
bomPic.drawBom(g);
//--------------
bomPics.remove(bomPic);
}
}else{
g.setColor(Color.RED);
g.setFont(newFont("宋体",Font.BOLD+Font.ITALIC,30));
g.drawString("游戏结束",200,260);
}
//绘制积分情况可血量图
g.setColor(Color.RED);
g.setFont(newFont("宋体",Font.BOLD,20));
g.drawString("积分:
"+score+"分",370,30);
g.drawString("生命",20,30);
g.setColor(Color.WHITE);
g.drawRect(65,17,100,10);
g.setColor(Color.RED);
g.fillRect(65,17,heroFlight.getBload(),11);
}
@Override
publicvoidrun(){
//用于控制子弹发射的频率
intcount=0;
while(true){
//敌机运动
for(inti=0;iflights[i].flightMove();
if(flights[i].getY()>this.getHeight()){
flights[i].setY(-ran.nextInt(500));
flights[i].setX(ran.nextInt(500));
}
}
if(heroFlight.isWasFire()&&count%10==0){
//说明发射子弹,创建子弹对象
FireheroFire=newFire();
heroFire.setWidth(40);
heroFire.setHeight(40);
heroFire.setX(heroFlight.getX()+heroFire.getWidth()/2);
heroFire.setY(heroFlight.getY());
heroFire.setDirection(Fire.UP);
heroFire.setSpeed(5);
heroFire.setImage(
newImageIcon("src/images/fire.gif").getImage());
heroFire.setPanel(this);
//将创建的子弹添加到存放子弹的集合当中
heroFires.add(heroFire);
}
//让子弹飞
for(inti=0;i//得到集合当中的每一个子弹
FireheroFire=heroFires.get(i);
heroFire.fireMove();
if(heroFire.getY()<0){
heroFires.remove(heroFire);
}
}
//判断子弹是否能够击中敌机
for(inti=0;i//英雄机的子弹
FireheroFire=heroFires.get(i);
for(intj=0;j//敌机
FlightenemyFlight=flights[j];
//判断是否击中
if(isHit(heroFire,enemyFlight)){
score++;
/**创建爆炸效果的图片对象,
*将图片对象添加到集合当中
**/
//创建图片对象
BomPicbomPic=newBomPic();
bomPic.setWidth(50);
bomPic.setHeight(50);
bomPic.setX(enemyFlight.getX());
bomPic.setY(enemyFlight.getY());
bomPic.setImage(
newImageIcon("src/images/bomb_0.gif").getImage());
bomPic.setPanel(this);
//将图片对象添加到集合当中
bomPics.add(bomPic);
//说明子弹击中敌机
//将子弹从集合当中移除
heroFires.remove(heroFire);
//将敌机的坐标再次随机设置
enemyFlight.setY(-ran.nextInt(500));
enemyFlight.setX(ran.nextInt(500));
i--;
j--;
break;
}
}
}
if(heroFlight.getBload()>0){
//判断敌机是否撞击英雄机
for(inti=0;iFlightenemyFlight=flights[i];
if(isHit(enemyFlight,heroFlight)){
heroFlight.setBload(heroFlight.getBload()-1);
enemyFlight.setY(-ran.nextInt(500));
enemyFlight.setX(ran.nextInt(500));
}
}
}
try{
//让线程休息一会
Thread.sleep(15);
//刷新输出新的界面,自动调用paint方法
repaint();
count++;
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
/**
*判断敌机是否与英雄机相撞
*@paramenemyFlight
*@paramheroFlight2
*@return
*/
privatebooleanisHit(FlightenemyFlight,FlightheroFlight){
intxx=(enemyFlight.getX()+enemyFlight.getWidth()/2)
-(heroFlight.getX()+heroFlight.getWidth()/2);
intyy=(enemyFlight.getY()+enemyFlight.getHeight()/2)
-(heroFlight.getY()+heroFlight.getHeight()/2);
intxy_sum=xx*xx+yy*yy;
intr_sum=
(enemyFlight.getWidth()/2
+heroFlight.getWidth()/2)
*(enemyFlight.getWidth()/2+heroFlight.getWidth()/2);
if(xy_sum<=r_sum){
returntrue;
}
returnfalse;
}
@Override
publicvoidmouseClicked(MouseEvente){
//鼠标点击时调用的方法
}
@Override
publicvoidmouseEntered(MouseEvente){
//鼠标进入面板时调用的方法
}
@Override
publicvoidmouseExited(MouseEvente){
//鼠标退出面板时调用的方法
}
@Override
publicvoidmousePressed(MouseEvente){
heroFlight.setWasFire(true);
}
@Override
publicvoidmouseReleased(MouseEvente){
//鼠标释放时调用的方法
heroFlight.setWasFire(false);
}
@Override
publicvoidmouseDragged(MouseEvente){
//鼠标拖拽时调用的方法
heroFlight.setX(e.getX()-heroFlight.getWidth()/2);
heroFlight.setY(e.getY()-heroFlight.getHeight());
//刷新输出面板调用paint方法
repaint();
}
@Override
publicvoidmouseMoved(MouseEvente){
//鼠标移动时调用的方法
heroFlight.setX(e.getX()-heroFlight.getWidth()/2);
heroFlight.setY(e.getY()-heroFlight.getHeight());
//刷新输出面板调用paint方法
repaint();
}
/**
*判断子弹是否击中敌机的方法
*/
privatebooleanisHit(FireheroFire,FlightenemyFlight){
//获取敌机的中心坐标
intx=enemyFlight.getX()+
enemyFlight.getWidth()/2;
inty=enemyFlight.getY()+
enemyFlight.getHeight()/2;
//判断是否击中敌机的心脏
if(x>heroFire.getX()
&&x<=(heroFire.getX()+heroFire.getWidth())
&&y>heroFire.getY()
&&y<=(heroFire.getY()+heroFire.getHeight())){
returntrue;
}
returnfalse;
}
}
五、系统设计总结
六、参考文献