greney 发表于 2009-5-11 14:33:42

zmud721 map中定位的思路与公式

目前做到得是 房间名+描述+房间出口 这三种定位方式
不足之处 还请指教
例如
蛇骨塔 -
    蛇骨塔位于大理城内,建在点苍山斜阳峰东坡。相传洱海有妖蛇名“薄劫”,
其尾塞海口,洪水泛滥,有勇士段赤城只身入洱海与妖蛇同归于尽。后人建塔以
震水势,用蛇骨灰塔,水势自息。这是一座密椽式方形砖塔。
   这里明显的出口是 east 和 west。
通过一些#tr的触发
得到roomname=蛇骨塔
roomdisc=蛇骨塔位于大理城内,建在点苍山斜阳峰东坡。相传洱海有妖蛇名“薄劫”,
其尾塞海口,洪水泛滥,有勇士段赤城只身入洱海与妖蛇同归于尽。后人建塔以
震水势,用蛇骨灰塔,水势自息。这是一座密椽式方形砖塔。
roomexit=east|west
test=2
第一步房间名的判断
rlist=%mapquery(name='@roomname')
这里表示得出地图里房间名为 蛇骨塔 的房间号
#if %numitems( @rlist)=1 {#te @rlist}
这里表示如果变量@rlist里只有一个数值 就表示房间名在整个地图里是唯一的 就可以定位了
如果不是唯一的下面就开始进行房间描述的判断

#fo @rlist {#if %pos( @roomdesc, %roomdesc( %i)) {#addi num2 %i}}
#wa 500
#if %numitems( @num2)=1 {
    #te @num2
    }
这里表示正在判断当前变量@roomdesc里的房间秒速是否和@rlist里房间号的描述一样
有一样的就把房间号变量到@num2里 最后延时一下 得出如果@num2里只有一个数值 描述定位成功
如果不是唯一的下面就开始进行房间出口的判断
在开始判断之前 说一下需要转换的数值
把east|west|south|noth这些的方向 全部转换简写格式 e|w|s|n 这样
上面的roomexit=east|west变成roomexit=e|w
test=2表示当前房间的出口数量 3就是3个出口 以此类推
#fo @rlist {#if %numitems( %roomexit( %i))=@test {#addi xww %i}}
这里表示@rlist里的所列房间号的出口数值是否等于@test里的数值
匹配的就加入到@xww里去 进行下步计算
待续。。。。。。。。。。。

picewolf 发表于 2009-5-11 15:53:25

这样工作量是不是有点太大了- -

greney 发表于 2009-5-11 16:00:16

一劳永逸撒

picewolf 发表于 2009-5-11 18:16:28

也是,我决定为了防止全自动机器人,每隔几天随机修改地图描述,yct10 yct10

maper 发表于 2009-5-11 18:45:37

原帖由 picewolf 于 2009-5-11 06:16 PM 发表 http://pkuxkx.com/forum/images/common/back.gif
也是,我决定为了防止全自动机器人,每隔几天随机修改地图描述,yct10 yct10
这样子task任务的奖励就要翻好几番了,哪能天天背描述呢!ttk_13

也可以通过相邻房间的名字来确定该房间,这样只要不改地图结构都是可行的,嘿嘿!

greney 发表于 2009-5-12 09:20:13

如果更改了地图结构 那只能随机走出一步在定位了
或者使用更高级的.net编写的可自动生成地图的程序喽

chatter 发表于 2009-5-12 10:03:55

wiz要哭了。。。。你们太bt了~

killunix 发表于 2009-9-28 14:40:12

这个太复杂了,还是简单点好
页: [1]
查看完整版本: zmud721 map中定位的思路与公式