lua尾调用实践-room游戏

lua尾调用实践

简述:数据驱动+尾调用 实现的一个找房子游戏
笔记: table构造时,表内元素仅取当前外部值(即不会随外部值改变而改变);如果想存储一个函数,函数应已被定义。

--@author blanc 2018/3/27

local move_key = {
    a = "left",
    d = "right",
    s = "down",
    w = "up",
}
----------------------------------------
--map
--
--
--              room2--room3
--                |      |    
--              room1--room4
--                       |
--                     room5
--
-----------------------------------------
local func_t = {} --函数列表
local player = {} --玩家
player.runTo = function (room)
    print("i am run to " ..(room or "em...."))
end

local room_about = {
    room1 = {
            map = {right = "room4", up = "room2"},
        },

    room2 = {
            map = {right = "room3", down = "room1"},
        },

    room3 = {
            map = {left = "room2", down = "room4"},
        },

    room4 = {
            map = {left = "room1", down = "room5", up = "room3"},
        },

    room5 = {
            map = {up = "room4",},
        },
}

local step_num = 0
local key_list = {"a", "s", "w", "d", "w", "d", "a", "s", "w", "d", "a", "d", "d", "w", "d", "d", "s", "a", "w", "d"}
local function getRoomNameByKey(form_room)

    player.runTo(form_room)

    --获得下一步
    step_num = step_num + 1
    if step_num > #key_list then return "gameOver" end
    key = key_list[step_num]


    -- print(debug.traceback())
    local conect_room = room_about[form_room].map[move_key[key]]
    if nil == func_t[conect_room] then
        return form_room
    else
        return conect_room
    end
end

func_t.gameOver = function ()
    return print("is_end")  
end

local function main()
    --创建5个房间
    for i = 1, 5 do
        func_t["room" .. i] = function ()
            return func_t[getRoomNameByKey("room" .. i)]()
        end
    end
    func_t.room1()
end

main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值