|
本帖最后由 kaillera@tj 于 2019-4-26 16:54 编辑
说明:该走法完全借鉴了ZMUD版本的思路,相当于把ZMUD版本的内容翻译为MUSH版,原版思路可见下帖:
http://www.sjever.net/bbs/forum.php?mod=viewthread&tid=125664
- local function hasway_meizhuang(dx)
- if dx=="south" then
- dx="west"
- elseif dx=="west" then
- dx="north"
- elseif dx=="north" then
- dx="east"
- else
- dx="south"
- end
- return dx
- end
- local function noway_meizhuang(dx)
- if dx=="north" then
- dx="west"
- elseif dx=="west" then
- dx="south"
- elseif dx=="south" then
- dx="east"
- else
- dx="north"
- end
- return dx
- end
- function out_meizhuang(dx)--主函数
- if dx==nil then
- dx="north" --默认第一步,north
- end
- world.Send(dx)
- wait.make(function()
- local l,w=wait.regexp("^(> |)这个方向没有出路。$|^(> |)梅林 - .*$|^(> |)小路 - .*$|^(> |)青石板大路 - .*$",5)--创建临时触发器
- if l==nil then
- out_meizhuang()--l==nil 相当于函数没有正常执行,这里再执行一次
- return
- end
- if string.find(l,"这个方向没有出路") then --第一种情况:没有出路,调用noway_meizhuang()来确定下一步方向
- print("失败")
- local dx1=noway_meizhuang(dx)
- print(dx1)
- local f=function()--加壳
- out_meizhuang(dx1)--递归,下同
- end
- f_wait(f,0.3)--f_wait(f, delay)相当于在延迟delay之后执行f()中的内容
- return
- end
- if string.find(l,"梅林") then
- print("成功")
- local dx2=hasway_meizhuang(dx)--第二种情况:有出路,调用hasway_meizhuang()来确定下一步方向
- print(dx2)
- local f=function()
- out_meizhuang(dx2)
- end
- f_wait(f,0.3)
- return
- end
- if string.find(l,"小路") then --递归结束条件:成功走出梅林
- finish() --回调函数,用于处理行走结束之后的动作
- return
- end
- if string.find(l,"青石板大路") then
- out_meizhuang()
- return
- end
- end)--end wait
- end--end func
复制代码 |
|