首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

经典重现:基于 Java Swing 开发坦克大战游戏完整实战

     編輯:Java 相關知識

项目需求分析

功能性需求

  • 双方阵营:玩家坦克(键盘控制)、敌方坦克(AI 随机移动、射击)。
  • 子弹发射、移动、碰撞检测、爆炸特效。
  • 玩家坦克被击中游戏结束;敌方坦克被击中消失并播放爆炸。
  • 界面固定大小,实时响应。

非功能性需求

  • 高帧率渲染,毫秒级碰撞检测。
  • 代码复用率高,面向对象设计清晰。

核心类设计

类职责关键属性/方法
Tank坦克基类坐标、方向、速度、颜色、存活标记
Hero extends Tank玩家坦克键盘控制移动、射击、子弹集合
EnemyTank extends Tank implements Runnable敌方坦克AI 随机移动、自动射击、子弹集合
Shot implements Runnable子弹坐标、方向、速度、存活、碰撞边界检测
Bomb爆炸特效坐标、生命周期、多帧图片切换
MyPanel extends JPanel implements KeyListener, Runnable游戏主面板绘制所有对象、键盘监听、游戏循环、碰撞检测

关键技术实现

1. 双缓冲绘制与游戏循环

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();      // 触发重绘
        }
    }
}

2. 碰撞检测算法

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;
    }
}

3. 敌方坦克 AI 与射击

  • run() 中随机方向移动固定步数,边界检查。
  • 定时向 Vector<Shot> 添加子弹并启动线程。
  • 子弹线程按方向移动,越界自动销毁。

4. 爆炸动画

  • 预加载 3 张图片(bomb_1/2/3.gif)。
  • Bomb 对象生命值 9,每次绘制递减,根据生命值区间绘制对应图片。
  • 生命值归零从集合移除。

项目结构与启动

MyTankGame4 (JFrame)
└── MyPanel (JPanel)
    ├── Hero (我方坦克)
    ├── Vector<EnemyTank> (敌方坦克群)
    ├── Vector<Bomb> (爆炸群)
    └── 游戏循环线程

主方法创建窗口、面板,启动游戏循环线程,注册键盘监听。

总结与扩展建议

  • 基于 Swing 的主动渲染模式,适合入门级 2D 游戏。
  • 可扩展:引入状态机管理游戏状态(开始/暂停/结束)、资源管理器统一加载图片/音效、碰撞检测优化(四叉树)、网络对战(Socket/Netty)。
  • 代码体现了面向对象封装、继承、多态、多线程协作等核心 Java 技能。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved