深入浅出制作全自动Mud机器人-数模转换
Script脚本
1
帖子
1
发布者
16
浏览
-
数模转换其实是一个很古早的概念了。
就是将原始的模拟信号,转换成数字信号,然后数字化的系统才能根据数字信号进行操作。
首先,从严格意义上说,服务器返回的文字信息本质是ansi控制文本,是一种带显示控制的控制,目的是进行一种美观的带格式的外观描述,这的确是一种 数字化程度很高的 模拟信号。
其次,对于实际的复杂业务来说,把数据抽象成业务数据,将代码隔离为业务层和交互层也是很通用的一种处理技巧,在实际需求上,的确有分割交互层(模拟信号)和业务层(数字信号)的意义。
所以,进行数模转换是一种我很推荐的架构形式。
数据标准化
数模转换而第一步是信息标准化。
也就是,将所有的信号,转为一种有约定格式和共性的基础信号。
很多时候,处理程序还需要对信号做一个2次处理,抽取和判断后生成原生信号的衍生信号。
在这个背景下,处理业务数据的代码才能做到信号形式的无关性。
具体到代码的例子。我在newhelljs里引入了
App.LineEvent = function (name) { return App.Engine.LineEvent(name) } App.FilterLineEvent = function (filtername, eventname) { return App.Engine.FilterLineEvent(filtername, eventname) }两个方法。
- App.LineEvent是直接将一个mud行的出发,抛出为一个制定name的event
- App.FilterLineEvent是定义一个处理器,在处理器里做预处理和判断,然后确定没问题的话再以eventname抛出事件
App.FilterLineEvent的应用范例:
//处理房间名 App.Engine.SetFilter("core.normalroomname", function (event) { let words = App.History.CurrentOutput.Words if (words.length == 1 && words[0].Color != "" && words[0].Bold == true) { App.RaiseEvent(event) } })接到可能是房间名的信号后,判断是否符合条件,符合条件再抛出事件。
信号数据采样
在mud中,除了根据行进行分析的时间外,还有很多直接的数据信号取的护理。比如hp,score,skills,i等指令。
这时候需要将传输来的模拟信号(一般是固定格式的表格列表)转换为合适的数据模型,再加以保存。
对于能够主动触发的数据,也要做好缓存的处理。
工作重点
对于根据数模转换对代码进行分层,我们要明白主要的工作重点,这样能更好的根据实际情况进行合理规划。
我们的数模转换的核心目的是
- 让代码更清晰,易于维护,代码出现问题时能快速定位到相应模块
- 将业务与实际表现剥离,这样在Mud进行更新/更改界面时,不会需要对业务层进行调整。比较表现层比业务层测试快的多。
-
J jarlyyn 被引用 于这个主题