java课程设计报告39577.docx
- 文档编号:26440928
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:49
- 大小:521.26KB
java课程设计报告39577.docx
《java课程设计报告39577.docx》由会员分享,可在线阅读,更多相关《java课程设计报告39577.docx(49页珍藏版)》请在冰豆网上搜索。
java课程设计报告39577
学院
Java课程设计报告
题目風云J-20
所在院系计科学院
学生仁华
专业计算机科学与技术
班级09计本1班
学号2009406010
2011年12月15日
一、游戏项目分析与设计
1、游戏项目功能分析
本游戏通过玩家飞机(J-20)发射子弹攻击敌机,当敌机被飞机子弹打中的时候飞发生爆炸,使得敌机消失,并且同时播放效果音乐以及爆炸效果。
本游戏中的角色J-20、敌机、B-2等均能发射子弹攻击对方,其中B-2能够发射导弹。
当敌机子弹打中J-20时J-20的生命值J-20_HP会相应的减少,当B-2的子弹或者导弹击中J-20时J-20的HP也相应的减少。
当飞机与敌机相撞的时候,敌机爆炸(同时播放效果),J-20_HP减少,J-20与B-2相撞的时候J-20发生爆炸且游戏结束。
当J-20_HP为0时,游戏结束,当J-20的子弹打中B-2时B-2_HP减少,当减少到0的时候B-2死亡,游戏胜利即游戏通关。
2、本系统共包括六个Java源文件
类之间的关系如图1.1所示。
图1.1类之间的关系
3、Java源文件及其功能如表1.1所示。
表1.1文件清单
序号
文件名
主要功能
备注
1
StartGame.java
主窗体类
含main方法
2
FeiJi.java
定义飞机类
3
ZiDan.java
定义飞机的子弹类
4
DiJi.java
定义敌机类
5
DiJiZiDan.java
定义敌机子弹类
6
Boss.java
定义Boss类(B-2)
7
BossZiDan.java
定义Boss子弹类
8
BossDaoDan.java
定义BossDaodan类
9
GuanBi.java
定义关闭游戏窗口类
10
BeiJing.java
定义游戏背景类
11
GameSound.java
定义播放背景音乐类
二、系统实现
1、主类StartGame(其中有一个部类(线程类))
(1)成员变量如表2.1所示
表2.1成员变量
成员变量描述
变量类型
成员变量名
工具包
Toolkit
Tool
缓冲图片
Image
Hc_img
游戏状态
int
Game_type
敌机数量
int
DJNum
子弹坐标
int
zd_y
飞机对象
FeiJi
Fj
Boss对象
Boss
Bs
背景对象
BeiJing
bj
子弹集合
ArrayList
zd_List
敌机集合
ArrayList
dj_List
敌机子弹集合
ArrayList
djzd_List
Boss导弹集合
ArrayList
bsdd_List
Boss子弹集合
ArrayList
bszd_List
Boss子弹集合
ArrayList
bszd01_List
爆炸集合
ArrayList
bz_List
爆炸图片数组
Image
bz_img[15]
媒体跟踪器对象
MediaTracker
mt
声音对象
GameSound
music
计数器
int
num
(2)方法如表2.2所示
表2.2方法
名称
功能
备注
showWindow()
创建主窗口
addKeyListener()
添加键盘监听
update(Graphicsg)
创建缓冲图片
paint(Graphicsg)
画图片方法
main(String[]args)
主方法
(3)源文件StartGame.java代码如下给出。
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Frame;
importjava.awt.Graphics;
importjava.awt.Image;
importjava.awt.MediaTracker;
importjava.awt.Toolkit;
importjava.awt.event.KeyAdapter;
importjava.awt.event.KeyEvent;
importjava.util.ArrayList;
publicclassStartGameextendsFrame{
//Toolkit.getDefaultToolkit()→获取默认工具包
publicToolkittool=Toolkit.getDefaultToolkit();
Imagehc_img=null;
//设置游戏状态0初始1进行中2胜利3失败4暂停
intgame_type=0;
//敌机死亡数量
intDJNum=0;
intzd_y;
//创建一个飞机类对象
FeiJifj=null;
//创建一个Boss对象
Bossbs=null;
//创建一个背景对象
BeiJingbj=null;
//创建一个子弹集合,
ArrayListzd_List=newArrayList();
//创建一个敌机集合,
ArrayListdj_List=newArrayList();
//创建敌机子弹集合
ArrayListdjzd_List=newArrayList();
//创建Boss子弹集合
ArrayListbosszd_List=newArrayList();
ArrayListbosszd01_List=newArrayList();
//创建Boss导弹集合
ArrayListbossdd_List=newArrayList();
//创建一个子弹爆炸集合
ArrayListbz_List=newArrayList();
//定义一个爆炸图片数组
Image[]bz_img=newImage[15];
//定义一个媒体跟踪器
MediaTrackermt=newMediaTracker(this);
//创建一个声音类对象
GameSoundmusic=newGameSound();
//创建一个计数器
publicintnum=0;
//创建一个线程类
publicvoidshowWindow(){
//把爆炸图片存到图片数组中
for(inti=0;i Imageimg=tool.getImage(StartGame.class .getResource("Images/largeBurst"+i+".png")); bz_img[i]=img; mt.addImage(img,0); } try{ mt.waitForID(0); }catch(InterruptedExceptione1){ e1.printStackTrace(); } //播放音乐 music.playBgSound("go.mp3"); //设置窗体的标题 setTitle("風云J-20I"); //获取屏幕的x,y坐标 intx=tool.getScreenSize().width; inty=tool.getScreenSize().height; //设置窗体的大小 setSize(600,700); //创建一个飞机对象 fj=newFeiJi(getWidth()/2-30,getHeight()-80,this); //创建一个线程对象 MyThreadmy=newMyThread(); //启动线程 my.start(); //创建一个背景对象 bj=newBeiJing(this); //创建一个Boss对象 bs=newBoss(getWidth()/2-120,this); //设置窗体的初始位置设置居中.屏幕x坐标的一半减去组件x坐标的一半,屏幕y坐标的一半减去组件y坐标的一半. setLocation(x/2-getWidth()/2,y/2-getHeight()/2); //是否允许用户改变窗体大小 setResizable(false); //设置窗体是否可见 setVisible(true); //调用提供关闭的方法 Guanbigb=newGuanbi(); addWindowListener(gb); //添加键盘监听器 addKeyListener(newKeyAdapter(){ publicvoidkeyPressed(KeyEvente){ //游戏状态必须为0,同时必须按下enter键 if(e.getKeyCode()==10&&game_type==0){ game_type=1; //播放游戏开始的music music.playBgSound("BGM_0001.mp3"); } //当游戏失败的时候按Enter键初始化游戏状态 if(e.getKeyCode()==10&&game_type==3){//游戏状态为3,同时必须按下enter键 game_type=1; //播放游戏开始的music music.playBgSound("BGM_0001.mp3"); m.fj.hp=120;//玩家HP fj=newFeiJi(getWidth()/2-30,getHeight()-80,m);//飞机返回初始坐标 zd_List.removeAll(zd_List);//移除所有的子弹集合 bz_List.removeAll(bz_List);//移除所有的爆炸集合 bosszd_List.removeAll(bosszd_List);//移除Boss子弹集合 bosszd01_List.removeAll(bosszd01_List);//移除Boss子弹集合 bossdd_List.removeAll(bossdd_List);//移除Boss导弹集合 } //飞机移动 fj.moveFeiJi(e); } }); } //创建一个窗体对象 StartGamem=this; //定义一个计数器,用于记住子弹打死敌机的个数 intdjNum=0; classMyThreadextendsThread{ //重写Thread类的run() publicvoidrun(){ while(true){ try{ Thread.sleep(30); num++; if(num==80){ DiJidj=newDiJi(m); dj_List.add(dj); num=0; djNum++; } }catch(InterruptedExceptione){ e.printStackTrace(); } repaint(); } } } //创建图片缓冲区 publicvoidupdate(Graphicsg){ if(hc_img==null){ //创建缓冲图片 hc_img=createImage(getWidth(),getHeight()); } //得到缓冲图片的画笔 Graphicshc_g=hc_img.getGraphics(); //把窗体图片画在缓冲图片上 paint(hc_g); //把缓冲图片画到窗体上 g.drawImage(hc_img,0,0,getWidth(),getHeight(),this); } //重写paint方法 publicvoidpaint(Graphicsg){ if(game_type==0){ bj.paintBJ(g); }elseif(game_type==1){ bj.paintStartingBJ(g); //画一个飞机 fj.paintFeiJi(g); //从子弹集合中取出子弹 for(inti=0;i ZiDanzd=(ZiDan)zd_List.get(i); //画子弹 zd.paintZiDan(g); } //如果打死的敌机数超过10,这画Boss if(djNum>=10){ //画Boss bs.paintBoss(g); } //从敌机集合里面讲敌机取出来 for(intj=0;j DiJidj=(DiJi)dj_List.get(j); //画敌机 dj.paintDiJi(g); //如果Boss出现则移除所有的敌机 if(bs.boss_y>=0){ dj_List.removeAll(dj_List); } } //从敌机子弹集合里面将敌机子弹取出来 for(intk=0;k DiJiZiDandjzd=(DiJiZiDan)djzd_List.get(k); //画敌机子弹 djzd.paintDiJiZiDan(g); //如果Boss出现则移除所有的敌机 if(bs.boss_y>=0){ djzd_List.removeAll(djzd_List); } } //从Boss子弹集合里面将Boss子弹取出来 for(intk=0;k BossZiDanbosszd=(BossZiDan)bosszd_List.get(k); //画敌机子弹 bosszd.paintBossZiDan(g); } //从Boss子弹集合里面将Boss子弹取出来 for(intk=0;k BossZiDanbosszd01=(BossZiDan)bosszd01_List.get(k); //画敌机子弹 bosszd01.paintBossZiDan(g); } //从Boss导弹集合里面将Boss导弹取出来 for(intk=0;k BossZiDanbossdd=(BossZiDan)bossdd_List.get(k); //画敌机子弹 bossdd.paintBossDaoDan(g); } //画子弹打中目标时的爆炸 for(intj=0;j BaoZhabz=(BaoZha)bz_List.get(j); //画敌机子弹 bz.paintBaoZha(g); } }elseif(game_type==2){//游戏胜利 //画一个游戏胜利的图片 bj.paintStartingBJ(g); //设置画笔颜色 g.setColor(Color.RED); //设置画笔字体大小和类型 g.setFont(newFont("华文行楷",Font.BOLD,40)); //在窗体上打印“GameOver! ! ” g.drawString("GameWin! ",getWidth()/2-100,getHeight()/2); g.drawString("Youaresogreat! ",getWidth()/2-150, getHeight()/2+50); }elseif(game_type==3){//游戏失败 //画一个游戏失败的图片 bj.paintStartingBJ(g); //设置画笔颜色 g.setColor(Color.RED); //设置画笔字体大小和类型 g.setFont(newFont("华文行楷",Font.BOLD,40)); //在窗体上打印“GameOver! ! ” g.drawString("GameOver! ",getWidth()/2-100,getHeight()/2); g.drawString("按Enter键继续游戏! ",getWidth()/2-, getHeight()/2+50); } } //主方法 publicstaticvoidmain(String[]args){ StartGamem=newStartGame(); m.showWindow(); } } 2、类FeiJi (1)成员变量如表2.3所示 表2.3成员变量 成员变量描述 变量类型 成员变量名 飞机坐标 int fj_x,fj_y 飞机生命值 int Hp 窗体对象 StartGame m 工具包 Toolkit Tool 飞机图片 Imge fj_img (2)方法如表2.4所示 表2.4方法 名称 功能 备注 FeiJi(intx,inty,inthp) 初始化fj_x,fj_y,hp 构造方法 paintFeiJi(Graphicsg) 画飞机图片 getRect() 话矩形框 套住飞机 moveFeiJi(keyEvente) 移动飞机 (3)源文件FeiJi.java如下列出。 importjava.awt.Color; importjava.awt.Font; importjava.awt.Graphics; importjava.awt.Image; importjava.awt.Rectangle; importjava.awt.Toolkit; importjava.awt.event.KeyEvent; publicclassFeiJi{ publicintfj_x; publicintfj_y; finalintA=60; //Boss的生命值 publicinthp=120; //创建一个窗体对象 StartGamem=null; //Toolkit.getDefaultToolkit()→获取默认工具包 publicToolkittool=Toolkit.getDefaultToolkit(); //得到一个飞机图片 Imagefj_img=tool.getImage(FeiJi.class.getResource("Images/J-20a.png")); //通过构造方法实例化StartGame对象和为飞机设置初始位置 publicFeiJi(intfj_x,intfj_y,StartGamem){ this.fj_x=fj_x; this.fj_y=fj_y; this.m=m; } //一个画飞机的方法 publicvoidpaintFeiJi(Graphicsg){ g.drawImage(fj_img,fj_x,fj_y,A,A,m); g.setColor(Color.red);//画笔颜色为红色 g.setFont(newFont("隶书",Font.BOLD,15)); //在窗体上打印fj的生命值hp g.drawString("J-20hp",m.getWidth()-590,m.getHeight()-25); g.drawRect(10,685,120,5);//画一个矩形边框 g.fillRect(10,685,hp*1,5);//画一个矩形实体框 //判断飞机是否与敌机相撞 for(intk=0;k //取出单个敌机 DiJidj=(DiJi)m.dj_List.get(k); //判断飞机是否与敌机相撞 booleanbool=this.getRect().intersects(dj.getRect()); if(bool){ //如果飞机与敌机相撞则移除敌机 m.dj_List.remove(dj); BaoZhabz=newBaoZha(dj.dj_x,dj.dj_y,m,m.bz_img); m.bz_List.add(bz); //飞机生命值减少 this.hp-=30; //播放音乐 m.music.playSound("bz.mp3"); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课程设计 报告 39577