|
楼主 |
发表于 2021-9-8 03:42:42
|
显示全部楼层
本帖最后由 jarlyyn 于 2021-9-8 04:24 PM 编辑
先把获取路径部分代码丢出来吧。
获取路径一般需要路径数据,通过简单的算法算出来。
寻路算法最有名的是dijkstra
介绍可以看https://www.jianshu.com/p/a235d9877d32
由于mud本身的特性,对性能要求不高,算法并不需要很完美的实现。
我10年前在北侠论坛放出的机器人里包含一个mush用的dll的实现,这次客户端里自带一个,其实用lua或js来实现也很简单。
就是把地图想象为一张白纸,从起点开始,按时间依次沿路径向外(白色的地方)扩散,只要有颜色了就不再覆盖,没轮扩散后检查是否有重点被染色了,有就是需要的路径,没有继续扩散。知道扩无可扩,说明找不到路径。
go语言的代码没用什么语言特性,可以很容易的迁移到其他语言,具体见:
https://github.com/jarlyyn/hellc ... es/mapper/mapper.go
以及
https://github.com/jarlyyn/hellc ... s/mapper/walking.go
我们现在做的很简单,就是把昨天我添加的几条路径,分解为 为去和来的路径,比如 yzgc到 yztj 的 e;e;s 和yzth到yzgc 的 n;w;ww 添加到房间信息里去
同时注册了一个ready事件,在机器人ready(所有模块记载完之后)将地图信息载入mapper。
然后把起点和目标地址列表传入,就能获取到路径信息了
具体来说
我现在的房间信息列表为
- addroom("yzgc","扬州广场",{Landmark:"Rong shu"})
- addroom("yzqz","扬州钱庄",{Station:"扬州钱庄"})
- addroom("yzdp","扬州当铺",{Landmark:"Tang nan"})
- addroom("yztj","扬州铁匠",{Landmark:"Wang tiejiang"})
- addroom("yzzxl","扬州醉仙楼",{Station:"醉仙楼"})
- addroom("yzcg","春来茶馆",{Station:"春来茶馆"})
- addroom("yzyp","扬州药铺",{Landmark:"Ping yizhi"})
- addroom("yzsy","扬州书院",{Landmark:"Fu zi"})
- addroom("yzkd","扬州客店",{Landmark:"Song shengyi"})
- addroom("yzdtpns","扬州打铁铺内室",{Station:"打铁铺内室"})
复制代码 路径列表为
- app.Info.Paths={
- "yzqz":"yzgc|n;w|e;s",
- "yzdp":"yzgc|s;e|w;n",
- "yztj":"yzgc|e;e;s|n;w;w",
- "yzzxl":"yzgc|n;n;e|w;s;s",
- "yzzxl":"yzgc|s;s;w|e;n;n",
- "yzyp":"yzgc|e;e;n|s;w;w",
- "yzsy":"yzgc|e;e;n|s;w;w",
- "yzkd":"yzgc|n;e|w;s",
- "yzdtpns":"yztj|s|n",
- }
复制代码
我在扬州钱庄去了钱,想去铁匠铺内室买牛哄哄金闪闪的武器。
由于我有钱庄到广场,广场到铁匠铺,铁匠铺到内室的路径,能算出要走的命令
输入 /DumpPath("yzqz","yztjpns"),得到结果
- {
- "Delay": 6,
- "Path": [
- {
- "command": "e;s",
- "from": "yzqz",
- "to": "yzgc",
- "delay": 2
- },
- {
- "command": "e;e;s",
- "from": "yzgc",
- "to": "yztj",
- "delay": 3
- },
- {
- "command": "s",
- "from": "yztj",
- "to": "yzdtpns",
- "delay": 1
- }
- ],
- "Command": "e;s;e;e;s;s"
- }
复制代码
很明显,需要6步,总命令为“e;s;e;e;s;s”每一步要走的信息和时间在Path里。
主要变动的代码不多,主逻辑在
https://github.com/hellclient-sc ... cript/info/paths.js
里
注册了info.paths.loadpaths 回调,绑定到了ready事件上
同时注册了一个GetPath的API
好了。
今天就到这里了。
我需要缓一缓,去平复下我的心情。
|
|