第十八章 坦克大战2

第十八章 坦克大战2

1.坦克发子弹思路

在这里插入图片描述
在这里插入图片描述

2.我方发射子弹1

Shot类 子弹

子弹必须要休眠才能呈现出这个射击的效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Hero类 增加一个射击子弹的功能

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MyPanel类 按J就发射

在这里插入图片描述
这里还没有画出子弹,只是记录了一下子弹的位置
在这里插入图片描述
在这里插入图片描述

3.我方发射子弹2

MyPanel类 画出hero射击出的子弹

在这里插入图片描述
这里子弹画了一次就没有画了,因为没有重绘(之前那个重绘,是点一下J会出现一个新子弹。目前我们需要的重绘是发射出的那一颗子弹,在路径上面被不断画出)
在这里插入图片描述
下面做出改变,加入线程,不然的话paint方法只调用了一次
在这里插入图片描述
在这里插入图片描述
这里相当于有两个线程,一个在不断改变子弹的坐标,另一个在不停地重绘

HspTankGame03类 启动线程

在这里插入图片描述

MyPanel类 重新绘制子弹

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.敌方发射子弹

在这里插入图片描述
在这里插入图片描述

EnemyTank类 vecter保存多个shot

在这里插入图片描述

MyPanel类 给敌人坦克对象初始化一个shot对象

在这里插入图片描述

MyPanel类 画出enemyTank所有子弹

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.敌方坦克消失

在这里插入图片描述

EnemyTank类 在敌人坦克内加一个判断生死的isLive

在这里插入图片描述

MyPanel类 编写判断子弹是否击中敌方坦克的方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MyPanel类 在run方法中判断子弹是否击中坦克

在这里插入图片描述
在这里插入图片描述

MyPanel类 判断敌方坦克是否存活,来决定是否画出敌方坦克

在这里插入图片描述
这里出现一个问题,我们的子弹没有在击中坦克时消失(击中坦克后,消失的原因是我们没有画出子弹),它到出了边界才真正消失,我们要做出修改,使子弹碰到敌方坦克时就立刻消失
在这里插入图片描述

Shot类 调整子弹消失的条件,新增碰到敌方坦克也消失

在这里插入图片描述

6.坦克爆炸

Bomb类 炸弹

在这里插入图片描述
在这里插入图片描述

MyPanel类 在其中使用炸弹显示爆炸效果

在这里插入图片描述

在构造器中初始化图片对象
在这里插入图片描述
下面在坦克被击中时,在集合bombs中新增加一个炸弹(一个炸弹由三个图片构成)
在这里插入图片描述
在这里插入图片描述
下面在paint方法中显示炸弹
在这里插入图片描述
在这里插入图片描述
最后传入图片
在这里插入图片描述
在这里插入图片描述

此时出现一个问题,我们将一个坦克打爆炸后,在原来的位置再开一炮,它还是会出现爆炸图案。
在这里插入图片描述
原因就是我们将敌人坦克拿掉之后,我们没有将敌人的坦克从enemyTank集合中拿掉。
下面做一点修改
在这里插入图片描述

7.敌方坦克自由移动

在这里插入图片描述

EnemyTank类 新增线程使坦克自由移动

在这里插入图片描述
这里必须要休眠一下,不然坦克速度很快,到处乱窜
在这里插入图片描述
在这里插入图片描述

MyPanel类 启动线程

在这里插入图片描述
这里出现了问题,坦克在抽搐前进
在这里插入图片描述
因为这里每隔50毫秒,坦克就随机改变方向
在这里插入图片描述

EnemyTank类 让坦克保持方向移动一段距离

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.控制坦克移动范围

在这里插入图片描述
在这里插入图片描述

EnemyTank类 限定敌人坦克移动范围

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MyPanel类 限定我方坦克移动范围

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.坦克发多颗子弹

在这里插入图片描述
在这里插入图片描述

MyPanel类 新增判断子弹是否消失的代码

在这里插入图片描述
上面的写法也有问题,我们会发现,当第一个子弹飞出边界后,再点击J,仍然没有子弹飞出,因为虽然这个子弹的线程结束了,但我们new出来的shot并没有消失。
做出以下修改
hero.shot == null表示我们刚开始没有点击J的时候,可以点击J发射第一颗子弹。
hero.shot.isLive表示我们发射的第一颗子弹消失后(遇到敌人坦克或者遇到边界),之后的子弹可以继续发射。
在这里插入图片描述
在这里插入图片描述

Hero类 新建集合保存我方发射的多颗子弹

在这里插入图片描述
在这里插入图片描述
当要发射子弹时,我们遍历这个shots集合

MyPanel类 绘制shots集合中的子弹

在这里插入图片描述
在这里插入图片描述

Hero类 控制面板上面最多5颗子弹

在这里插入图片描述

这里出现新的问题,出了第一颗子弹打中敌方坦克会爆炸,其余子弹打中敌方坦克不会爆炸
因为这里我们是用单颗子弹去判断的
在这里插入图片描述

MyPanel类 使集合中的子弹打中坦克都可以使敌方坦克爆炸

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为了后面的代码一直,将第一条中的扩展部分的代码注释

10.敌方移动发射

在这里插入图片描述

EnemyTank类 使敌人坦克可以发射多颗子弹

isLive表示坦克时存活
shot.size()表示坦克之前发射的子弹已经结束了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
目前一个坦克一次只能打一发炮弹,如果想要打多发(比如10颗),则
在这里插入图片描述

11.我方被击中爆炸

在这里插入图片描述

Tank类 新增isLive属性

在这里插入图片描述

MyPanel类 编写方法判断敌方坦克是否击中我方坦克

在这里插入图片描述
将hitTank方法中,敌方坦克,变为通用的坦克
名字暂且不改了还叫enemyTank
在这里插入图片描述

MyPanel类 调用方法

在这里插入图片描述

这里出现一个问题,虽然敌方坦克击中我方坦克,发生了爆炸,但我方坦克还是存在的,
所以要做一个判断,决定什么时候才画出我方坦克
在这里插入图片描述

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值