First Machine!

在进程模块框架下的第一个可运行的 AI

我们已经写了很多的代码了,如果一直是概念设计以及抽象的代码编写,很快我们就会丧失兴趣。所以我们需要看到什么 :D

编写好了进程模块之后,我们已经可以实现我们第一个简单的 AI了。它的目标就是完成游戏教程中的任务:

  • Spawn 生 Upgrader, Harvester

  • Harvester 采能量, 补充 Spawn

  • Upgrader 采能量, 升级 Controller

但是我们依赖信号集以及我们的进程模块可以省去教程那样每 tick 查询来校验 Creep 是否存在,能量够不够生成新的 Creep等等。

所以,我们要做的是高阶的教程 AI!它是属于触发型的,每 tick 不用不停的查询。满足条件的时候自动唤醒执行,不满足条件的时候自动阻塞,不再执行。

当 Creep 死亡后,会创建 spawn 这个 Creep 的进程,这个进程会申请能量,申请不到就会阻塞,不再运行。当能量够的时候,会自动唤醒,并进行生成。

而一旦 Creep 出生后,会自动激活固定的执行进程。我们后边在编写具体的模块的时候,通常也是需要固定的 Creep 来执行任务。除非是例如传输模块,需要自适应,复杂一些。

但是,目前我们这个体系是 vulnerable 对于外界的干预的,例如:别人的 Creep 来从我们的 Spawn 中拿了些东西出来,那么 Spawn 中的资源就与我们的信号量值不同步。再比如:我们的 Spawn 被 Nuker 摧毁了。这些问题目前还解决不了。

🌞 Apollo AI

import { PMI, ProcessModule } from "./modules/proc/proc";

interface ApolloInterface {
    proc: ProcessModule
}

export const Apollo: ApolloInterface = {
    proc: new PMI()
}

🤖 AI Body

这只是一个 AI 雏形,所以很多地方还很粗糙。但是我们已经实现了我们的目标。

甚至,这个雏形当中也包含着我们未来模块的雏形。

这个雏形还有很多可以改进的地方以及问题(每个房间只能有一个 Spawn,同一时间只能有一个 Creep transfer 能量到 Spawn等等),但是它包含了基本所需的进程:

  • 生 Harvester & Upgrader 的进程

  • Harvester & Upgrader 工作进程

  • 监视死亡的 Creep,触发再生进程

  • 监视 Spawn 能量自增进程

🖼️ 效果图

Harvester & Upgrader

Last updated