Java 第16章 坦克大战1-2 思路整理

1 绘制坦克

坦克

不同坦克有共同属性,可以先提取共同特征(坐标位置)作为父类,然后其他坦克类继承它。

画板Panel

有坦克在画板上显示,所以包含不同的坦克子类,并在构造器初始化时创建该具体对象。

paint方法中:

  1. g.fillRect创建黑色背景
  2. 画坦克,由于代码会进行复用(会画很多坦克),所以在Panel类中专门写方法drawTank实现。其中包括对坦克类型(我方为青色,敌方为黄色)和前进方向(具体绘制,包括上下左右朝向)的设置
    在这里插入图片描述

画框Frame

有画板在画框中,所以包含Panel对象,并在构造器初始化时创建该具体对象。

构造器对于画板对象的设置,包括:

  1. 在Frame类对象中创建并添加画板Panel
  2. 设置Panel大小、默认关闭操作、是否可见

2 让坦克动起来

画板Panel

实现KeyListener接口,在keyPressed方法中通过WSAD键实现对坦克上下左右的控制,并调用this.repaint();重新绘制坦克。

上下左右的控制:

keyPressed中,以向上移动举例:

  1. 将坦克对象的方向设置好,然后朝该方向移动一定位置(坐标±speed)
  2. 由上引出方向direct和速度speed两个变量,均加入Tank类进行实现。
  3. 同时,移动位置也集成到Tank类中,可以直接对类中的坐标进行操作。

在Frame中添加this.addKeyListener(mp);(mp是Panel)用于监听。

3 本章作业

在这里插入图片描述
首先考虑到敌方坦克具有其特殊属性,所以单独建类EnemyTank,继承父类Tank。

考虑到增删的便利性、迭代的高效性和最重要的线程安全,我们使用集合Vector对坦克进行存储(静态数组三种优势都没有,ArrayList则是没有线程安全性)。

建立enemyTankSize作为敌方坦克的计数器,并在遍历集合时使用该变量,不然可能会出现被击毁的敌方坦克仍然显示的情况

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值