oolong 发表于 2009-12-6 09:01:40

我的遍历办法[zmud 721]

和各位高手讨论以下哈。

比如得到一个地点 少林走廊
1.所有少林走廊房间号找到
2.一个一个walk过去
3.如果找不到就得到全少林房间一个一个walk

如果单房间就搜索周围 n个房间一个一个walk

再加上一个定位的方法,我定位只看房间名
1、如果房间名字唯一当然定位成功
2、如果不唯一,判断路途中有没有走错路,没有走错也算定位成功,这样一般迷宫都没有问题,就是随机迷宫没有办法

[ 本帖最后由 oolong 于 2009-12-7 12:36 PM 编辑 ]

grla 发表于 2009-12-6 09:11:48

原帖由 oolong 于 2009-12-6 09:01 AM 发表 http://pkuxkx.net/forum/images/common/back.gif
和各位高手讨论以下哈。
我做了个mr机器人,大概40k/hour。
比如得到一个地点 少林走廊
1.所有少林走廊房间号找到
2.一个一个walk过去
3.如果找不到就得到全少林房间一个一个walk

如果单房间就搜索周围 n个房 ...
机器人发上来测试一下 如果可以的话 这将是北侠新人的福音啊

[ 本帖最后由 grla 于 2009-12-6 09:31 AM 编辑 ]

ewo 发表于 2009-12-6 09:22:17

不错

tml 发表于 2009-12-6 12:48:25

顶!!

oolong 发表于 2009-12-6 18:49:18

主要是我也不知道什么算法,只能全部走一遍,ttk_05

gnu 发表于 2009-12-6 20:13:57

这个机器人发上来应该会被icer干掉吧。
超过10个房间地图数据?

kopo 发表于 2009-12-6 20:35:43

支持,哪里有全部房间的数据?

maper 发表于 2009-12-6 20:50:48

不错,能挂住就行了
可惜慕容被改了,杀手帮被改了,房间放物品数量也被改了,要不然就爽歪歪了!嘿嘿

dreamno 发表于 2010-1-5 13:58:39

我是先走房间名,走完了后如果没找到,搜索附近的@range范围的房间。
      #var room_list_idx 1
      #var room_list_zone_idx 1
      #var room_list_count %numitems( @room_list)//房间名搜索结果
      #var room_list_zone_count %numitems( @room_list_zone)//整个区域的房间
      #var room_list_temp {}
      #while (@room_list_idx<=@room_list_count) {
          #var roomfrom %item( @room_list, @room_list_idx)
          #while (@room_list_zone_idx<=@room_list_zone_count) {
            #var roomto %item( @room_list_zone, @room_list_zone_idx)
            #var pathfromto %pathfrom( @roomfrom, @roomto)
            #if %numitems( %pathexpand( @pathfromto))<@range {#additem room_list_temp @roomto}
            #ad room_list_zone_idx 1
            }
          #ad room_list_idx 1
          }

加上描述定位能好一点。
另外对于迷宫我特殊处理了一下。定位失败就看下是不是迷宫,如果是迷宫就读取,预设的路径走出来。

seagate 发表于 2010-1-5 15:06:09

我觉得关键你是想怎么遍历的,是要跨区域遍历?还是区域内遍历?是要全地图遍历还是一定步深范围内遍历?
不同遍历方式效果都不一样,个人感觉区域内全地图遍历要一个高效算法比较麻烦,因为每走一步你都要查看房间内是否有符合要求的npc,这个至少要消耗0.5秒。
我想是不是可以用多步触发来解决这个问题?触发1是房间名,触发2是方向,触发3是一个任意语句,如果是你想要的npc记录该房间,如果是下一个房间名停止本触发,我不知道这个实现是否合理?这样子做是不是效率能高一点,至少走路的时候不用停下来,一个区域估计2-3秒内走完,然后根据触发算路径走路。
对于一定步深范围内遍历一定要做跨区域遍历,如果你是一定步深范围内遍历还限制区域肯定会出问题,因为这些情况除非wizard对这个npc强制做了区域限制,否则npc随即走动肯定会走出你设定区域的。这时候我觉得还是有迷宫遍历比较好一点,你选定一个方向优先级,按照一个方向一直走,走到底再向上递归找次优先方向,一直遍历完所有优先级就完成整个走动,迷宫最好先过滤特殊处理。对npc确定考虑还是用多步触发来确定,不要单步触发延时确定,这样子效率应该会比较好。
不过个人对以上两个想法的算法支撑度要求比较高。仅仅抛砖引玉

[ 本帖最后由 seagate 于 2010-1-5 03:07 PM 编辑 ]
页: [1] 2
查看完整版本: 我的遍历办法[zmud 721]