| 类 | 职责 | 关键属性/方法 |
|---|---|---|
Tank | 坦克基类 | 坐标、方向、速度、颜色、存活标记 |
Hero extends Tank | 玩家坦克 | 键盘控制移动、射击、子弹集合 |
EnemyTank extends Tank implements Runnable | 敌方坦克 | AI 随机移动、自动射击、子弹集合 |
Shot implements Runnable | 子弹 | 坐标、方向、速度、存活、碰撞边界检测 |
Bomb | 爆炸特效 | 坐标、生命周期、多帧图片切换 |
MyPanel extends JPanel implements KeyListener, Runnable | 游戏主面板 | 绘制所有对象、键盘监听、游戏循环、碰撞检测 |
public class MyPanel extends JPanel implements Runnable {
@Override
public void paint(Graphics g) {
super.paint(g);
// 绘制背景、我方坦克、子弹、爆炸、敌方坦克及其子弹
}
@Override
public void run() {
while (true) {
try { Thread.sleep(100); } catch (Exception e) {}
hitEnemyTank(); // 我方子弹击中敌方
hitMe(); // 敌方子弹击中我方
repaint(); // 触发重绘
}
}
}
public void hitTank(Shot s, Tank tank) {
switch (tank.getDirect()) {
case 0: case 2: // 上/下,坦克宽20高30
if (s.x > tank.x && s.x < tank.x + 20 && s.y > tank.y && s.y < tank.y + 30) {
s.isLive = false; tank.isLive = false; bombs.add(new Bomb(tank.x, tank.y));
} break;
case 1: case 3: // 左/右,坦克宽30高20
if (s.x > tank.x && s.x < tank.x + 30 && s.y > tank.y && s.y < tank.y + 20) {
s.isLive = false; tank.isLive = false; bombs.add(new Bomb(tank.x, tank.y));
} break;
}
}
run() 中随机方向移动固定步数,边界检查。Vector<Shot> 添加子弹并启动线程。bomb_1/2/3.gif)。Bomb 对象生命值 9,每次绘制递减,根据生命值区间绘制对应图片。MyTankGame4 (JFrame)
└── MyPanel (JPanel)
├── Hero (我方坦克)
├── Vector<EnemyTank> (敌方坦克群)
├── Vector<Bomb> (爆炸群)
└── 游戏循环线程
主方法创建窗口、面板,启动游戏循环线程,注册键盘监听。