一、线程 - 应用到坦克大战

1.1 坦克大战 0.3

运用线程基础知识,在坦克大战 0.2版 的基础上添加如下功能:
当玩家按一下 j 键,就发射一颗子弹

思路分析:

  1. 当发射一颗子弹后,就相当于启动一个线程
  2. Hero 有子弹的对象,当按下 J 时,我们就启动一个发射行为(线程),让子弹不停的移动,形成一个射击的效果
  3. Mypanel 需要不停的重绘子弹,才能出现该效果
  4. 当子弹移动到面板边界时,就应该销毁(把启动的子弹的线程销毁)

1.2 坦克大战 0.4

增加功能:

  1. 让敌人的坦克也能够发射子弹(可以有多颗子弹)
  2. 当我方坦克击中敌方坦克时,敌人的坦克就消失,如果能做出爆炸效果更好
  3. 让敌人的坦克也可以自由随机的上下左右移动
  4. 控制我方的坦克和敌人的坦克在规定的范围移动

让敌人的坦克也能够发射子弹(可以有多颗子弹)

  1. 在敌人坦克类,使用Vector 保存多个 Shot
  2. 当每创建一个敌人坦克对象,给该敌人坦克对象初始化一个Shot 对象,同时启动Shot
  3. 在绘制敌方坦克时,需要遍历敌人坦克对象 Vector,绘制所有的子弹,当 子弹isLive == false时,就从 Vector 移除

让敌人的坦克也可以自由随机的上下左右移动
思路分析:

  1. 因为要求敌方的坦克,可以自由移动,因此需要将敌人坦克当作线程使用
  2. 我们需要 EnemyTank implements Runnable
  3. 在 run 方法写上我们相应的业务代码
  4. 在创建敌人坦克对象时,启动线程

增加功能

  1. 我方坦克在发射的子弹消亡后,才能发射新的子弹 => 拓展:发射多颗子弹如何解决,并尝试在 MyPanel 完成业务,使得面板上的子弹最多只有5颗
  2. 让敌方坦克发射的子弹消亡后,可以再发射子弹
  3. 当敌方坦克击中我方坦克时,我方坦克消失,并出现爆炸效果
    思路:编写方法,判断敌方坦克是否击中我方坦克
  4. 让敌方坦克发射的子弹最多存货3颗(在面板上)

我方坦克在发射的子弹消亡后,才能发射新的子弹 思路:

  1. 在按下 J 键,我们判断当前 hero对象的子弹,是否已经销毁
  2. 如果没有销毁,就不去触发 shotEnemyTank
  3. 如果已经销毁,才去触发 shotEnemyTank
  4. 如果要发射多颗子弹,就使用 Vector 保存
  5. 在绘制我方子弹时,需要遍历该 Vector 集合

学习参考(致谢):

  1. B站 @程序员鱼皮 Java学习一条龙
  2. B站 @韩顺平 零基础30天学会Java