遍历,又见遍历!
先传个框架思路,基本思路同http://bbs.mymud.com/viewthread.php?tid=40034&highlight=%CB%D1%CB%F7
略有删改
[ 本帖最后由 zmeng 于 2009-8-24 12:14 PM 编辑 ] 解释如下:
遍历深度 @temp 默认 5
步速@wait 默认 1000
开始遍历:
当前深度 #var deep 0;
行走方向 #var temp_path {}
遍历路径 #var path {}
触发机器人: #t+ bianli
look
1、判断是不是出发点:@当前深度=0 @deep=0
1.1 是 执行2
1.2 否 执行3
2、判断是否刚开始:@行走方向的长度=0 %len(@temp_path)=0
2.1 是 执行 把第一个出口赋值给行走方向 temp_path=%item(@location,1)
增加一条行走路径 #var path {@temp_path}
当前深度增加1 #var deep 1
2.2 否 执行 4.1
3、只有一个出口或达到遍历深度 %numitems(@exit)=1 or @当前深度=@设计深度 %numitems(@exit)=1 or @deep=@temp
3.1 是 执行 把行走方向反向 temp_path=#back(@temp_path)
删除最后一条行走路径 #var path %delnitem(@path,%numitems(@path))
当前深度减少1 #add deep -1
3.2 否 执行 4.2
4、是否还有没走过的出口
4.1 在出发点:%反向(@行走方向)的位置在出口的最后
条件 temp_path=#back(@temp_path)
#var i 1
#while (%item(@exit,@i)<>@temp_path) {#ADD i 1}
#if @i=%numitems(@exit)
是 执行 遍历结束 #var temp_path over
否 执行 还有某个方向没去过下一个出口位置 #add i 1
赋值下个出口给方向 #var temp_path %item(@exit,@i)
增加一条行走路径 #var path {@temp_path}
当前深度增加1 #var deep 1
4.2 不是出发点:下个出口是不是第一次来的出口
条件temp_path=#back(@temp_path)
#var i 1
#while (%item(@exit,@i)<>@temp_path) {#ADD i 1}
#if @i=%numitems(@exit)
是 执行 赋值 第一个 出口给方向 #var temp_path %item(@exit,1)
判断是不是相符 #if @temp_path=#back(%item(@path,@deep))
是 执行 #var temp_path %item(@exit,1)
#var path %delnitem(@path,%numitems(@path))
#add deep -1
否 执行 #var temp_path %item(@exit,1)
#VAR path %addItem(@temp_path,@path)
#add deep 1
否 执行 赋值 下一个 出口给方向 #add i 1
#var temp_path %item(@exit,@i)
判断是不是相符 #if @temp_path=#back(%item(@path,@deep))
是 执行 #var temp_path %item(@exit,@i)
#var path %delnitem(@path,%numitems(@path))
#add deep -1
否 执行 #var temp_path %item(@exit,@i)
#VAR path %addItem(@temp_path,@path)
#add deep 1
#if @temp_path<>over
是 执行 #wa @wait
#exec @temp_path
否 执行 #var tenp_path {}
#var path {}
#t- bianli
#say 遍历结束
[ 本帖最后由 zmeng 于 2009-8-24 11:46 AM 编辑 ] 总程序:
#tri 出口是(*)
#var exit %replace( "%1", "、", "|")
#var exit %replace( @exit, " 和 ", "|")
#var exit %trim( @exit)
#if @deep=0 {
#if %len(@temp_path)=0 {
temp_path=%item( @exit, 1)
#var path {@temp_path}
#var deep 1
} {
temp_path=@back(@temp_path)
#var i 1
#while (%item( @exit, @i)<>@temp_path) {#ADD i 1}
#if @i=%numitems( @exit) {#var temp_path over} {
#add i 1
#var temp_path %item( @exit, @i)
#var path {@temp_path}
#var deep 1
}
}
} {
#if (%numitems( @exit)=1 or @deep=@temp) {
temp_path=@back(@temp_path)
#var path %delnitem( @path, %numitems( @path))
#add deep -1
} {
temp_path=@back(@temp_path)
#var i 1
#while (%item( @exit, @i)<>@temp_path) {#ADD i 1}
#if @i=%numitems( @exit) {
#var temp_path %item( @exit, 1)
#if @temp_path=@back(%item(@path,@deep)) {
#var temp_path %item( @exit, 1)
#var path %delnitem( @path, %numitems( @path))
#add deep -1
} {
#var temp_path %item( @exit, 1)
#VAR path %addItem( @temp_path, @path)
#add deep 1
}
} {
#add i 1
#var temp_path %item( @exit, @i)
#if @temp_path=@back(%item(@path,@deep)) {
#var temp_path %item( @exit, @i)
#var path %delnitem( @path, %numitems( @path))
#add deep -1
} {
#var temp_path %item( @exit, @i)
#VAR path %addItem( @temp_path, @path)
#add deep 1
}
}
}
}
#if @temp_path<>over {
#wa @wait
#exec @temp_path
} {
#var tenp_path {}
#var path {}
#t- bianli
#say 遍历结束
}
//为了便于阅读,暂时按此编写,取用是需自己编辑{}
//#back指将一个方向返回,详见糖果的Zmud机器人制作--基础知识,技巧以及实例讲解 第11章。
//
我理解是这样的:
逆向返回:
#var fangxiang {east|southeast|south|southwest|west|northwest|north|northeast|eastup|southup|westup|northup|eastdown|southdown|westdown|northdown|up|dowm|enter|out}
#var fangxiangb {west|northwest|north|northeast|east|southeast|south|southwest|westdown|northdown|eastdown|southdown|westup|northup|eastup|southup|down|up|out|enter}
#fun back %item(@fangxiangb,%ismember(%1,@fangxiang))
//没有考虑陷阱,迷阵的处理办法。请高手指点怎么处理。
//本程序没有经过试验,具体能不能运行还是未知数,只是发出来探讨。思路取自网络,本人紧做分析。
//声明:
//1.本人不识字,以上内容文字均看不懂是什么意思。
//2.表述之事与本人无关,只是本着“见贴回帖、利人利己”的原则繁荣网络。
//3. 本人在此留言均为网络上复制,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能。并不代表本人局部或全部同意、支持或者反对帖子内容观点。
//4.人生有风险,入世需谨慎。本贴不暗示、鼓励、支持或映射读者作出生活方式、工作态度、婚姻交友、子女教育的积极或消极判断。
//5. 如本人留言违反国家有关法律,请网络管理员及时删除本贴。
//6. 因删贴不及时所产生的任何法律(包括宪法,加法、减法、乘法、除法、剑法、拳法、脚法、民法,刑法,书法,公检法,基本法,劳动法,婚姻法,
//输入法,没办法,国际法,今日说法,吸星大法,与台湾关系法及文中涉及或可能涉及以及未涉及之法,各地治安管理条例)纠纷或责任本人概不负责。
//7. 本人谢绝任何跨省追捕行为,如有需要请直接联系版主、网络管理员或法人代表。
//8. 此声明最终解释权归本人所有
[ 本帖最后由 zmeng 于 2009-8-24 03:42 PM 编辑 ] 沙发~yct10
[ 本帖最后由 lanwfy 于 2009-8-24 12:40 PM 编辑 ] 欢迎大家提意见,呵呵,如果用这个做慕容如何?? zmeng大神啊,学那么快,我都还没开始学…… 慕容有难度,因为叛徒会自己走路,只要走到你遍历过的房间,就会导致找不到 这个问题确实存在,如果遍历2次,同样存在这个问题,而且效率明显降低。只要遍历不到,放弃也就放弃了。
下面需要做的就是总结慕容叛徒的区域,然后用前辈的路径到达山门,直接开始遍历。
如果深度设为20的话,是不是整个门派就都遍历了,嘎嘎。 我的第一个精华啊,哈哈,谢谢icer
这也是我的第一贴矿泉水贴,哈哈。
以前发的都是纯净水。嘎嘎 至少,峨眉深度20不够,全真也不够,少林也不够
快速行走,走路不停,就容易找到叛徒,然后记录地点,在过去以那里为中心小遍历,应该成功率高点