收藏 分享(赏)

Java课程设计小游戏.doc

上传人:精品资料 文档编号:10909082 上传时间:2020-01-20 格式:DOC 页数:29 大小:279.82KB
下载 相关 举报
Java课程设计小游戏.doc_第1页
第1页 / 共29页
Java课程设计小游戏.doc_第2页
第2页 / 共29页
Java课程设计小游戏.doc_第3页
第3页 / 共29页
Java课程设计小游戏.doc_第4页
第4页 / 共29页
Java课程设计小游戏.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、高级语言程序设计课程设计报告1、 程序设计说明书【设计题目】雷霆行动游戏程序【问题描述】雷霆行动是一款供大家休闲娱乐的小游戏,游戏通过鼠标控制我方飞机 hero 的移动,达到躲 闪敌机的目的;利用鼠标键发射子弹和导弹,达到击毁敌机的目的,摧毁敌机有积分。此游戏为闯 关积分类小游戏。【软件功能】1.按鼠标左键,游戏开始。2.利用鼠标移动控制 hero 自由移动,闪躲敌方子弹。3.利用鼠标左键发射子弹,实现打中敌方飞机的功能;利用鼠标右键释放导弹,实现摧毁大量敌 机的功能,击中一个敌方飞机积一分。4.hero 碰到对方子弹会消耗生命,消耗生命的多少,依据子弹的不同而不同。 5.一关之后会进入下一关

2、。6.游戏右上角红色的进度条表示 hero 的生命,当红色全部消失之后,游戏结束,显示死亡。7.游戏结束后,可重新开始,同 1。【算法思想】1.创建游戏主界面,确定窗口的坐标。2.设计游戏开始界面显示信息及信息坐标。3.设置游戏进行中的信息,hero 的移动、释放子弹和导弹,达到击毁敌机的目的。4.处理游戏进行中的子弹、大爆、爆炸、敌机消失和存在的条件。5.设置进入下一关的条件。6.设计游戏结束界面显示信息及信息坐标。7.处理游戏重新开始满足的条件。8.装载图像。9.对游戏进行调试和改进,使这个游戏更加完善。【类的设计】本程序共有七个类:1.MainPanel属性:BBv 为子弹数组,EEv

3、为敌机数组,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)

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

5、Event)鼠标按钮在组件上释放时调用, mouseEntered(MouseEvent)鼠标进入组件上调用,mouseExited(MouseEvent) 鼠标离开组 件时调用;功能:游戏的开始、运行、结束与重新开始。2.Game 继承 JFrame属性:x 为游戏主界面的横坐标,y 为游戏主界面的纵坐标,pl 为 hero 的子弹;方法:Game()创建游戏主界面,main(String )主方法;功能:创建出游戏的主界面。3.Blast(大爆)属性:x 为大爆的横坐标,y 为大爆的纵坐标,cont 为数量,islive 为 hero 存活;方法:Blast(int,int)建立大爆的坐标

6、, 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(i

7、nt)实现敌机的移动,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 子弹的移

8、动,hit(int,int)hero 子弹攻击敌机;功能:构造一个 hero 子弹的类,实现 hero 子弹的移动和攻击。【用户界面】游戏开始界面游戏进行中界面游戏结束界面【程序技巧】1.建立一个主类,其余六个类均通过这个主类来调用2.响应鼠标事件3.用户界面采用图形用户界面4.利用媒体跟踪器监测图像的装载5.无效的子弹和被摧毁的敌机能及时处理,未被摧毁的敌机与子弹可以保留6.游戏失败可以重新开始【模块划分及调用关系】【模块流程图】游戏界面主框架模块:Game:游戏主界面模块MainPanel:游戏主要运行步骤模块Blast:大爆(导弹爆炸)模块Bomb:爆炸(子弹击中)模块Enemy:敌机模

9、块EnemyBullet:敌军子弹模块PlayerBullet:hero 子弹模块创建 MainPanel 游戏运行模块创建 Game 游戏主界面模块装载图片,加载显示信息创建 EnemyBullet 模块,处理敌机子弹创建 PlayerBullet 模块,处理 hero 子弹创建 Blast 模块,处理大爆创建 Bomb 模块,处理子弹爆炸创建 Enemy 模块,处理敌机处理 hero游戏操作模块:【运行说明】按鼠标左键开始游戏,鼠标移动控制 hero 的移动,按鼠标左键打出子弹,攻击敌机,每打死 一个敌机积一分,按鼠标右键放导弹,实现摧毁大量敌机的功能,本游戏共三关,若游戏中途失 败,可以

10、重新开始。2、 程序上机调试报告【语法错误及其排除】1.无法更改导弹数量。解决方法:添加 Blastnum=10 语句,即有十个导弹;2.个别图片运行不出来。解决方法:将图片格式与程序中相匹配;3.文字在程序中写出,但在游戏过程中不显示。解决方法:将文字的坐标调试好。【算法错误及其排除】1.点击鼠标右键无法实现大爆。解决方法:mouseReleased(MouseEvent e)2.hero 的子弹打中敌机后敌机没有消失。解决方法:EBv.remove(i);游戏开始是hero 出现于屏幕下方中央按鼠标左键发射子弹Hero 被敌机或子弹击中减少相应生命值击毁敌方飞机增加分数生命是否为零 否是游

11、戏开始游戏结束3、 程序测试结果【测试数据】我方飞机的移动,是否能打出子弹,导弹的释放,能否摧毁敌方飞机,是否可以积分。【输出结果】游戏初始化子弹爆炸情况大爆(导弹爆炸) 、飞机移动【收获及体会】本来以为课程设计是个很简单的事情,但是随着程序的编写,发现这是一个非常不容易的过程,通过去图书馆和上网查找资料,我发现我还有很多不足,并通过查 JDK 手册我也学习了很多知识,我意识到 JDK 手册是非常好的一种学习 Java 的工具,Java 在生活中有很重要的应用性,这提高了我的学习兴趣。编写程序的过程中我也遇到了很多困难,当程序出现错误运行不出来时,我非常着急,在冷静地分析、调通程序之后,我意识

12、到有耐心、有恒心是多么重要啊!在今后的学习生活中,我会更加努力,认真、耐心、细心地处理事情,相信我会逐步提高自己的能力。4、 源程序代码(Java 语言,要求有尽可能多的注释语句)package lightning;import java.awt.*;import java.awt.Image;import java.awt.Toolkit;import java.awt.MediaTracker;import javax.swing.*;import java.awt.event.*;import java.util.EventListener;import java.util.Vector

13、;import lightning.*;public class MainPanel extends JPanel implements Runnable,MouseMotionListener,MouseListenerGame a;Vector BBv=new Vector();/子弹数组Vector EEv=new Vector();/敌机数组Vector BOMBv=new Vector();/爆炸数组Vector EBv=new Vector();/敌机子弹数组Vector DBv=new Vector();/大爆数组int E_num;int E_max;/敌机最大数int E_v

14、el;/敌机速度int E_mov;/敌机横移几率int E_hit;/敌机开火几率int Sum;/击坠敌机数量,击坠一个敌机积一分int hero_hp;/hero 生命Image back=null;/背景图片Image hero=null;/hero 图片Image fire=null;/hero 子弹图片Image fire_l=null;/hero 子弹 2 图片Image el_0=null;/敌机图片Image el_0_l=null;/敌机 left 图片Image el_0_r=null;/敌机 right 图片Image el_bb=null;/敌机子弹图片Image e

15、l_bb_0=null;/敌机子弹 2 图片Image bomb_0=null;/敌机爆炸 0 图片Image bomb_1=null;/敌机爆炸 1 图片Image bomb_2=null;/敌机爆炸 2 图片Image bomb_3=null;/敌机爆炸 3 图片Image db_1=null;/大爆 1 图片Image db_2=null;/大爆 2 图片MediaTracker tracker=null;/媒体跟踪器,用来监测图像的装载Thread Game_star;int y;/背景滚动变量int hero_oldx,hero_oldy;/hero 的旧 x,y 坐标int her

16、o_x,hero_y;/hero 的新 x,y 坐标int seq;/hero 的动画变量boolean isfire;/hero 开火boolean isblast;/是否发爆int BBx,BBy;/子弹的横纵坐标int DBx,DBy;/大爆的横纵坐标int blastnum;/大爆的数量boolean blastc;/控制大爆Font f=new Font(“黑体“,Font.BOLD,30);Font ff=new Font(“黑体“,Font.BOLD,90);Font S=new Font(“幼圆“,Font.BOLD,15);Font SS=new Font(“幼圆“,Font

17、.BOLD,25);MainPanel(Game a) 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);fir

18、e=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(“dij

19、i.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().ge

20、tImage(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(bom

21、b_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.getRe

22、source(“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);thi

23、s.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;public void paint(Graphics g)g.drawImage(back,0,y,a.x,a

24、.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.BLAC

25、K);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(“

26、请按下鼠标左键开始“,a.x/2-a.x/4,a.y/2+a.y/8);g.dispose();tryThread.sleep(50);catch(Exception e)this.Game_star=null;/如果游戏结束显示如下信息else if(hero_hp(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 /处理子弹 sfor(int i=0;i-50)if(bs.cont=3)g.

27、drawImage(fire,bs.x,bs.y,30,30,this);/处理大爆for(int i=0;i10 elseBOMBv.remove(i);/处理敌机 sfor(int i=0;i-50 j-10 blastc=false;cont+;if(cont%3=0)if(isblast)DBmove(DBx,DBy);if(isfire)BBmove(BBx,BBy);if(seq=0)seq=1;elseseq=0;cont=0;repaint();tryThread.sleep(20);catch(Exception e)if(y=0)y=0;elsey+;public void

28、 BBmove(int x,int y)PlayerBullet pb;pb=new PlayerBullet(x,y);/保证不出界if(BBx=(a.x-45)BBx=a.x-45;if(BBy=(a.y-150)BBy=a.y-150;BBv.addElement(pb);/大爆的移动方法public void DBmove(int x,int y)Blast blast;blast=new Blast(x,y);/保证不出界DBv.addElement(blast);public void mouseDragged(MouseEvent e)isfire=true;BBx=hero_x

29、+10;BBy=hero_y;hero_x=e.getX()-35;hero_y=e.getY()-35;/保证不出界if(BBx=(a.x-45)BBx=a.x-45;if(BBy=(a.y-150)BBy=a.y-150;if(BBx15)hero_x=hero_oldx+15;if(hero_x-hero_oldx)15)hero_y=hero_oldy+15;if(hero_y-hero_oldy)=(a.x-55)hero_x=a.x-55;if(hero_y=(a.y-110)hero_y=a.y-110;if(hero_x=(a.x-55)hero_x=a.x-55;if(her

30、o_y=(a.y-110)hero_y=a.y-110;if(hero_x15)hero_x=hero_oldx+15;if(hero_x-hero_oldx)15)hero_y=hero_oldy+15;if(hero_y-hero_oldy)=(a.x-75)BBx=a.y-75;if(BBy=(a.y-150)BBy=a.y-150;if(BBx=1)isblast=true;DBx=hero_x-90;DBy=hero_y-170;EBv.removeAllElements();blastnum-;/System.out.println(“+blastnum);public void

31、mouseClicked(MouseEvent e) public void mouseReleased(MouseEvent e) isfire=false;isblast=false;public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) package lightning;import java.awt.Toolkit;import java.awt.Color;import java.awt.Cursor;import java.awt.Container;import java.awt.

32、BorderLayout;import javax.swing.JFrame;import lightning.*;public class Game extends JFrameint x,y;MainPanel p1;Game() x=Toolkit.getDefaultToolkit().getScreenSize().width/2;y=Toolkit.getDefaultToolkit().getScreenSize().height;/System.out.println(“+x+“ “+y);this.setDefaultCloseOperation(JFrame.EXIT_ON

33、_CLOSE);this.setSize(x-100,y-100);this.setLocation(x/2,0);this.setResizable(false);this.setTitle(“Game“);this.setBackground(Color.BLACK);this.setCursor(Cursor.CROSSHAIR_CURSOR);Container cn=getContentPane();p1=new MainPanel(this);cn.add(p1,BorderLayout.CENTER);public static void main(String args) Ga

34、me w = new Game();w.show();package lightning;public class EnemyBullet int x;int y;int vx;int cont;int vy;boolean islive=true;EnemyBullet(int x,int y,int a,int b) this.x=x;this.y=y;this.vy=15;this.cont=0;if(this.x=20)this.cont=0;this.cont+;this.y+=this.vy;this.x+=this.vx;public void hit(int a,int b)i

35、f(Math.abs(x+10)-(a+25)=7)this.cont=0;this.y-=this.v;this.cont+;public void hit(int a,int b)if(Math.abs(x+25)-(a+25)r)if(a-this.x50 this.toright=true;this.toleft=false;else if(this.x-a50 this.toright=false;this.toleft=true;this.cont+;if(this.cont2)this.vx=0;this.toright=false;this.toleft=false;this.

36、cont=0;this.x+=this.vx;this.y+=this.vy;public boolean tofire()if(Math.random()*100f)return true;elsereturn false;public void hit(int a,int b)if(Math.abs(x+25)-(a+25)21)this.islive=false;this.cont+;this.y+;package lightning;class Bomb int x;int y;int cont;boolean islive=true;Bomb(int x,int y) this.x=x;this.y=y;this.cont=0;public void grow()if(cont61)this.islive=false;this.cont+;this.y+;

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报