北大侠客行MUD论坛

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

通用全自动机器人之遍历方法探索

[复制链接]
发表于 2011-11-16 14:14:59 | 显示全部楼层 |阅读模式
前几天,在下写了篇《慕容机器 思路 不提全自动》,侧重宏观或总体的思路,跟帖中有些朋友谈到了如何遍历的问题。特撰此文,把我的遍历思路提供出来,请大家批评指正,欢迎大家交流,共同完善进步。
    本文取名“通用”确实有哗众取宠之嫌,希望吸引大家的眼球,能够关注,以便请高手光临多提宝贵意见,见谅见谅!
    看了慕容和护镖的任务介绍,加上自己做慕容的经验,感觉为适应不同任务情况,遍历可以分为两种:定中心变半径区域遍历和无中心区域遍历。所谓定中心变半径区域遍历,是指NPC需要在以某房间为中心的附近房间搜寻,而这个“附近”是不能确定到底是离开中心房间几步的,故名变半径。所谓无中心区域遍历,是指不能或不便确定某个房间为中心点,而又需要在某范围内进行遍历的。下面举例说明。
    护镖任务要求玩家送镖到某地(一般此地名在某城市唯一)附近区域找某个NPC,因此更适合于定中心变半径区域遍历来实现自动寻找目标NPC。而慕容任务相对复杂一些,如果任务目的地地名是唯一的,那么可以使用定中心变半径区域遍历来实现,如果任务目的地地名不唯一,即某城市的N个地方都叫这个名字(如长廊、青石大道、黄河北岸等),此时如果使用定中心变半径遍历方法就很麻烦,而且会走很多冤枉路。考虑到慕容任务NPC不会行走太远,那么就适合使用无中心区域遍历方法,即提前录制重名地点路径,录制时可多录制周围一二步范围内房间,将已经录下的房间名称存到一个list变量里(注:多录制的那些周围的房间不存),如果任务给出的目的地在上述list变量内,则通过慢速行走找到NPC。
     刚才提到了定中心变半径区域遍历的适用情况,介绍了无中心区域遍历的实现方法,而没有讲定中心变半径区域遍历的实现方法,是因为后者实现起来比较麻烦。我现在还没有一个非常成熟的想法,还在学习研究当中,虽然已经有了一些思路。现在写出来,也是希望朋友们能够开动脑筋,或者你已经是遍历高手,请不吝赐教。
    BTW,所有的任务都可以通过无中心区域遍历的方法来完成,只不过效率不高。
    期望你的参与!

北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-11-16 14:42:06 | 显示全部楼层
很是麻烦啊
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-11-16 15:34:34 | 显示全部楼层
楼主,要说就说的详细点,比如搞一个小例子,
这样讲纯粹是隔靴搔痒。。。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-11-16 15:39:48 | 显示全部楼层
我的目标就是——做成全自动机器人(图片任务除外)!虽然网站不让发全部的代码,但我会把关键环节毫无保留的奉献给大家(也许是通过伪代码的形式)。请大家共同提思路,我的肯定不是最优的。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-11-16 16:47:24 | 显示全部楼层
不要重新造轮子。
没有看出你的想法比helllua 先进在哪里?
or你不知道helllua?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-11-16 19:38:21 | 显示全部楼层
本帖最后由 littleknife 于 2011-11-16 07:39 PM 编辑

中心点遍历--其实就是通过深度遍历或广度遍历来实现的。
而线性遍历--即录制好路线,然后按这个路线走遍路线所涵盖地点。。其实属于伪遍历。

hellua的代码,主要提供了中心点遍历的方法,但是主要是要弄清楚遍历的核心目的是什么?你为什么要用遍历?
个人理解:
一个是,简单的只是通过遍历找到目标;
一个是找到目标后,能生成从开始遍历起点到目标的路线,以便处理完目标后直接返回。

所以单纯的找到目标不去考虑处理完目标的问题。也许可以称为无目的地毯式搜索更好些,而有路线返回的遍历方式也许才能称为是一个成熟的遍历吧。


楼上若有心得,不妨说出来大家学习下。。个人觉得楼主的这个心态值得肯定。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-11-16 20:38:35 | 显示全部楼层
路线返回不是问题
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-11-16 20:38:41 | 显示全部楼层
问题是如何去
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-11-16 21:38:35 | 显示全部楼层
回复 5# trace
我确实不知道helllua,所以也就谈不上我感觉自己的想法比他的先进。
如果你能贴出他的链接,不胜感激。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-11-16 21:56:58 | 显示全部楼层
如我前面的帖子所说,会把制作这个机器人的全过程的关键点和细节(也许高手看来很简单)都写出来,算是普及zmud基础吧,也请高手指点,自己能有所提高。比如从最简单的如何触发记录任务地点,怎么处理得到的任务地点都会写。另外我感觉去和回都是值得研究的问题,关键是效率,比如去,如果目标城市很大,大城市分成几个区域遍历和一个区域遍历效率肯定不同。而对于回,在我写的天龙新手第三阶段机器人的文章里提到了一种实现方法,就是去的时候每一步都回馈一个返回步骤的触发语句,比如向东走,输入e,同时输入语句#say 反向w,这样通过"反向w”进行触发,将"w"保存到返回list变量里,返回时将此list变量的值依次取出即可。当然这里的#say 反向w,不需要手动输入,可以通过其他手段实现。这里不详细说明,我想在以后写到这一部分的时候一并写出。
再次重申,我是mud新手,水平很低,还请各位高手不吝赐教。
如果在你能告诉我我很笨的同时告诉我更好的解决办法,不胜感激。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-1 07:28 PM , Processed in 0.012770 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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