主类开启一个线程,每50毫秒循环一次paint()方法(绘制整个界面内的所有东西)。画的东西有敌我坦克(颜色区分)、子弹、墙、血块、爆炸。所以总共包括了几个类:TankClient主类、Tank坦克类、Missile子弹类、Explode爆炸类、Wall墙类、Blood血块类。在每一个类中均写有draw()方法实现本类对象的绘制功能。在主类中有键盘监听事件调用主Tank类的键盘监听事件。通过键盘监听对主Tank做出相应的移动,而敌方Tank则是随机运动。并且每次刷新都有调用各类的碰撞方法,判断一些不该碰撞的对象的情况时做出处理。而每个对象的创建,例如子弹这些是在触发产生之后将新建的子弹对象加入一个子弹集合之中,在绘制的时候判断集合中的数量进行绘制,出界或者打死坦克则在集合中删除。其他类也均相似,不再细说。
在坦克类里面有一个布尔类型变量good,用于判断坦克的阵营,在创建坦克对象时在Tank类的构造方法中传入good的值。在画坦克的时候判断good的值,区分敌我坦克的颜色;
在坦克类里写入了监听键盘按键的响应事件,对监听到的上下左右键进行记录,并合成坦克移动的八个方向的变量。之后根据不同的方向对坦克坐标x,y的值进行更改实现主坦克的移动,而敌方坦克则自动移动,通过随机数设置敌方坦克移动的方向,并且随机出每次移动的距离,两个随机值相结合即实现了敌方坦克的移动。
通过键盘监听,检测到发射子弹命令后将TankClient主类的子弹集合中添加一个子弹类。将炮筒的方向以及坦克的位置以及坦克的阵营传入给子弹类,在主类paint方法中一直循环子弹类集合,如果集合内有未消耗的子弹,就画出来。这样就实现了发射子弹。
在坦克类、子弹类、墙类中分别有getRect方法获取自身的范围,然后在每次画坦克、子弹时都会进行相应的碰撞检测(在坦克类里有与墙和除自己之外的坦克相撞的处理方法、在子弹类里有与墙和坦克相碰撞的处理方法),如果自身与不该碰撞的物体的范围相重合,则代表两物体相撞。
在坦克类中有主坦克与血块相碰撞的处理方法,如果血块范围与坦克范围重合则血块类死亡,并且坦克类的血量置满。
通过键盘监听,检测到我方坦克复活命令后,如果我方坦克处于死亡状态,则将我方坦克存活状态改为活着并且将我方坦克血量置满。