《真菌洞窟(Fungus Cave)》十二月开发日誌

215人参与 |来源: |时间:2020-05-28
游戏简介

《真菌洞窟(Fungus Cave)》是一款正在开发的单人、回合制 Unity Roguelike 游戏。这个月主要做了三件事情:

为 NPC 添加 AI。学习怎样用 Dijkstra map 写逃离算法。新增检查模式(Examine mode)。《真菌洞窟(Fungus Cave)》十二月开发日誌 图 1:演示动画,十二月。《真菌洞窟(Fungus Cave)》十二月开发日誌 图 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,躲进走廊。

《真菌洞窟(Fungus Cave)》十二月开发日誌 图 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 移动检查光标。

写了三个月 C#,最近越来越发现理论知识不够用,吃了没文化的亏。所以新的一年要多读书啊!

《真菌洞窟(Fungus Cave)》十二月开发日誌 图 4:这个可以有(指学习)。
上一篇:
下一篇: