深入浅出制作全自动Mud机器人-准备阶段
-
我觉得,全自动机器人本质是对人在Mud中行为的归纳,也就是常说的抽象。
抽象出的行为模式可能有很多种。
对于我而言,比较擅长的是
信息采集->准备阶段(状态重置)->任务执行这样一个模型。
所以,继状态采集后,最重要的就是准备阶段。
什么是准备阶段?
准备阶段,粗泛点来说,就是通过不同的准备步骤将角色维护到一个Ready的状态。
通俗来说,其实就是一次角色状态的慢重启。
对,就是电脑出问题了先重启那个意思。
机器人的复杂性很大一部分来自于情况的复杂性。
所以,如果我们能在任务执行前,先进入一个统一的状态,类似修电脑前先重启一下,就能更容易的用更简单的代码来进行维护。
因为只要考虑一种初始状况就可以了。
怎么进行准备阶段。
对于一般机器的准备阶段,我在主逻辑部分也说了,就是一个if队列
- 对角色的某个属性定一个标准,检查是否符合这个标准
- 如果不符合这个标准,就执行相应的代码,然后重头开始进行检查。
- 如果符合这个标准,则当前标准通过,检查下一个标准
- 如果所有的标准都符合了,准备结束,状态已经重置,进入执行阶段。
所以我们提炼(抽象)一下,就是
- 我们有几个模块,有先说顺序。
- 模块有一个Check函数。
- 模块有一个 执行函数,Check没过就去执行。
- 对所有的模块可能会有个统一的环境(上下文),作为检查的一些具体细节。
我在newhelljs里就是设置了一个Proposal(提案)类,核心就是有一个Submit(提交)方法
https://github.com/hellclient-scripts/newhelljs/blob/main/script/helllibjs/proposals/proposals.js
所有的准备就是提交一个个的提案,如果提案通过,则返回要执行的方法,去执行。提案每没过,返回一个空,继续执行下一个提案
怎么组织准备阶段的步骤。
我在newhelljs里准备了一个全局注册的容器Proposals,把每个Proposal按id注册进行。这样在执行准备时可以通过一个字符串id数组就制定要进行的提案了。
同时准备了一个提案组的类型,把多个提案绑成一个新提案,比如common,commonwithstudy这样调用和维护都轻松的多。
怎么验证准备的效果
整个全自动Mud稳定的基础其实就是准备阶段。准备阶段大部分情况下是整个机器最复杂的部分,机器架构的很重要的一部分就是把复杂性统一放在准备阶段,这样任务部分就很轻很简单了。
同样,准备是一个很好的测试机器人稳定性的工具。
我们可以做一个空循环
信息采集->准备阶段->等一秒空跑一段时间,就能验证整个机器人底层框架的稳定性,健壮性,以及是否有内存泄漏之类的问题了。
-
J jarlyyn 在 引用了 此主题