关于 tower-defense
面向塔防游戏设计者的组合式技能,组织敌人寻路、波次生成、炮塔索敌与经济循环。重点在于平衡伤害、敌人生命值和收入,并控制波次节奏。
主要功能
- 01设计敌人路径与波次生成
- 02设定炮塔射程、伤害和攻击速度
- 03配置索敌优先级
- 04规划击杀奖励与升级经济
- 05平衡生命值、伤害和收入
- 06安排波次预告与节奏
适用场景
- 01设计沿路径推进的敌人波次
- 02调整炮塔索敌与布置策略
- 03平衡敌人强度和玩家收入
- 04规划下一波预告及难度起伏
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ gamedev-skills/ awesome-gamedev-agent-skills --skill tower-defense安装后在 Claude Code 中输入/tower-defense确认已加载。
附带文件references/balancing.md
详细介绍
塔防
塔防游戏指南——敌人寻路、波次生成、炮塔索敌,以及将它们串联起来的经济系统。这是一项组合式技能:将寻路、AI 和 UI 组合成塔防循环。它不会重新讲解寻路,而是定义各个系统和决定塔防游戏紧张还是轻松的平衡杠杆(DPS、HP 与收入)。
适用场景
- 构建这样的游戏时使用:玩家放置炮塔,炮塔会自动攻击沿路径前进的敌人波次;玩家花费赚取的货币来扩建或升级;如果太多敌人漏过防线,玩家就会失败。
- 设计波次组成与节奏、炮塔索敌优先级或金币经济时使用。
不适用场景: 玩家直接操控射击角色 → fps-shooter。带有需求系统的自由建造基地 → survival-crafting。若要实现寻路算法本身,请使用 game-ai。
核心循环
准备(用当前金币放置或升级炮塔)→ 开始波次 → 敌人朝目标寻路,炮塔自动开火 → 击杀敌人赚取金币 → 撑过波次 → 重复并迎战更难的波次。 紧张感来自规划谜题:我当前的 DPS 足以应对接下来的一波吗?我负担得起应对方案吗?
必备系统
- 敌人路径 — 路径点路线,或用于迷宫式塔防的网格 + 寻路(参考资料)。
- 波次生成器 — 按时间触发、由数据驱动的敌人类型序列,并按波次逐步增强。
- 炮塔 — 射程、射速、伤害、投射物/即时命中、范围伤害;放置有效性检查。
- 索敌 — 每座炮塔的优先级(最先/最后/最近/最强/最弱)(参考资料)。
- 经济系统 — 击杀奖励 + 波次奖励金币;炮塔/升级成本;出售返还。
- 生命值 / 漏怪 — 敌人到达目标会扣除生命值;生命值降至 0 = 游戏结束。
- 波次/准备阶段 UI — 生命值、金币、下一波预览、开始下一波的控制项。
设计参数
| 参数 | 效果 | 备注 |
|---|---|---|
| 敌人 HP 随波次增长 | 推动升级 | 几何增长约为 1.1–1.2×(参考资料)。 |
| 收入与 HP 曲线 | 难度 | 玩家应该_几乎_负担得起应对每一波。 |
| 炮塔 DPS / 射程 / 成本 | 炮塔特色 | 便宜+射程广 vs. 昂贵+射程远。 |
| 索敌优先级 | 最优放置 | 相较于原始属性,对玩法的影响更大。 |
| 敌人种类 | 克制单一流派的胜利 | 快速 / 装甲 / 飞行 / 群集 / Boss。 |
| 漏怪惩罚 | 利害关系 | 扣除生命值_并且_失去悬赏奖励。 |
| 升级与建造经济 | 策略深度 | 升级收益递减。 |
| 波次节奏 | 紧张曲线 | 高峰 → 缓和 → 高峰,而非单调递增。 |
模式
1. 波次生成器(定时、数据驱动)
# Pseudocode. A wave is data: a list of (enemy_type, count, spacing). Spawn over time.
wave = [ ("grunt", 10, 0.5), ("runner", 5, 0.3), ("tank", 2, 1.0) ]
def run_wave(wave):
for enemy_type, count, spacing in wave:
for _ in range(count):
spawn_enemy(enemy_type, at=path[0]) # enter at the path start
wait(spacing) # seconds between spawns (use a timer/coroutine)
# wave clears when all spawned enemies are dead or have leaked
2. 炮塔索敌(筛选射程内目标,再按优先级选择)
# Pseudocode. "First" (furthest along path) is the standard default for stopping leaks.
def acquire_target(tower, enemies, mode="first"):
in_range = [e for e in enemies if distance(tower.pos, e.pos) <= tower.range]
if not in_range: return None
if mode == "first": return max(in_range, key=lambda e: e.progress) # furthest along path (stop leaks)
if mode == "last": return min(in_range, key=lambda e: e.progress) # least progress (guard the entrance)
if mode == "closest": return min(in_range, key=lambda e: distance(tower.pos, e.pos))
if mode == "strongest":return max(in_range, key=lambda e: e.hp) # burn down tanks first
if mode == "weakest": return min(in_range, key=lambda e: e.hp) # secure kills / last-hit bounty
return in_range[0]
3. “这条路线守得住吗?”合理性检查(DPS 对比 HP)
# Pseudocode. One tower's damage to one enemy crossing its range.
tower_dps = tower.damage * tower.fire_rate
time_in_range = tower.range_coverage_length / enemy.speed
damage_dealt = tower_dps * time_in_range
# Lane holds if summed damage_dealt from covering towers >= enemy.hp (per enemy). See refs.
常见问题 / 失败模式
- 敌人 HP 增长慢于玩家收入/DPS → 几波之后游戏就会变得毫无挑战。根据收入曲线调整 HP 曲线(参考资料)。
- 存在一种占优炮塔/策略 → 玩家没有选择。加入能够完全克制特定流派的敌人类型(装甲克制速射,飞行克制仅攻击地面的炮塔),并让升级收益递减。
- 迷宫式塔防可以完全堵住目标 → 敌人会卡住/导致软锁。禁止阻断路径的放置;炮塔变化时重新计算路径(参考资料)。
- 没有下一波预告 → 特殊敌人会显得随机且不公平。预览即将到来的敌人组成。
- 未按
dt缩放逐帧移动 → 速度会随帧率变化。按dt缩放转向。 - 漏怪只扣生命值,不扣金币 → 有时漏怪反而是最优选择。让漏怪也会损失悬赏奖励。
- 难度单调递增 → 令人疲惫。安排难度高峰与缓和阶段。
组合(使用这些技能构建)
- **寻路:**使用
game-ai实现 A*、流场或转向;固定路线则使用简单的航点跟随。 - **敌人移动:**使用
godot-2d-movement(或引擎中的同类功能)沿路径移动;使用unity-navmesh实现基于导航的寻路。 - **地图:**使用
godot-tilemap/unity-tilemap-2d构建网格或路线;使用level-design设计地图布局。 - **数据:**使用
godot-resources/unity-scriptableobjects将炮塔、敌人和波次定义为资源。 - **UI:**使用
game-ui-ux设计 HUD 布局、缩放和建造菜单;使用godot-ui-control实现具体控件(生命值、金币、波次预览)。 - **润色:**使用
audio-design设计开火、命中和漏怪的音效提示。
参考资料
- 有关路径表示方式(航点 / A* / 流场)、目标模式、DPS 和经济系统的计算、敌人强度缩放以及波次节奏,请阅读
references/balancing.md。
评论
支持 Markdown