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

本文详述了JAVA课程设计的飞机大战项目,包括团队成员介绍、项目地址、游戏介绍、面向对象设计、关键代码实现如鼠标事件、双缓冲技术、飞行物显示等,并分析了代码扫描结果和改进措施,最后进行了项目总结与展望。
摘要由CSDN通过智能技术生成

JAVA课程设计-飞机大战

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

1.1 团队名称:做个飞机哦

1.2团队成员介绍:

余俊良(组长):编写博客、游戏主界面设计与实现、英雄机与子弹类的实现、场景设计

林祥涛:游戏音效设计、玩家类编码与设计、小Boss类设计、ppt设计

高凯:画uml类图、积分榜设计、游戏道具定义实现、游戏状态设计

2.项目git地址

https://gitee.com/net_201821123052/Planewar.git

3.项目git提交记录截图

3b852c81651bb3de109099c509ca24ba.png

4.前期调查及游戏介绍

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

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

b718cb5e067c1d4132b972453cb323a6.png

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

包图

2ed362f750bd985e6bc603c38fe52b5f.png

类图

9dfb63c4d203bf493923d2add866603a.png

7.项目运行截图

主界面显示

ab3bc2d554dc6126c2ede5d6a4f235bc.png

英雄机

b2b4f477d9eeb55e4973b8d355ce79c2.png

716440e36b98ab60210d7324de389d49.png

154faf885194412b4ad2ab9fbc4d639e.png

普通敌机

d615f50559fe73dc8d65c7e9609183fe.png

精英机

95a3473ddfa6ca331352aae490fb843f.png

小boss

eba841dfef6fc43b161e9b0e4c3d5f33.png

切换飞机

b9052ef6e7bbf98ecb3f9425f3a7642a.png

双倍子弹模式

1f7f91cb44d8e22fe6a7a4c4e64c4138.png

排行榜

c67a9d9b1320d19a06b921af0b4839f5.png

奖励

a97abdcdfa1cecb9253d0d9707bb4619.png

游戏结束

522922782b4afe72ad627840418e1ede.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第一次扫描结果

ad74a254b11e3c2ef0fe196ce7bd3398.png

9.2扫描修正

[email protected]

常量名应当全部大写,单词用下划线隔开

switch块中,每个case都应通过break/default来终止

方法内部单行注释,在被注释语句上方另一行使用//注释,多行注释使用/**/注释

9.3全部修正后结果

5a959ce2914c844d091b9915cb9867c5.png

10.项目总结

10.1不足

原先计划能够在完成单人模式的基础上增加联网模式,但是在基本完成单人模式后剩余的时间的确不够去实现联网。设计的敌机类型也不够多,道具类型也可以再增加。

10.2展望

在课设完成后利用课余时间增加网络模式,并在网络中进行线上合作与排行

原文:https://www.cnblogs.com/yujun59/p/12168882.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值