关于 roguelike
面向回合制、网格地图 Roguelike 与 Roguelite 的组合式设计技能,供构建地牢游戏的开发者规划单局循环及程序化地牢、视野、永久死亡和战利品等系统。
主要功能
- 01回合制单局循环设计
- 02程序化地牢生成要点
- 03视野与已探索区域记忆
- 04永久死亡与局外成长
- 05战斗、战利品与资源系统
适用场景
- 01规划回合制地牢游戏
- 02设计视野与战争迷雾
- 03平衡永久死亡与解锁内容
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ gamedev-skills/ awesome-gamedev-agent-skills --skill roguelike安装后在 Claude Code 中输入/roguelike确认已加载。
附带文件references/generation-fov-loot.md
详细介绍
Roguelike
Roguelike 的设计指南——涵盖回合引擎、程序化地牢、视野、永久死亡和单局经济。这是一项组合式技能:它将程序化生成、瓦片地图、存档处理和 AI 整合为一款以单局为核心的游戏。它不会重新讲解噪声/随机数生成器或瓦片地图 API,而是定义让一场单局引人入胜的循环和系统。
适用场景
- 构建一款回合制、网格制地牢探索游戏,其中每次死亡都会结束本局并重新生成世界——也就是 roguelike 或带有元进度的 “roguelite”。
- 设计程序化地牢、视野/战争迷雾、永久死亡带来的风险或战利品表时使用。
**不适用场景:**带有 roguelike 外观的实时动作游戏 → 构建动作类型游戏(platformer/fps-shooter),再叠加 procedural-gen。没有永久死亡机制的深度属性/任务/对话 → rpg。需要开放世界生存要素/制作系统 → survival-crafting。
Roguelike 的设计支柱
社区参考标准是柏林诠释(RogueBasin,IRDC 2008):一系列衡量 “roguelike 特质” 的因素,而非核对清单。价值最高的因素是设计目标:随机环境生成、永久死亡、回合制、网格制、非模态(所有行动都处于同一模式)、复杂性(物品与怪物之间有多种互动)、资源管理、砍杀以及探索与发现。着重运用这些特征,才能营造 roguelike 的感觉;也可以有意识地选择保留哪些特征。“Roguelite” 通常会通过元进度来弱化永久死亡机制。
核心循环
**采取一个回合(移动/战斗/使用)→ 世界结算其回合 → 查看新状态 → 下潜/搜刮/生存 → 死亡并在全新的地牢中重新开始。**可重玩性来自每局都在变化的世界,而不是玩家记住固定的地图布局。
必备系统
- 回合调度器 — 采用能量/先攻系统,让速度快的行动者能更频繁地行动(模式 2)。
- 网格地图与移动 — 瓦片坐标;碰撞攻击;查询阻挡/可行走状态。
- 程序化地牢生成器 — 房间与走廊,或 BSP/细胞自动机;确保连通性。
- 视野与已探索区域记忆 — 区分当前可见区域与之前见过的区域(模式 3/参考资料)。
- 战斗与实体 — 生命值、攻击/防御、状态;怪物遵循与玩家相同的规则。
- 战利品与掉落表 — 按权重和地牢深度调整物品/怪物生成(参考资料)。
- 永久死亡与(可选的)元进度 — 清空本局进度;只保留解锁内容/分数。
- 消息日志与清晰的 UI — 玩家根据文本/状态作出判断;明确显示数值和事件。
设计参数
| 参数 | 效果 | 备注 |
|---|---|---|
| 地牢大小/房间数量 | 单局时长、密度 | 随深度调整。 |
| 连通性保证 | 避免房间无法到达 | 生成后务必验证可达性。 |
| 怪物密度/深度曲线 | 难度提升 | 根据深度加权表生成。 |
| 战利品稀有度权重 | 强度差异 | 越稀有,效果差异越大;鉴定可增加探索乐趣。 |
| 视野半径/光照 | 紧张感、信息量 | 半径越小,越令人不安,探索也越慢。 |
| 资源稀缺程度(食物/生命值/弹药) | 推动玩家下潜 | 经典 Roguelike 的核心紧张感来源。 |
| 永久死亡与元进度 | 单局风险与玩家留存 | Roguelite 会弱化这种阻碍。 |
| 鉴定/未知物品 | 探索价值 | 未鉴定物品能鼓励玩家尝试。 |
| 可设定种子的随机数生成器 | 每日挑战、调试 | 始终允许使用固定种子(参见 procedural-gen)。 |
模式
1. 确定性、可设定种子的单局随机数生成器
# Pseudocode. One seeded RNG per run makes dungeons reproducible (daily runs, bug repro).
run_seed = chosen_seed or random_seed()
rng = Rng(run_seed) # use your engine's seedable RNG, not global random
dungeon = generate_dungeon(rng, depth) # same seed + depth => same dungeon
# Persist run_seed in the save so a crash can resume the same world (see save-systems).
2. 基于能量的回合调度器(速度各不相同)
# Pseudocode. Each actor gains energy each tick and acts when it has enough.
# Faster actors gain more per tick, so they act more often — no fixed "player then enemies".
TURN_COST = 100
def next_actor(actors):
while True:
for a in actors: # stable order avoids ties favoring one side
a.energy += a.speed # e.g. speed 100 = normal, 150 = hasted
if a.energy >= TURN_COST:
a.energy -= TURN_COST
return a # this actor takes exactly one action now
3. 视野与已探索区域记忆
# Pseudocode. Recompute visibility from the player each time they move.
visible = compute_fov(map, player.pos, radius=8) # symmetric shadowcasting (see refs)
for cell in visible:
explored.add(cell) # remember it forever (dim "fog of war")
# Render: visible -> lit; explored-but-not-visible -> dim; never-seen -> hidden.
使用经过验证的视野算法(递归阴影投射或对称阴影投射)。不要对每个格子都使用简单的射线投射——这会导致视野不对称、时隐时现。参见参考资料。
常见问题/失败模式
- 地下城不连通 → 玩家无法到达某些房间。始终执行连通性/洪泛填充检查,并开凿走廊,直到所有可行走单元都可到达。
- 朴素视野 → 视野闪烁或不对称(你能看到对方,对方却看不到你)。使用阴影投射法;测试对称性。
- 假装采用回合制的实时循环 → 输入竞争和重复移动。一次只处理一个离散回合;将输入排队。
- 难度一成不变 → 缺乏深入探索的压力。根据深度调整怪物和战利品,并让资源保持稀缺。
- 永久死亡时连元进度解锁也一并清除 → 令人沮丧。保存时将本次冒险状态(清除)与玩家档案状态(解锁内容、分数)分开(参见
save-systems)。 - 在“永久死亡”游戏中反复读档 → 如果想实现真正的永久死亡,请在加载时删除或作废本次冒险的存档;只保留玩家档案。
- 状态难以辨认 → 玩家无法制定计划。显示 HP、回合结果和消息日志。
组合(使用这些技能构建)
- 生成:
procedural-gen(噪声、带种子的 RNG、地下城/房间算法)——可重玩性的引擎。 - 地图渲染: 使用
godot-tilemap/unity-tilemap-2d绘制网格;使用level-design设计固定场景房间/藏宝室。 - 敌人: 使用
game-ai处理怪物的决策(在网格上通常很简单:追击/逃跑/巡逻)。 - 持久化: 使用
save-systems实现本次冒险的存续与续玩、玩家档案/元进度,以及真正的永久死亡清除。 - 脚本/数据: 使用
godot-resources/unity-scriptableobjects,以数据形式定义物品、怪物和掉落表。 - UI: 使用
godot-ui-control实现消息日志、物品栏和 HUD。 - 手感: 使用
game-feel增强击中/死亡反馈——通过屏幕震动和命中停顿,让回合制网格上的冲击感更真实。
参考资料
- 关于地下城生成算法(房间与走廊、BSP、细胞自动机、连通性)、视野(阴影投射法)和加权战利品/生成表,请阅读
references/generation-fov-loot.md。