北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 186|回复: 5

利用AI写宋远桥任务的机器人尝试

[复制链接]
发表于 前天 10:01 AM | 显示全部楼层 |阅读模式
宋远桥任务主要是看颜色块,要遍历地图然后去比对颜色块,我们这里只讨论通过AI来分析如何把颜色块识别并转成数据,用于比较。基于客户端Muder和Javascript,AI生成Javascript很容易。
1. 我们先来看原始数据:
所有的数据都在data/log下

我们这个颜色块数据必须是在原始数据下,也就是 raw 目录下,
我们查看一下日志文件,得到颜色数据是:

2. 我们需要通过正则匹配出中间的色块区域,我们自己去写这个正则费半天劲,直接问AI


3. 得到正则表达式是 /^[^\n]*\n([\s\S]*?)\n[^\n]*$/ ,填入游戏界面的触发器,注意把颜色模式勾选上,因为正常匹配只匹配屏幕上不带颜色的文字

北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 前天 10:08 AM | 显示全部楼层
4. 继续问AI,如何把中间的颜色匹配出来

因为47是白色底,我们需要屏蔽掉,得到代码
  1. // 提取中间部分
  2. const match = input.match(/^[^\n]*\n([\s\S]*?)\n[^\n]*$/);
  3. const middle = match ? match[1] : '';

  4. // 逐行统计非47颜色的数量(背景色代码)
  5. const result = middle.split('\n').map(line => {
  6.   const matches = [...line.matchAll(/\x1b\[(\d+);1m/g)];
  7.   // 过滤出非47的颜色代码
  8.   const non47 = matches.filter(m => m[1] !== '47');
  9.   return non47.length;
  10. });

  11. console.log(result); // 输出:[2, 0, 1, 1, 0]
复制代码
5. 我们只需要把console.log 换成 sys.info 就可以填到触发器对应的代码里了,参考前面的图
6. 执行验证效果

最后的[0,0,0,2,0,0,1,1] 就是我想要的,不过这个正则匹配多了,可以改进
7. 剩下的就是把这个记录下来,然后在相应的地方遍历,如果遍历到同样的,2,0,0,1,1就匹配上了,还可以加上颜色的标识就更准确了
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 前天 10:25 AM | 显示全部楼层
加上地图文件,就可以直接挂宋远桥了
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 前天 10:36 AM | 显示全部楼层
用每行的颜色个数,  还是会误判的.  可以把有颜色的地方当成1, 没有颜色的当成0, 总共5行5列就可以当成一个2进制数值, 来进行比较.  还有, 不是所有情况, 都是2个空格显示一个颜色, 也有3个空格这样的,  也需要合并
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 前天 10:38 AM | 显示全部楼层
jpl 发表于 2025-7-4 10:36 AM
用每行的颜色个数,  还是会误判的.  可以把有颜色的地方当成1, 没有颜色的当成0, 总共5行5列就可以当成一个 ...

嗯,多谢,还没仔细试,给大家一个思路,AI做这些很简单
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 昨天 02:03 PM | 显示全部楼层
jpl 发表于 2025-7-4 10:36 AM
用每行的颜色个数,  还是会误判的.  可以把有颜色的地方当成1, 没有颜色的当成0, 总共5行5列就可以当成一个 ...

连续空格会读取失败吗?我读前面几个色块的颜色是可以的,读到第3,有时候第4开始后面就变成空白了,实际颜色又有。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2025-7-6 12:49 AM , Processed in 0.019213 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表