hijacker 发表于 2013-3-31 16:41:22

【梦话连篇】Tips:About Draw Map

本帖最后由 hijacker 于 2013-3-31 05:02 PM 编辑

论坛上有个mush版的GPS,自带非图形界面的画地图功能,功能已经非常强大了,但自动化程度还不够高,表现在处理一模一样(同名同描述)的两个房间时无力。
提供一个在画地图模式下,处理非随机迷宫的同名同描述房间的思路,需要用到两个ID,A是主控ID,B起到路标作用。流程图如下:



选择出口方向、保存房间之间的连接以及B的寻路这三个环节略了,在我刚才提到的GPS里有写到。

再顺手贴一个简单的数据结构——栈的lua定义,也许有人会用到:-)stack = {
        new = function()
                local _S = {}
                setmetatable(_S, {__index = stack})
                return _S
        end,

}

function stack:push(elem)
        table.insert(self,elem)
        print(elem .. "入栈")
end

function stack:pop()
        if #self == 0 then
                print("栈已空!")
                return nil
        end
        local top = self[#self]
        table.remove(self, #self)
        print(top, "出栈")
        return top
end

--用法实例:
local roomStack = stack.new()
roomStack:push(1)
roomStack:push(2)
local top = roomStack:pop()
local top = roomStack:pop()
local top = roomStack:pop()欢迎指正。

北大侠客行MUD,中国最好的MUD

qdz 发表于 2013-3-31 18:12:03

嘿嘿。
yct49俺再学都学不会。。

catx 发表于 2013-3-31 22:29:39

看不懂{:8_292:}

ferdinand 发表于 2013-4-12 17:35:10

也就是你在做比较,如果两个房间描述一样,你就看看这两个房间所连接的房间描述是否一样,如果还一样,你就认为他们是同一个房间,如果不一样就说明他们是两个不同的房间? 不过pkxkx这样搞很恶心啊,很多mud都会输出一个房间id,这样大家都方便的比较两个房间是否是同一个房间了=>比较id就行

ferdinand 发表于 2013-4-12 17:38:42

不过这个方法对迷宫之类的还是有局限性啊,是不是需要一个flag指示某一部分是迷宫,这样不会吧mapper的逻辑完全搞乱

hijacker 发表于 2013-4-15 22:09:00

回复 5# ferdinand


    我不是那个意思……比如你走到了房间y,你发现已经画好的房间x和当前房间y一模一样,出口房间也完全相同,这时你就让你的大米去x,如果大米走到x后和你在一个房间,说明x和y是一个房间。我前面也说了,这种方法只适用于画非随机迷宫的地图,也就是说相邻房间u和v,u->v和v->u的路径是完全反向的这种情况。随机迷宫直接无视。
页: [1]
查看完整版本: 【梦话连篇】Tips:About Draw Map