撰写了文章 发布于 2019-01-01 14:57:30
《真菌洞窟(Fungus Cave)》十二月开发日志
游戏简介
《真菌洞窟(Fungus Cave)》是一款正在开发的单人、回合制 Unity Roguelike 游戏。这个月主要做了三件事情:
- 为 NPC 添加 AI。
- 学习怎样用 Dijkstra map 写逃离算法。
- 新增检查模式(Examine mode)。
图 1:演示动画,十二月。
图 2:演示动画,十一月。
演员 AI
NPC AI 的核心,ActorAI,是一棵非常简单的决策树:
- 如果 PC 在攻击距离内,攻击 PC。
- 如果 PC 在视线内,接近 PC。
- 原地等待一轮。
NPC 和 PC 共用一套攻击和等待的代码。十一月开发日志 里解释过 PC 的自动探索算法,这里只要把目的地从“PC 未知的区域”改为“PC 所在位置”,就能让 NPC 接近 PC 了。
逃离算法
先前没看懂 Dijkstra Maps Visualized 这篇文章提到的逃离 AI(Fleeing AI),这个月画了几张图,终于弄明白了。我们考虑一种简单的情况(见下图,D1):PC(@)在长方形房间内,左边的哥布林(g)试图逃离 PC,躲进走廊。
图 3:逃离算法。
- 第 1 步:假定 PC 所在位置是目的地,标记距离(图 I)。
- 第 2 步:所有距离乘以 -1.2(图 II-A)。
- 第 3 步:把图 II-A 中的最小值看作目的地,重新标记距离(图 III)。
- 第 4 步:将图 II-A 和图 III 的结果相加,得到最终的距离(图 IV-A)。
不难发现哥(乔)布(瑟)林(夫)有两条逃跑路线:往下走躲进南面走廊,或者往上走躲进东面走廊。如果在第 2 步乘以 -1,最终得到图 IV-B。此时处于蓝色格子的哥布林有 2/3 的可能性放弃南面走廊,逃往距离更远的东面走廊。
那么,为什么选择长方形房间,而不是正方形(图 D2)?最小距离为什么是 10?答案留作习题。
检查模式
检查模式的需求很明确:
- 按 x 进入检查模式。
- 按 Esc 退出检查模式。
- 在检查模式里,按方向键移动检查标记(X)。
- 当检查标记覆盖 NPC 时,显示 NPC 的相关信息。
考虑到方向键在普通模式和检查模式里有不同的含义,我添加了一类特殊的 Game object:CreateDoppleganger()。进入检查模式后,暂时禁用 PC 这个 Game object,让 Examiner 监听按键事件。具体代码由四部分组成:
- SubGameMode 负责开关检查模式。
- UIExamine 绘制 UI。
- ExaminerActions 监听输入事件。
- MoveExamineMarker 移动检查光标。
图 4:这个可以有(指学习)。
写了三个月 C#,最近越来越发现理论知识不够用,吃了没文化的亏。所以新的一年要多读书啊!
墨羽 1年前
发布