北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 13190|回复: 29

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

[复制链接]
发表于 2015-4-8 17:42:31 | 显示全部楼层 |阅读模式
目前拿到的mush机器,是专门做了一个lua,来控制迷宫路径的
由于看起来很难做,考虑直接在map里实现
举例为天龙寺的松树林,大家看看怎么样?
    [1050] = {
        area = "天龙寺",
        descriptions = {
            [1] = "这里是一片茂密的松树林,松树高大,枝叶茂盛,你一走进来差",
            [2] = "点便迷失了方向。这里灌木丛生,路都给挡住了。",
        },
        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 = {
            [1] = "松树林",
            [2] = "|",
            [3] = "松树林----松树林----松树林",
            [4] = "|",
            [5] = "松树林",
        },
        maze = "天龙寺松树林1",
        name = "松树林",
                walk = {
                        [1] = "s",
                        [2] = "s",
                        [3] = "e",
                        [4] = "e",
                        [5] = "s",
                },
    },

北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-4-8 18:32:17 | 显示全部楼层
简单迷宫可以这样做。
不然还是加入一个特殊walk模式比较好。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-4-8 18:36:51 | 显示全部楼层
这么做的话,你也许会是自找麻烦。。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-4-8 23:40:37 | 显示全部楼层
简单迷宫可以这样做。
不然还是加入一个特殊walk模式比较好。
jarlyyn 发表于 2015-4-8 06:32 PM



请问特殊walk模式是指什么意思?不太懂
目前一些比较特殊的迷宫,比如武当的后山小径,貌似没法用这个表示,其他比如各种树林松树林,貌似都可以
其实迷宫就主要两个目的
1.走进去或走出来,反正是到某地的路径
2.在迷宫内散步,寻找npc
我的理解,这两点做到了,应该就算可以了吧?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-4-8 23:41:06 | 显示全部楼层
回复 3# littleknife


不是很理解,请讲解一下吧
新人,从0学的mush,从0学的lua
多谢
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-4-9 10:19:05 | 显示全部楼层
迷宫的处理很随意,有时候wiz对迷宫会随机生成很多房间。但是若是采用录制地图的方式来解决,你会面临很很多房间无法录制(因为都是重复房间)。所以根本的问题是要首先解决,你为什么要录制地图,那这个东西做什么?地图的作用我的理解是:定位和寻路,若是单纯的为了录制地图而录制就显得徒劳了。也许你录制很久却发现没什么用或根本用不了。岂不是很亏?呵呵。所以一般遇到迷宫或者形如坐船,坐车、杀阻挡npc等等都采用匹配特殊函数的方式来解决这类问题。比如,你走到某地1,然后需要经过迷宫到达某地2,那么,处理思路就是:到达某地1后要是判断为需要通过迷宫,就单独去执行迷宫函数,然后函数返回正确后就到达了某地2 了。这就是特殊处理的意思。。希望对楼主有所借鉴。。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-4-9 10:44:18 | 显示全部楼层
请问特殊walk模式是指什么意思?不太懂
目前一些比较特殊的迷宫,比如武当的后山小径,貌似没法用这 ...
ltblue 发表于 2015-4-8 11:40 PM



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

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

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

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

那么,这也是一个特殊的walk模式。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-4-9 11:07:26 | 显示全部楼层
回复 6# littleknife


非常感谢!
我个人认为哈,你的思路是面向对象的,我的想法是面向过程的
对我来说,每个节点里只有“属性”,对你来说,还有“方法”。
可惜我对面向对象很不熟,lua对面向对象的支持又不好,所以我的办法是:
在属性中标注需要处理的内容,在运行时,对需要特殊处理的内容进行解码,把相似的情况进行统一的解码,然后解决问题。
一会我把整个迷宫的相关内容都搬上来,详细的说说吧,我觉得跟你的不冲突
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-4-9 11:09:40 | 显示全部楼层
目前处理的迷宫有:
兰州城沙漠、终南山黑林、华山村菜地、长安城长街、长安城柏树林、襄阳郊外树林、天龙寺松树林等
由于地图还没过江过河,所以其他迷宫基本没录,没什么时间
还是用天龙寺的松树林举例吧
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-4-9 11:11:17 | 显示全部楼层
天龙寺的松树林,从代码上看,主要有2类共6个文件,第一类我命名为天龙寺松树林1,节点代码如1楼,再贴一遍吧
  [1050] = {
        area = "天龙寺",
        descriptions = {
            [1] = "这里是一片茂密的松树林,松树高大,枝叶茂盛,你一走进来差",
            [2] = "点便迷失了方向。这里灌木丛生,路都给挡住了。",
        },
        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 = {
            [1] = "松树林",
            [2] = "|",
            [3] = "松树林----松树林----松树林",
            [4] = "|",
            [5] = "松树林",
        },
        maze = "天龙寺松树林1",
        name = "松树林",
                walk = {
                        [1] = "s",
                        [2] = "s",
                        [3] = "e",
                        [4] = "e",
                        [5] = "s",
                },
    },

下面是天龙寺松树林2,我的节点代码如下:
    [1052] = {
        area = "天龙寺",
        descriptions = {
            [1] = "这里是一片茂密的松树林,松树高大,枝叶茂盛,你一走进来差",
            [2] = "点便迷失了方向。一条长廊由西向东通往松林深处。",
        },
        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 = {
                        [1] = "n",
                },
        location = {
            [1] = "松树林",
            [2] = "|",
            [3] = "松树林----松树林----松树林",
            [4] = "|",
            [5] = "松树林",
        },
        maze = "天龙寺松树林2",
        name = "松树林",
    },
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-28 11:21 AM , Processed in 0.011274 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表