一、线程 - 应用到坦克大战
1.1 坦克大战 0.3
运用线程基础知识,在坦克大战 0.2版 的基础上添加如下功能:
当玩家按一下 j 键,就发射一颗子弹
思路分析:
- 当发射一颗子弹后,就相当于启动一个线程
- Hero 有子弹的对象,当按下 J 时,我们就启动一个发射行为(线程),让子弹不停的移动,形成一个射击的效果
- Mypanel 需要不停的重绘子弹,才能出现该效果
- 当子弹移动到面板边界时,就应该销毁(把启动的子弹的线程销毁)
1.2 坦克大战 0.4
增加功能:
- 让敌人的坦克也能够发射子弹(可以有多颗子弹)
- 当我方坦克击中敌方坦克时,敌人的坦克就消失,如果能做出爆炸效果更好
- 让敌人的坦克也可以自由随机的上下左右移动
- 控制我方的坦克和敌人的坦克在规定的范围移动
让敌人的坦克也能够发射子弹(可以有多颗子弹)
- 在敌人坦克类,使用Vector 保存多个 Shot
- 当每创建一个敌人坦克对象,给该敌人坦克对象初始化一个Shot 对象,同时启动Shot
- 在绘制敌方坦克时,需要遍历敌人坦克对象 Vector,绘制所有的子弹,当 子弹isLive == false时,就从 Vector 移除
让敌人的坦克也可以自由随机的上下左右移动
思路分析:
- 因为要求敌方的坦克,可以自由移动,因此需要将敌人坦克当作线程使用
- 我们需要 EnemyTank implements Runnable
- 在 run 方法写上我们相应的业务代码
- 在创建敌人坦克对象时,启动线程
增加功能
- 我方坦克在发射的子弹消亡后,才能发射新的子弹 => 拓展:发射多颗子弹如何解决,并尝试在 MyPanel 完成业务,使得面板上的子弹最多只有5颗
- 让敌方坦克发射的子弹消亡后,可以再发射子弹
- 当敌方坦克击中我方坦克时,我方坦克消失,并出现爆炸效果
思路:编写方法,判断敌方坦克是否击中我方坦克 - 让敌方坦克发射的子弹最多存货3颗(在面板上)
我方坦克在发射的子弹消亡后,才能发射新的子弹 思路:
- 在按下 J 键,我们判断当前 hero对象的子弹,是否已经销毁
- 如果没有销毁,就不去触发 shotEnemyTank
- 如果已经销毁,才去触发 shotEnemyTank
- 如果要发射多颗子弹,就使用 Vector 保存
- 在绘制我方子弹时,需要遍历该 Vector 集合
学习参考(致谢):
- B站 @程序员鱼皮 Java学习一条龙
- B站 @韩顺平 零基础30天学会Java