关于在地图文件里部分解决迷宫问题的思路
目前拿到的mush机器,是专门做了一个lua,来控制迷宫路径的由于看起来很难做,考虑直接在map里实现
举例为天龙寺的松树林,大家看看怎么样?
= {
area = "天龙寺",
descriptions = {
= "这里是一片茂密的松树林,松树高大,枝叶茂盛,你一走进来差",
= "点便迷失了方向。这里灌木丛生,路都给挡住了。",
},
exits = {
east = {
cmd = "e",
gto = 1050,
tomaze = "天龙寺松树林1",
},
north = {
cmd = "n",
gto = 1050,
tomaze = "天龙寺松树林1",
},
south = {
cmd = "s",
gto = 1050,
tomaze = "天龙寺松树林1",
},
west = {
cmd = "w",
gto = 1050,
tomaze = "天龙寺松树林1",
},
mazeout = {
cmd = "s;s;s;s;s;s;s;s;s;s",
trytimes = 3,
okmsg = "你筋疲力尽,终于走出了松林。",
refind = 1,
gto = 1044,
stop = 1,
},
},
location = {
= "松树林",
= "|",
= "松树林----松树林----松树林",
= "|",
= "松树林",
},
maze = "天龙寺松树林1",
name = "松树林",
walk = {
= "s",
= "s",
= "e",
= "e",
= "s",
},
},
北大侠客行MUD,中国最好的MUD 简单迷宫可以这样做。
不然还是加入一个特殊walk模式比较好。 这么做的话,你也许会是自找麻烦。。ttk_38 简单迷宫可以这样做。
不然还是加入一个特殊walk模式比较好。
jarlyyn 发表于 2015-4-8 06:32 PM http://pkuxkx.com/forum/images/common/back.gif
请问特殊walk模式是指什么意思?不太懂
目前一些比较特殊的迷宫,比如武当的后山小径,貌似没法用这个表示,其他比如各种树林松树林,貌似都可以
其实迷宫就主要两个目的
1.走进去或走出来,反正是到某地的路径
2.在迷宫内散步,寻找npc
我的理解,这两点做到了,应该就算可以了吧? 回复 3# littleknife
不是很理解,请讲解一下吧
新人,从0学的mush,从0学的lua
多谢 迷宫的处理很随意,有时候wiz对迷宫会随机生成很多房间。但是若是采用录制地图的方式来解决,你会面临很很多房间无法录制(因为都是重复房间)。所以根本的问题是要首先解决,你为什么要录制地图,那这个东西做什么?地图的作用我的理解是:定位和寻路,若是单纯的为了录制地图而录制就显得徒劳了。也许你录制很久却发现没什么用或根本用不了。岂不是很亏?呵呵。所以一般遇到迷宫或者形如坐船,坐车、杀阻挡npc等等都采用匹配特殊函数的方式来解决这类问题。比如,你走到某地1,然后需要经过迷宫到达某地2,那么,处理思路就是:到达某地1后要是判断为需要通过迷宫,就单独去执行迷宫函数,然后函数返回正确后就到达了某地2 了。这就是特殊处理的意思。。希望对楼主有所借鉴。。 请问特殊walk模式是指什么意思?不太懂
目前一些比较特殊的迷宫,比如武当的后山小径,貌似没法用这 ...
ltblue 发表于 2015-4-8 11:40 PM http://pkuxkx.com/forum/images/common/back.gif
一般来说,地图只负责获取两点之间的路径。但要注意一点,取回来的并不是一个可以直接往mud里推的数组,而是一个标识给机器人的命令队列。
最简单的来说,比如乘船之类,需要等到了目的地才能进行下一步操作。
那么等到目的地,就是一个特殊的walk模式。
比如某个出口有人守护,需要杀了守护才能继续。
那么,这也是一个特殊的walk模式。 回复 6# littleknife
非常感谢!
我个人认为哈,你的思路是面向对象的,我的想法是面向过程的
对我来说,每个节点里只有“属性”,对你来说,还有“方法”。
可惜我对面向对象很不熟,lua对面向对象的支持又不好,所以我的办法是:
在属性中标注需要处理的内容,在运行时,对需要特殊处理的内容进行解码,把相似的情况进行统一的解码,然后解决问题。
一会我把整个迷宫的相关内容都搬上来,详细的说说吧,我觉得跟你的不冲突 目前处理的迷宫有:
兰州城沙漠、终南山黑林、华山村菜地、长安城长街、长安城柏树林、襄阳郊外树林、天龙寺松树林等
由于地图还没过江过河,所以其他迷宫基本没录,没什么时间
还是用天龙寺的松树林举例吧 天龙寺的松树林,从代码上看,主要有2类共6个文件,第一类我命名为天龙寺松树林1,节点代码如1楼,再贴一遍吧
= {
area = "天龙寺",
descriptions = {
= "这里是一片茂密的松树林,松树高大,枝叶茂盛,你一走进来差",
= "点便迷失了方向。这里灌木丛生,路都给挡住了。",
},
exits = {
east = {
cmd = "e",
gto = 1050,
tomaze = "天龙寺松树林1",
},
north = {
cmd = "n",
gto = 1050,
tomaze = "天龙寺松树林1",
},
south = {
cmd = "s",
gto = 1050,
tomaze = "天龙寺松树林1",
},
west = {
cmd = "w",
gto = 1050,
tomaze = "天龙寺松树林1",
},
mazeout = {
cmd = "s;s;s;s;s;s;s;s;s;s",
trytimes = 3,
okmsg = "你筋疲力尽,终于走出了松林。",
refind = 1,
gto = 1044,
stop = 1,
},
},
location = {
= "松树林",
= "|",
= "松树林----松树林----松树林",
= "|",
= "松树林",
},
maze = "天龙寺松树林1",
name = "松树林",
walk = {
= "s",
= "s",
= "e",
= "e",
= "s",
},
},
下面是天龙寺松树林2,我的节点代码如下:
= {
area = "天龙寺",
descriptions = {
= "这里是一片茂密的松树林,松树高大,枝叶茂盛,你一走进来差",
= "点便迷失了方向。一条长廊由西向东通往松林深处。",
},
exits = {
east = {
cmd = "e",
gto = 1052,
tomaze = "天龙寺松树林2",
},
north = {
cmd = "n",
gto = 1052,
tomaze = "天龙寺松树林2",
},
south = {
cmd = "s",
gto = 1052,
tomaze = "天龙寺松树林2",
},
west = {
cmd = "w",
gto = 1052,
tomaze = "天龙寺松树林2",
},
mazeout = {
cmd = "w;n;w",
gto = 1050,
tomaze = "天龙寺松树林1",
},
},
walk = {
= "n",
},
location = {
= "松树林",
= "|",
= "松树林----松树林----松树林",
= "|",
= "松树林",
},
maze = "天龙寺松树林2",
name = "松树林",
},