# tank **Repository Path**: WangDKB/tank ## Basic Information - **Project Name**: tank - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-06-24 - **Last Updated**: 2026-06-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🎮 坦克大战 Tank Battle 经典坦克大战(Battle City)风格的游戏,包含**两个版本**: - **Python 桌面版**(pygame)—— 电脑上玩 - **HTML5 网页版** —— 浏览器玩,支持安卓手机,可"添加到主屏幕"当 App FC 复古像素风,单人闯关 + 无尽模式,7 种装备特效,难度随关卡递增。 --- ## ✨ 游戏特色 - **随机地图**:16×16 网格每关重新生成,含连通性保证 - **5 种地形**:砖墙(可碎)、钢墙(不可毁)、草丛(遮挡)、水(阻坦克)、基地 - **3 种敌人**:🟢普通 / 🔴快速 / 🟣装甲(3血),各有 AI - **7 种装备特效**: | 图标 | 特效 | 效果 | 时长 | |------|------|------|------| | 🟦 S | 护盾 | 玩家无敌 | 6s | | 🟧 P | 散弹 | 一次射 3 颗 | 8s | | 🟨 A | 穿甲弹 | 碎钢墙、穿 2 格砖 | 8s | | 🟦 F | 冻结 | 敌人冻住 | 5s | | 🟪 C | 混乱 | 敌人乱走乱开火 | 5s | | ⬜ B | 基地钢甲 | 基地墙变钢 | 6s | | 🟥 X | 炸弹 | 瞬间清场 | 瞬间 | - **难度递增**:敌人数量、移速、开火率、装甲占比随关卡上升 - **动态难度补偿**:玩家拿到强力装备时,敌人会临时变凶(详见下方"平衡机制"),紧张感和爽快感并存 - **动态天气系统**:8 种天气关内动态切换(晴朗/结冰/火山/黑夜/暴雨/大风/海啸),影响坦克属性、视野、地图障碍(详见下方"天气系统") - **主动技能系统**:开局自带 🔥喷火(整排瞬杀)和 🧊冰柱(整排冻结3秒),无视地形穿透,10秒冷却,R/F 键或手机按钮释放 - **1 条命**硬核模式,基地被毁或玩家被击中即结束 --- ## ⚖️ 平衡机制:动态难度补偿 为了让游戏既有"拿装备的爽快感"又有"持续的紧张感",加入了**动态难度补偿**——玩家越强,敌人临时也越凶。 **威胁值系统**(根据玩家当前激活的装备实时计算): | 装备 | 威胁值 | |------|-------| | 护盾 | 3(完全无敌,最离谱) | | 冻结 / 散弹 | 2 | | 穿甲 / 混乱 / 基地钢甲 | 1 | | 炸弹 | 0(瞬时清场,不持续) | **补偿规则**: | 玩家威胁值 | 敌人变化 | HUD 提示 | |-----------|---------|---------| | 0-2 | 正常 | 无 | | 3-4 | 速度×1.3、开火率×1.4 | ⚠ 橙色"敌人加速" | | 5+ | 额外多刷一个同屏敌人 | ⚠ 红色"敌人狂暴!" | **关键**:补偿**跟着装备走**——装备过期,敌人立刻恢复正常,不会越积越凶。这样拿装备是"爽但危险",而不是"纯白嫖"。 --- ## 🌦️ 天气系统(网页版) 8 种天气关内动态切换,每局体验都不同。天气影响坦克属性、视野、地图障碍,和难度补偿叠加生效。 **8 种天气:** | 天气 | 影响 | 效果 | |------|------|------| | ☀️ 晴朗 | 基准 | 无影响,视野全开 | | ❄️ 结冰 | 全体减速 | 所有坦克速度×0.6、开火×2.5、**打滑**(转向有惯性) | | 🌋 火山 | 地图障碍 | 随机岩浆格不能通过,**岩浆每0.6秒迅速蔓延**,每0.2秒持续伤害站在上面的坦克,火山天气固定持续7秒 | | 🌑 黑夜 | 视野缩小 | 全图变暗,只玩家周围 4 格亮(探照灯) | | 🌧️ 暴雨 | 全场减速 | 所有坦克×0.5、子弹×0.7 | | 🌪️ 大风 | 推力 | **风向动态变化**(每5秒变向),把所有坦克持续推向风向,需逆风操作 | | 🌊 海啸 | 淹没地图 | 水位**激进上涨**(上限55%),地图逐渐被淹没,可走区越来越少 | **切换机制(按通关速度自适应):** - 关卡开始:晴朗(前 5 秒缓冲) - **第 5 秒必触发第一次天气变化**(保证快通关的玩家也体验到) - 之后每 12-30 秒切换一次(按当前关敌人数量自适应) - 切换前 **3 秒**屏幕顶部预警"⚠ 天气变化:❄️结冰 即将来临" - 同种天气不连续出现两次 **设计要点:** 天气倍率和关卡倍率、威胁补偿**叠加相乘**,所以高难度关 + 恶劣天气 + 玩家拿强力装备时,敌人会因为威胁补偿反而变凶——多层机制交织,每局都不一样。 --- ## 🎯 玩法 ### 目标 保护基地(老巢),消灭所有敌方坦克通关。无尽模式一直打下去刷高分。 ### 操作 **电脑(pygame 版 / 网页版):** | 按键 | 功能 | |------|------| | **W A S D** | 移动(方向键 ↑↓←→ 也可用) | | 空格 | 开火(连射,场上最多 10 颗,每秒 5 颗) | | **R** | **🔥 喷火技能**(整排全清,无视地形,瞬杀,冷却 10 秒) | | **F** | **🧊 冰柱技能**(整排全清,无视地形,冻结敌人 3 秒,冷却 10 秒) | | K | 暂停 | | P | 重开当前关 | | Enter | 开始 / 重开 | | ESC | 退出 | > 💡 喷火和冰柱是**开局自带**的主动技能,不用拾取。释放时沿当前朝向**整排穿透**,无视任何地形(砖墙/钢墙/草丛全穿透)。 **手机(网页版):** - 屏幕左下**十字方向键**控制移动(可按住、可拖动切换方向) - 屏幕右下** FIRE 键**开火(按住连射) - 屏幕右侧 **🔥 喷火 / 🧊 冰柱** 技能按钮(点击释放,带冷却) - 支持多指同时操作(左手方向 + 右手开火) --- ## 🚀 如何运行 ### 版本一:网页版(推荐,可手机玩) **1. 下载代码** - 点本页面右上角 **"克隆/下载"** → **"下载 ZIP"**,解压到任意文件夹 **2. 安装 Node.js**(如果还没装) - 去 https://nodejs.org/ 下载 LTS 版安装(自带 npm) - 验证:命令行输入 `node -v` 能看到版本号即可 **3. 启动防缓存开发服务器** 打开命令行(Windows:Win+R 输入 `cmd` 回车),输入: ```bash cd 解压路径\tank\web node server.js ``` 看到 `浏览器打开: http://localhost:8099` 表示成功。 > 💡 **为什么用 `node server.js` 而不是 `python -m http.server`?** > 这个服务器会给所有文件加"禁止缓存"响应头,**改代码后刷新立刻生效,不用手动清浏览器缓存**。如果用 `python -m http.server`,浏览器会缓存旧代码导致看不到更新。 **备选:用 Python 服务器**(不推荐,有缓存问题) ```bash cd 解压路径\tank\web python -m http.server 8099 ``` 用这种方式时,每次代码更新后需要 **Ctrl+F5 强制刷新**或清浏览器缓存才能看到新版。 看到 `Serving HTTP on 127.0.0.1 port 8099` 表示成功。 **4. 浏览器打开** ``` http://localhost:8099 ``` 推荐用 Chrome。按 Enter 开始游戏。 **5. 手机上玩** 让手机和电脑连同一个 WiFi: - 电脑命令行输入 `ipconfig`,找到 IPv4 地址(类似 `192.168.1.xxx`) - 手机浏览器访问 `http://192.168.1.xxx:8099` - 用屏幕上的虚拟按键玩 **6. 装到手机主屏幕(当 App)** - 手机浏览器打开游戏后 → 菜单 → **"添加到主屏幕"** - 桌面出现图标,点开全屏玩,像原生 App **7. 关闭服务器** - 命令行按 `Ctrl + C` --- ### 版本二:Python 桌面版(pygame) **1. 安装依赖** ```bash cd 解压路径\tank pip install -r requirements.txt ``` **2. 运行** ```bash python tank.py ``` **3. 跑单元测试**(可选) ```bash python -m pytest test_logic.py -v ``` --- ## 📁 项目结构 ``` tank/ ├── tank.py # pygame 桌面版(单文件) ├── test_logic.py # pygame 版单元测试(18个) ├── requirements.txt # pygame 依赖 └── web/ # HTML5 网页版 ├── index.html # 页面 + 虚拟按键 ├── game.js # 游戏逻辑 + 渲染 ├── style.css # 布局 + 触摸按键样式 ├── manifest.json # PWA 配置 ├── sw.js # service worker(离线缓存) ├── icon-192.png # 主屏图标 ├── icon-512.png # 高清图标 ├── game-logic.js # 纯逻辑模块(测试用) └── test_logic.js # 网页版单元测试(16个) ``` --- ## 🛠️ 技术栈 | 版本 | 技术 | |------|------| | 桌面版 | Python 3 + pygame | | 网页版 | HTML5 Canvas + 原生 JavaScript(零依赖、零构建) | 网页版特性: - **FC 复古像素贴图**:所有精灵用代码生成,无外部图片依赖 - **PWA 渐进增强**:manifest 提供图标/全屏,service worker 提供离线缓存 - **响应式 + 触摸优化**:手机/桌面自适应,多指触控 --- ## 📜 许可证 本项目仅用于学习和娱乐,可自由使用和修改。 --- ## 🙏 致谢 灵感来自经典的坦克大战(Battle City, 1985, Namco)。