Lua里设计情节链
来源:互联网 发布:购物网站数据库设计 编辑:程序博客网 时间:2024/05/01 07:46
--[[ file name . GameList.lua author . Clark/陈泽丹 created . 8.13.2011 purpose . 双向队列--]]module("GameList", package.seeall)--双向队列function list_newList() local first = 1 local last = 0 local list = {}local listManager = {} function listManager.pushFront(_tempObj) first = first - 1 list[first] = _tempObj end function listManager.pushBack(_tempObj) last = last + 1 list[last] = _tempObj end function listManager.temp_getFront() if listManager.bool_isEmpty() then return nil else local val = list[first] return val end end function listManager.temp_getBack() if listManager.bool_isEmpty() then return nil else local val = list[last] return val end end function listManager.popFront() list[first] = nil first = first + 1 end function listManager.popBack() list[last] = nil last = last - 1 end function listManager.clear() while false == listManager.bool_isEmpty() do listManager.popFront() end end function listManager.bool_isEmpty() if first > last thenfirst = 1last = 0 return true else return false end end function listManager.d_getSize() if listManager.bool_isEmpty() then return 0 else return last - first + 1 end end return listManagerend
-------------------------------------------------------------------------------------
--[[ file name : GameEvents.lua author : Clark/陈泽丹 created : 8:13:2011 purpose : 故事情节线--]]module("GameEvents", package.seeall)pakList = require "GameList"function manager_newEventManager()--事件流function events_newEvents(_ID)local ID = _ID or os.time()local cmdpars = pakList.list_newList() --隐藏数据local events = {} --公开数据function events.id_getID()return IDend--添加事件function events.push(_trigger, _tTgrPar, _fun, _tFunPar)local t = { trigger = _trigger, tTgrPar = _tTgrPar or {}, fun = _fun, tFunPar = _tFunPar or {}}cmdpars.pushBack(t)end--清空事件function events.clear()cmdpars.clear()end--创建事件function events.setEvent()local tVal = cmdpars.temp_getFront()if nil ~= tVal thenif nil ~= tVal.trigger thentVal.trigger(events.id_getID(), tVal.tTgrPar)endendend--处理事件function events.onEvent(tEventPar)local tEventPar = tEventPar or {}local tVal = cmdpars.temp_getFront()if nil ~= tVal thencmdpars.popFront()if nil ~= tVal.fun thentVal.fun(events.id_getID(), tVal.tFunPar, tEventPar)endendend--是否还有事件function events.bool_isEmpty()local val = cmdpars.bool_isEmpty()return valendreturn events --返回公开数据end--事件流的管理local et = {}local manager = {}function manager.events_newEvents(_ID)local event = events_newEvents(_ID)if nil ~= event thenet[event.id_getID()] = eventendreturn eventendfunction manager.events_getEvents(_ID)return et[_ID]endfunction manager.deleteEvents(_ID)et[_ID] = nilendreturn managerend
-------------------------------------------------------------------------------------
--[[ file name : GameCallBack.lua author : Clark/陈泽丹 created : 8:13:2011 purpose : 系统回调函数--]]module("GameCallBack", package.seeall)pakEvents = require "GameEvents"EVENT_MANAGER = pakEvents.manager_newEventManager()--直接跳转函数function onGotoCallBack(_tEventPar)local et = EVENT_MANAGER.events_getEvents(_tEventPar)if nil ~= et thenet.onEvent()et.setEvent()endend--死亡回调函数function onDieCallBack(_tEventPar)local et = EVENT_MANAGER.events_getEvents(_tEventPar)if nil ~= et thenet.onEvent()et.setEvent()endend
-------------------------------------------------------------------------------------
--[[ file name : GameMain.lua author : Clark/陈泽丹 created : 8:13:2011 purpose : 客户端程序--]]module("GameMain", package.seeall)pakCallBack = require "GameCallBack"------------------------ 客户端 -----------------------------function map_newMap(_ID)local ID = _IDlocal map = {}--获得角色IDfunction map.id_getID()return IDend--杀狼事件function map.event_KillMonster()local tgr = falselocal et = {}function et.setEvent(eventID, tTgrPar)print("on EVENTS:", eventID, "| Map: ", map.id_getID(), " on ", tTgrPar[1])tgr = truepakCallBack.onDieCallBack(eventID)endfunction et.onEvent(eventID, tFunPar, tEventPar)print("do EVENTS:", eventID, "| Map: ", map.id_getID(), " -> ", tFunPar[1])tgr = falseendreturn etend--退出事件function map.event_Exit()local tgr = falselocal et = {}function et.setEvent(eventID, tTgrPar)print("on EVENTS:", eventID, "| Map: ", map.id_getID(), " on ", tTgrPar[1])tgr = truepakCallBack.onGotoCallBack(eventID)endfunction et.onEvent(eventID, tFunPar, tEventPar)print("do EVENTS:", eventID, "| Map: ", map.id_getID(), " -> ", tFunPar[1])tgr = falsemap.uninitScene()endreturn etendlocal EVENTS_1_ID = os.time() -- os.time()以秒为单位,并发度很高local EVENTS_2_ID = EVENTS_1_ID + 1--初始化function map.initScene()print("---------- initScene ----------")local et = nil--情节线1local ets1 = pakCallBack.EVENT_MANAGER.events_newEvents(EVENTS_1_ID)et = map.event_KillMonster()ets1.push(et.setEvent, {"Wolf die"}, et.onEvent, {"give A"})--情节线2local ets2 = pakCallBack.EVENT_MANAGER.events_newEvents(EVENTS_2_ID)ets2.push(et.setEvent, {"tiger die"}, et.onEvent, {"give B"})et = map.event_Exit()ets2.push(et.setEvent, {"exiting"}, et.onEvent, {"exited"})--启动情节线ets1.setEvent()ets2.setEvent()end--结束function map.uninitScene()print("---------- uninitScene ----------")pakCallBack.EVENT_MANAGER.deleteEvents(EVENTS_1_ID)end return mapendfunction main()map = map_newMap(007)map.initScene()endmain()-------------------------------------------------------------
result:
>lua -e "io.stdout:setvbuf 'no'" "Main.lua"
---------- initScene ----------
on EVENTS: 1313262659 | Map: 7 on Wolf die
do EVENTS: 1313262659 | Map: 7 -> give A
on EVENTS: 1313262660 | Map: 7 on tiger die
do EVENTS: 1313262660 | Map: 7 -> give B
on EVENTS: 1313262660 | Map: 7 on exiting
do EVENTS: 1313262660 | Map: 7 -> exited
---------- uninitScene ----------
>Exit code: 0
- Lua里设计情节链
- Lua情节链设计2
- 情节链设计3
- 电影里的情节
- 情节
- 日剧《Doctors X》里的情节
- vc6里挂LUA
- lua里的迭代器
- 南京情节
- JAVA情节
- Delphi情节
- 植物情节
- 兄弟情节
- 养老情节
- 足球情节
- [python][lua]在python里调用Lua
- 在Wireshark里加载lua
- lua设计宠物系统
- 分享:用四十种语言分别写一个MD5算法 之31 Pike语言MD5算法
- 数据结构课程设计---------用栈来实现表达式求值
- SourceInsight使用技巧(转)
- C++开发常用工具“群英会”
- 华为高级C++工程师要求
- Lua里设计情节链
- 学习ASP体会
- 卡特兰数
- spring上下文的两种配置方法
- 分享:用四十种语言分别写一个MD5算法 之30 PicoLisp语言MD5算法
- ASP.NET 2.0服务器控件开发之复杂属性
- Map
- 分享:用四十种语言分别写一个MD5算法 之29 PHP语言MD5算法
- 分享:用四十种语言分别写一个MD5算法 之28 Perl 6语言MD5算法