tank-battle.html 即可开始游戏,无需安装任何依赖。闲着无聊想玩坦克大战,结果网上那些在线版全都不支持手柄。一气之下让 AI 写了一个,效果意外地不错,特分享出来。
✨ 游戏特色
🎯 操控方式
⌨️ 键盘(桌面端)
| 玩家 | 移动 | 射击 |
|---|---|---|
| P1(绿色坦克) | W A S D |
空格 或 F |
| P2(蓝色坦克) | ↑ ↓ ← → |
回车 或 / |
🎮 蓝牙手柄
| 操作 | 按键 |
|---|---|
| 移动 | 左摇杆 / 十字键 (D-Pad) |
| 射击 | A 键 / R1 (右肩键) / RT (右扳机) |
| 开始/确认 | Start 键 |
手柄1 自动映射到 P1,手柄2 自动映射到 P2。HUD 上会显示 🎮 图标表示已连接。
📱 触屏(手机/平板)
- 左下摇杆:拖拽控制 P1 移动方向
- 左下射击按钮:按住持续射击
- 右下摇杆:拖拽控制 P2 移动方向
- 右下射击按钮:按住持续射击
🎯 游戏玩法
目标
双人合作消灭关卡中所有敌方坦克,同时保护地图底部的基地(鹰)不被摧毁。
胜负条件
- ✅ 过关:消灭所有敌方坦克
- ❌ 失败:基地被摧毁 或 两名玩家生命全部耗尽
生命系统
每名玩家初始有 3 条命。被击中后短暂无敌并重生在出生点。拾取 ❤️ 道具可增加生命(最多 5 条)。
🗺️ 地图元素
| 元素 | 图标 | 说明 |
|---|---|---|
| 砖墙 | 🧱 | 可被子弹摧毁,提供临时掩护 |
| 钢墙 | ⬜ | 不可摧毁,永久的战略掩体 |
| 水域 | 🌊 | 坦克无法通过,但子弹可以飞过 |
| 树林 | 🌳 | 坦克可以通过,但会遮挡视野(半透明渲染) |
| 基地 | 🦅 | 必须保护的核心目标,被击中即游戏结束 |
| 湖泊 | 🏞️ | 深水区域,不可通过,有睡莲装饰 |
| 草丛 | 🌿 | 可通过,半透明遮挡视野(掩护效果) |
| 冰面 | ❄️ | 可通过,但坦克会自动滑行(速度+30%),无法转向 |
| 传送门 | 🌀 | 进入后瞬间传送到配对传送门,30帧冷却 |
🎁 道具系统
消灭敌人有概率掉落道具(20% + 5%×关卡数,第6关可达50%),拾取后立即生效:
| 道具 | 图标 | 效果 |
|---|---|---|
| ⭐ 武器升级 | 金色五角星 | 提升射击等级:Lv1 加快射速,Lv2 三连发 |
| 💣 全屏炸弹 | 炸弹+引线 | 瞬间摧毁场上所有敌方坦克 |
| 🛡️ 无敌护盾 | 蓝色盾牌 | 获得 300 帧(约5秒)无敌时间 |
| ❤️ 额外生命 | 红色爱心 | 增加一条命(最多 5 条) |
| ⏰ 时间冻结 | 青色时钟 | 所有敌人移动速度大幅降低,持续 5 秒 |
| 👥 克隆分身 | 橙色双坦克 | 召唤2辆橙色AI坦克,自动追踪攻击敌人,8秒后消失 |
🏆 关卡设计
游戏内置 9 个关卡,难度递增:
| 关卡 | 敌人 | 主题 | 特点 |
|---|---|---|---|
| 第 1 关 | 6 | 经典布局 | 对称地图,适合熟悉操作 |
| 第 2 关 | 8 | 钢墙训练 | 更多钢墙,考验战术配合 |
| 第 3 关 | 10 | 复杂地形 | 砖墙+钢墙混合,敌人更密集 |
| 第 4 关 | 14 | ❄️ 冰原迷踪 | 冰面滑行+传送门,首次引入特殊地形 |
| 第 5 关 | 16 | 🌿 丛林沼泽 | 湖泊+草丛+冰+传送门混搭 |
| 第 6 关 | 18 | 💀 终极战场 | 全部地形类型,密集敌人 |
| 第 7 关 | 20 | 🧱 砖墙迷宫 | 全砖墙构成迷宫,留出狭窄通道 |
| 第 8 关 | 22 | 🏰 钢铁堡垒 | 大面积砖墙+钢墙交错,需绕路 |
| 第 9 关 | 24 | 🔥 终极炼狱 | 砖墙+钢墙混合,最密集敌人,极限挑战 |
通关所有关卡后显示「ALL CLEAR!」胜利画面。
🔧 技术实现
技术栈
- 纯前端:HTML5 + CSS3 + JavaScript(零依赖)
- 渲染引擎:Canvas 2D API,60fps requestAnimationFrame 循环
- 手柄支持:Web Gamepad API(
navigator.getGamepads()) - 音效:Web Audio API 实时合成(无需音频文件)
- 碰撞检测:四角点采样 + AABB 矩形碰撞
核心架构
项目结构(3个文件)
├── tank-battle.html — HTML 壳,引入 CSS 和 JS
├── tank-battle.css — 霓虹主题、摇杆布局、响应式样式
└── tank-battle.js — 全部游戏逻辑
JS 模块划分
├── 游戏常量 — 地图尺寸、瓦片类型(10种)、方向向量
├── 关卡数据 — 9 个 20×15 网格地图
├── Tank 类 — 玩家/敌人/分身坦克,冰面滑行,传送门
├── Bullet 类 — 子弹物理、拖尾、碰撞检测
├── 粒子系统 — 爆炸、碎片、火花特效
├── 敌方 AI — 随机巡逻 + 概率追踪玩家
├── 分身 AI — 自动追踪最近敌人并射击
├── 冰面/传送系统 — 滑行物理 + 传送门配对
├── 输入处理 — 键盘/手柄/触屏三合一
├── 游戏循环 — update() + render() 60fps
└── 道具系统 — 6 种道具,掉落率20%+5%×关卡
Gamepad 按键映射
| 标准按键 | 索引 | 功能 |
|---|---|---|
| A 键 (底部) | buttons[0] |
射击 |
| R1 (右肩键) | buttons[5] |
射击 |
| RT (右扳机) | buttons[7] |
射击 |
| Start | buttons[9] |
开始/确认 |
| 左摇杆 X | axes[0] |
水平移动 |
| 左摇杆 Y | axes[1] |
垂直移动 |
| 十字键 ↑↓←→ | buttons[12-15] |
方向移动 |
📥 安装与运行
方式一:直接打开(推荐)
- 下载
tank-battle.html、tank-battle.css、tank-battle.js三个文件放在同一目录 - 用任意现代浏览器(Chrome / Edge / Firefox / Safari)打开
tank-battle.html - 即可开始游戏!
方式二:部署到服务器
# 将文件放到任意 Web 服务器目录即可
# 例如 Nginx、Apache、GitHub Pages、Vercel、Netlify 等
浏览器兼容性
| 浏览器 | 最低版本 | 手柄支持 |
|---|---|---|
| Chrome | 80+ | ✅ 完整 |
| Edge | 80+ | ✅ 完整 |
| Firefox | 75+ | ✅ 完整 |
| Safari | 13+ | ⚠️ 部分支持 |
| 移动端浏览器 | 最新版 | ✅ 触屏操控 |
❓ 常见问题
Q: 手柄连接了但没反应?
A: 确保在 HTTPS 或 localhost 环境下运行。按一下手柄上的任意按键激活连接,刷新页面后重试。
Q: 敌人不出来?
A: 已修复。敌人会在第一关开始后约 2 秒从地图顶部三个位置出生。
Q: 冰面怎么玩?
A: 坦克进入冰面后会自动滑行,速度+30%且无法转向。利用这一点可以快速穿越危险区域,但注意别滑进敌人火力中。
Q: 传送门怎么用?
A: 走进紫色漩涡即可传送到配对传送门。有30帧冷却时间,适合快速转移或逃脱。
Q: 克隆分身有什么作用?
A: 拾取橙色👥道具后,身旁生成2辆AI坦克,自动追踪敌人射击,8秒后消失。分身不会阻挡玩家移动。
Q: 可以单人玩吗?
A: 可以,P1 使用键盘/手柄独自作战即可。P2 不动也不会影响游戏。
Q: 如何修改关卡?
A: 编辑 LEVELS 数组,每个关卡是一个 20×15 的二维数组。数字含义:0=空地, 1=砖墙, 2=钢墙, 3=水域, 4=树林, 5=基地。
Q: 支持 Xbox / PS / Switch 手柄吗?
A: 只要是标准蓝牙手柄,浏览器能识别为 Gamepad 设备即可。Xbox 和 PS 手柄测试通过,Switch Pro 手柄也可用。
🚀 快速体验:
用浏览器打开 tank-battle.html 即可开始游戏,无需安装任何依赖。

微信扫一扫打赏
支付宝扫一扫打赏

