求解析path_bianli_lib.lua
yct43谁帮我翻译下这个文件,主要是算法有点看不懂。。。会用,但是功能太少了,我想自己加点东西进去 path_dir_bianli_table={["path_dl"]="wtlkwenssnjnwnsenhehlnnsjkewlhswlseetjhnehkesklgwwsgeensstgsnwenwswweeeewnssnwsweeudwswswenntwnsegseenssnwspllhnhntgslshiswwntnswuwtgeetgetgwwdegseeselelhwhw6n",
}
function is_number(c_name)
local x,y=string.find(c_name,".*");
for x=1,y do
local b=string.byte(string.sub(c_name,x,x));--将截取到的字符串转换为整数
if ((b<48) or (b>57)) then
return false;
end
end
return true;
end
temp_slow_path_table={};
function fill_slow_path(path_name)
local i,v = string.find(path_dir_bianli_table,".*");--匹配表中的字符串,i为字符串的起始位置,v为结束位置
while i<=vdo
if is_number(string.sub(path_dir_bianli_table,i,i+1)) then
--如果is_number()为true,但括号里的内容有点不理解,怎么成为is_number的参数
for j=1,string.sub(path_dir_bianli_table,i,i+1) do--string.sub返回的是什么值?
if nil~= path_dir_table, i+2, i+2)] then
table.insert(temp_slow_path_table, path_dir_table, i+2, i+2)].cmd);
--将当前获取的一个字符串所表示的cmd值存入temp_slow_path_table中
else
table.insert(temp_slow_path_table, string.sub(path_dir_bianli_table, i+2, i+2));
--将当前获取的一个字符串存入temp_slow_path_table
end
end
i=i+3;
elseif is_number(string.sub(path_dir_bianli_table, i, i)) then
for j=1,string.sub(path_dir_bianli_table,i,i) do
if nil~= path_dir_table,i+1,i+1)] then
table.insert(temp_slow_path_table, path_dir_table,i+1,i+1)].cmd);
else
table.insert(temp_slow_path_table, string.sub(path_dir_bianli_table,i+1,i+1));
end
end
i=i+2;
else
if nil~= path_dir_table, i, i)] then
table.insert(temp_slow_path_table, path_dir_table, i, i)].cmd);
else
table.insert(temp_slow_path_table, string.sub(path_dir_bianli_table, i, i));
end
i=i+1;
end
end
end
function slow_path(path_name, time_wait)
if nil~= path_dir_bianli_table then
fill_slow_path(path_name);
slow_path_thread=coroutine.create(function ()--coroutine.create创建一个协同程序
for i,v in ipairs(temp_slow_path_table) do--遍历表
world.DoAfterSpecial(time_wait, "slow_auto_next();",12);--n秒之后继续执行slow_path_thread
coroutine.yield();--程序被挂起,暂停运行
world.Send(v);
end
end);
coroutine.resume(slow_path_thread);--从yeild处开始继续执行else
Note("你有这个搜索路径么");end endfunction slow_auto_next() if slow_state==0 then coroutine.resume(slow_path_thread); endend
[ 本帖最后由 aiccybb 于 2011-10-18 04:10 PM 编辑 ] sigh。。。yct42来个人交流下吧。。。这是好东西啊
回复 2楼 的帖子
这是一个线性遍历库,它的作用是根据zmud录制的路线,按照一定的路线遍历最后返回出发点。1、这个库是一个早期的库,现在要是用估计得修改不少内容。但是确实是一个不错的学习材料(早期的城际互联就是参考这个代码)。
2、它的暂停机制有时候会失灵。
3、这里有zmud录制的遍历路线转换为一般路线函数,可是缺少一般的zmud路线转换为遍历路线的函数。即遍历路线的形成必须进入zmud中自己录制才可以。 我的明教新手机器人就用了这个,不过发现有个bug,有个table在赋值的时候没有初始化以下,会造成循环遍历。 城际互联脚本模式是提供这种慢速行走的。
比如你有个zmud的路线:#3 e;n;ne;w;nu;nd;e;se;sw
可以定义path="#3 e;n;ne;w;nu;nd;e;se;sw"
然后wait_step=-1 do_walkgo(path,1)即是以每1秒走一步的方式,慢速行走。
[ 本帖最后由 littleknife 于 2011-10-18 10:16 AM 编辑 ] 原帖由 pizzagoo 于 2011-10-18 08:32 发表 http://pkuxkx.com/forum/images/common/back.gif
我的明教新手机器人就用了这个,不过发现有个bug,有个table在赋值的时候没有初始化以下,会造成循环遍历。
对,初始化是个问题。。。 原帖由 littleknife 于 2011-10-18 10:10 发表 http://pkuxkx.com/forum/images/common/back.gif城际互联脚本模式是提供这种慢速行走的。比如你有个zmud的路线:#3 e;n;ne;w;nu;nd;e;se;sw可以定义path="#3 e;n;ne;w;nu;nd;e;se;sw"然后wait_step=-1 do_walkgo(path,1)即是以每1秒走一步的方式,慢速行走。 我去看看do_walkgo()函数,其实我是想加入个后退一步的功能。这个lua路径主要是用到了一个模式匹配函数,我去lua程序设计里面找到了。暂时还不会用。。。
[ 本帖最后由 aiccybb 于 2011-10-18 11:11 AM 编辑 ] 原帖由 pizzagoo 于 2011-10-18 08:32 发表 http://pkuxkx.com/forum/images/common/back.gif
我的明教新手机器人就用了这个,不过发现有个bug,有个table在赋值的时候没有初始化以下,会造成循环遍历。 temp_slow_path_table={}
要把这个表的内容清空yct13
用value=table.remove(temp_slow_path_table)来清除。。
不知道有没有弄错yct27
页:
[1]