java飞机大战流程图_JAVA课程设计-飞机大战

JAVA课程设计的飞机大战项目,团队成员包括余俊良、林祥涛和高凯。玩家控制飞机射击敌机获取积分,游戏包含背景音乐和音效。通过面向对象设计,包括包图、类图等,实现英雄机、敌机、子弹、道具等功能。项目使用鼠标事件监听、双缓冲技术消除闪屏,并展示了关键代码,如鼠标事件处理、飞行物显示。项目总结指出未来计划增加网络模式和更多游戏元素。
摘要由CSDN通过智能技术生成

#JAVA课程设计-飞机大战

1.团队名称、团队成员介绍

####1.1 团队名称:做个飞机哦 ####1.2团队成员介绍: 余俊良(组长):编写博客、游戏主界面设计与实现、英雄机与子弹类的实现、场景设计 林祥涛:游戏音效设计、玩家类编码与设计、小Boss类设计、ppt设计 高凯:画uml类图、积分榜设计、游戏道具定义实现、游戏状态设计

2.项目git地址

3.项目git提交记录截图

046598f147cd783e76ea3c2d0b39b8c6.png

4.前期调查及游戏介绍

玩家通过控制飞机发射子弹击中不同的敌机获取积分,击中快速移动的浮标获得奖励(获得双倍子弹奖励、生命值增加)。游戏过程伴随着背景音乐,而且击中敌机或生命耗尽后会产生相应音效。与敌机相撞则扣除生命值1点,直到生命值为0,游戏结束,玩法简单有趣,锻炼反应能力。

5.项目功能架构图、主要功能流程图

73512ebdb2909cc83906e6a792df1b86.png

6.面向对象设计包图、类图

###包图

0846400b025853fb96712e3afa5e172b.png ###类图

03e935e26ca5cfd73f2a05933702c68e.png

7.项目运行截图

主界面显示

18c8941b903c78e7c4f06b29621670d1.png

英雄机

df0fd84cb91f0ace2d5cf779e318c7ea.png

f4139deae5207ebbad6bb8997c81962b.png

7ded7f80c6c0a9c63b7f22a118d09bcc.png

普通敌机

242c9c28e4d7c6b56e611b8427a2fe1c.png

精英机

9e7bdfb951cc3925a466917ddede612a.png

小boss

01b4849b14fbaed597aa4f92b47640a7.png

切换飞机

a71e2810766993e4efab87bf46767a98.png

双倍子弹模式

2313e4298efc01ebc54c0bc468eaf436.png

排行榜

594f85947936d445c87d38b81ccdf780.png

奖励

7c603248e84831e81ca8fa5e9c067d20.png

游戏结束

d15e726783f36a0598c7e689eb1c7df2.png

8.项目关键代码

###8.1鼠标事件 使用鼠标事件监听MouseAdapter对鼠标进行监听,当鼠标移动时获取鼠标的坐标,点击时开启游戏,鼠标移出窗体后游戏暂停,移入则继续。

MouseAdapter m = new MouseAdapter() {

// 鼠标移动事件

public void mouseMoved(MouseEvent e) {// 鼠标坐标获取

if (Running == state) {

hero.moveTo(e.getX(), e.getY());

}

}

// 鼠标点击事件

public void mouseClicked(MouseEvent e) {

if (Start == state) {// 点击开始游戏

state = Running;

} else if (Over == state) {// 游戏结束后点击重新开始

state = Start;

score = 0;// 积分,飞行物重置

hero = new Heroplane();

flyobj = new ArrayList();

bullets = new ArrayList();

}

}

// 鼠标移出事件

public void mouseExited(MouseEvent e) {

if (Running == state) {// 移出窗体,游戏暂停

state = Pause;

}

}

// 鼠标移入事件

public void mouseEntered(MouseEvent e) {// 移回窗体,游戏继续

if (Pause == state) {

state = Running;

}

}

};

###8.2双缓冲技术消除闪屏 闪屏的出现是因为在while循环中执行线程时每循环一次便会重绘一次,而update()方法即会先清理掉当前的画面再重新绘制新的画面。可以在内存中重新开辟新空间,作为后台图像,本应该在界面上进行清理与重绘现在内存中先实现,生成新画面,最后显示到屏幕上。

private Image offScreenImage = null;// 利用双缓冲技术消除屏幕闪烁

public void update(Graphics g) {

if (offScreenImage == null) {

offScreenImage = this.createImage(WIDTH, HEIGHT);

}

Graphics gOff = offScreenImage.getGraphics();

paint(gOff);

g.drawImage(offScreenImage, 0, 0, null);

}

###8.3飞行物显示 通过根据状态不断重绘飞行物来达到动画效果

Timer timer = new Timer();

int timeGap = 10;// 设定时间隔

timer.schedule(new TimerTask() {

public void run() {

if (state == Running) {

heroBulletEnter();// 英雄子弹的入场

enemyEnter();// 敌机的入场

enemyStep();// 敌机的移动

outBoundDel();// 删除越界(底)的敌机和子弹

enemyCrash();// 英雄机子弹与敌人相撞(子弹和敌机退场)

checkGame();// 检查游戏是否结束(敌机和英雄机相撞)

}

repaint();// 重画

}

}, timeGap, timeGap);// timeGap为每一次到下一次的触发间隔

##9.项目代码扫描结果及改正 ###9.1第一次扫描结果

384a65b0602b17c03e4a68c1a660d435.png ###9.2扫描修正 在所有的覆写方法前增加@Override注释 常量名应当全部大写,单词用下划线隔开 switch块中,每个case都应通过break/default来终止 方法内部单行注释,在被注释语句上方另一行使用//注释,多行注释使用/**/注释

###9.3全部修正后结果

36ce0206bbe085a320bd35bce1f2e796.png ##10.项目总结 ###10.1不足 原先计划能够在完成单人模式的基础上增加联网模式,但是在基本完成单人模式后剩余的时间的确不够去实现联网。设计的敌机类型也不够多,道具类型也可以再增加。 ###10.2展望 在课设完成后利用课余时间增加网络模式,并在网络中进行线上合作与排行

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值