Lua情节链设计2

 
--[[
 file name .    GameList.lua
 author  .      Clark/陈泽丹
 created .      8.30.2011
 purpose .      双向队列
--]]


module("GameList", package.seeall)

--双向队列
function list_newList()
    local m_first = 1
    local m_last = 0
    local m_list = {}
    local m_listManager = {}
    function m_listManager.pushFront(_tempObj)
        m_first = m_first - 1
        m_list[m_first] = _tempObj
    end
    function m_listManager.pushBack(_tempObj)
        m_last = m_last + 1
        m_list[m_last] = _tempObj
    end
    function m_listManager.temp_getFront()
        if m_listManager.bool_isEmpty() then
            return nil
        else
            local val = m_list[m_first]
            return val
        end
    end
    function m_listManager.temp_getBack()
        if m_listManager.bool_isEmpty() then
            return nil
        else
            local val = m_list[m_last]
            return val
        end
    end
    function m_listManager.popFront()
        m_list[m_first] = nil
        m_first = m_first + 1
    end
    function m_listManager.popBack()
        m_list[m_last] = nil
        m_last = m_last - 1
    end
    function m_listManager.clear()
        while false == m_listManager.bool_isEmpty() do
        m_listManager.popFront()
    end
    end
    function m_listManager.bool_isEmpty()
        if m_first > m_last then
            m_first = 1
            m_last = 0
            return true
        else
            return false
        end
    end
    function m_listManager.d_getSize()
        if  m_listManager.bool_isEmpty() then
            return 0
        else
            return m_last - m_first + 1
        end
    end
    return m_listManager
end
--[[
 file name :    GameEvents.lua
 author  :      Clark/陈泽丹
 created :      8:30:2011
 purpose :      故事情节线
--]]

module("GameEvents", package.seeall)
pakList = require "GameList"
pakGameCallBack = require "GameCallBack"



g_fun = nil
--死亡回调函数
function onDieCallBack()
    g_fun(1)
end



--事件流
function events_newEvents()
	local TYPE = {FUN_TYPE = 0, TGR_TYPE = 1}
	local m_funs = pakList.list_newList()          --隐藏数据
	local m_events = {}                               --公开数据
	--添加事件
	function m_events.pushFun(_fun)
		local tFun = {fun = _fun, fun_type = TYPE.FUN_TYPE}
		m_funs.pushBack(tFun)
	end
	function m_events.pushTgr(_fun)
		function setTgr()
			print("setTgr ")
			g_fun = onTgr
		end
		function onTgr(_callbackPar)
			print("onTgr " .. _callbackPar)
			g_fun = nil
			_fun(_callbackPar)
			m_events.doEvents()
		end
		local tFun = {fun = setTgr, fun_type = TYPE.TGR_TYPE}
		m_funs.pushBack(tFun)
	end
	--清空事件
	function m_events.clear()
		print("m_events.clear")
		m_funs.clear()
	end
	--开始剧情
	function m_events.doEvents()
		while false == m_events.bool_isEmpty() do
			local tFun = m_funs.temp_getFront()
			m_funs.popFront()
			tFun.fun()
			tFun.fun = nil
			if TYPE.FUN_TYPE ~= tFun.fun_type then
				tFun = nil
				return
			end
		end
		if m_events.bool_isEmpty() then
			m_events.clear()
		end
	end
	--是否还有事件
	function m_events.bool_isEmpty()
		return m_funs.bool_isEmpty()
	end
	return m_events                   --返回公开数据
end

 

 

--[[
 file name :    GameMain.lua
 author  :      Clark/陈泽丹
 created :      8:30:2011
 purpose :      客户端程序
--]]


module("GameMain", package.seeall)
pakGameEvents = require "GameEvents"



------------------------ 客户端 -----------------------------
function map_newMap()
    local m_map = {}
	local m_ETs = pakGameEvents.events_newEvents()

	function m_map.Fun1()
		print("1")
	end

	function m_map.Fun2()
		print("2")
	end

	function m_map.Fun3()
		print("3")
	end

    --初始化
    function m_map.initScene()
        print("---------- initScene ----------")
		m_ETs.pushFun(m_map.Fun1)
		m_ETs.pushTgr(m_map.Fun2)
		m_ETs.pushFun(m_map.Fun3)
		m_ETs.pushTgr(m_map.Fun2)
		m_ETs.doEvents()
		pakGameEvents.onDieCallBack()
		pakGameEvents.onDieCallBack()
    end

    --结束
    function m_map.uninitScene()
        print("---------- uninitScene ----------")
    end


    return m_map
end


function main()
    m_map  = map_newMap(007)
    m_map.initScene()
end

main()
-------------------------------------------------------------


结果:

 

>lua -e "io.stdout:setvbuf 'no'" "GameMain.lua"
---------- initScene ----------
1
setTgr
onTgr 1
2
3
setTgr
onTgr 1
2
m_events.clear
>Exit code: 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值