ltblue 发表于 2015-4-8 17:42:31

关于在地图文件里部分解决迷宫问题的思路

目前拿到的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

jarlyyn 发表于 2015-4-8 18:32:17

简单迷宫可以这样做。
不然还是加入一个特殊walk模式比较好。

littleknife 发表于 2015-4-8 18:36:51

这么做的话,你也许会是自找麻烦。。ttk_38

ltblue 发表于 2015-4-8 23:40:37

简单迷宫可以这样做。
不然还是加入一个特殊walk模式比较好。
jarlyyn 发表于 2015-4-8 06:32 PM http://pkuxkx.com/forum/images/common/back.gif


请问特殊walk模式是指什么意思?不太懂
目前一些比较特殊的迷宫,比如武当的后山小径,貌似没法用这个表示,其他比如各种树林松树林,貌似都可以
其实迷宫就主要两个目的
1.走进去或走出来,反正是到某地的路径
2.在迷宫内散步,寻找npc
我的理解,这两点做到了,应该就算可以了吧?

ltblue 发表于 2015-4-8 23:41:06

回复 3# littleknife


不是很理解,请讲解一下吧
新人,从0学的mush,从0学的lua
多谢

littleknife 发表于 2015-4-9 10:19:05

迷宫的处理很随意,有时候wiz对迷宫会随机生成很多房间。但是若是采用录制地图的方式来解决,你会面临很很多房间无法录制(因为都是重复房间)。所以根本的问题是要首先解决,你为什么要录制地图,那这个东西做什么?地图的作用我的理解是:定位和寻路,若是单纯的为了录制地图而录制就显得徒劳了。也许你录制很久却发现没什么用或根本用不了。岂不是很亏?呵呵。所以一般遇到迷宫或者形如坐船,坐车、杀阻挡npc等等都采用匹配特殊函数的方式来解决这类问题。比如,你走到某地1,然后需要经过迷宫到达某地2,那么,处理思路就是:到达某地1后要是判断为需要通过迷宫,就单独去执行迷宫函数,然后函数返回正确后就到达了某地2 了。这就是特殊处理的意思。。希望对楼主有所借鉴。。

jarlyyn 发表于 2015-4-9 10:44:18

请问特殊walk模式是指什么意思?不太懂
目前一些比较特殊的迷宫,比如武当的后山小径,貌似没法用这 ...
ltblue 发表于 2015-4-8 11:40 PM http://pkuxkx.com/forum/images/common/back.gif


一般来说,地图只负责获取两点之间的路径。但要注意一点,取回来的并不是一个可以直接往mud里推的数组,而是一个标识给机器人的命令队列。

最简单的来说,比如乘船之类,需要等到了目的地才能进行下一步操作。

那么等到目的地,就是一个特殊的walk模式。

比如某个出口有人守护,需要杀了守护才能继续。

那么,这也是一个特殊的walk模式。

ltblue 发表于 2015-4-9 11:07:26

回复 6# littleknife


非常感谢!
我个人认为哈,你的思路是面向对象的,我的想法是面向过程的
对我来说,每个节点里只有“属性”,对你来说,还有“方法”。
可惜我对面向对象很不熟,lua对面向对象的支持又不好,所以我的办法是:
在属性中标注需要处理的内容,在运行时,对需要特殊处理的内容进行解码,把相似的情况进行统一的解码,然后解决问题。
一会我把整个迷宫的相关内容都搬上来,详细的说说吧,我觉得跟你的不冲突

ltblue 发表于 2015-4-9 11:09:40

目前处理的迷宫有:
兰州城沙漠、终南山黑林、华山村菜地、长安城长街、长安城柏树林、襄阳郊外树林、天龙寺松树林等
由于地图还没过江过河,所以其他迷宫基本没录,没什么时间
还是用天龙寺的松树林举例吧

ltblue 发表于 2015-4-9 11:11:17

天龙寺的松树林,从代码上看,主要有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 = "松树林",
    },
页: [1] 2 3
查看完整版本: 关于在地图文件里部分解决迷宫问题的思路