lua实现的有限状态机
来源:互联网 发布:steam免费mac游戏推荐 编辑:程序博客网 时间:2024/05/20 05:54
在做的一个项目,由于人物的状态较多,切换比较麻烦不便管理,所以打算引入状态机,方便管理。下面是fsm的简易版本,还有些待完善的地方。
local inspect = require "inspect"local FSMState = {}function FSMState:new(super)local obj = super or {}obj.super = selfreturn setmetatable(obj, {__index = self})endfunction FSMState:enter()print(string.format("%s enter", self.name))endfunction FSMState:exit()print(string.format("%s exit", self.name))endlocal FSMStateMachine = {}function FSMStateMachine:new()local obj = {idle = FSMState:new{name="idle"},walk = FSMState:new{name="walk"},attack = FSMState:new{name="attack"},event = {idle = {},walk = {},attack = {},},_curState = "idle",}return setmetatable(obj, {__index = self})endfunction FSMStateMachine:addTransition(before, input, after)if self.event[before] thenif self.event[before][input] then assert("event already be added")elseself.event[before][input] = afterendendendfunction FSMStateMachine:stateTransition(event)assert(self._curState)print(self._curState)local out = self.event[self._curState][event]if out thenprint(string.format("reponse to event:%s", event))-- respond to this eventself[self._curState]:exit()self._curState = outself[self._curState]:enter()else-- no related eventprint(string.format("no reponse to event:%s", event))endend----------------------------------------------------------------------test------------------------------------------------------------------local sm = FSMStateMachine:new()--print(inspect(sm))sm:addTransition("idle", "seen player", "walk")sm:addTransition("idle", "player attack", "attack")sm:addTransition("walk", "player go away", "idle")sm:addTransition("attack", "player die", "idle")--print(inspect(sm))sm:stateTransition("player attack")sm:stateTransition("seen player")
输出的结果:
- lua实现的有限状态机
- 有限状态机的实现
- 有限状态机的实现
- 有限状态机的一个实现
- 有限状态机的实现
- 有限状态机的实现
- 有限状态机的实现方式
- 有限状态机的实现
- 有限状态机的FPGA实现
- 有限状态机的实现
- 简单有限状态机(FSM)的实现
- C语言有限状态机的实现
- 分层有限状态机的C++实现
- PSF(有限状态机的实现方法)
- 一个简单的有限状态机的实现
- 基于C++有限状态机的实现技术(调查报告)
- 关于有限状态机的一种程序实现结构
- 栈实现的递归函数-有限状态机
- 发篇文章纪念我死去的第一个机试---重庆地区华为机试
- hdu 4745
- QVector 和vector的比较
- HDU 4371 Minimum palindrome 解题报告(找规律)
- InnoDB和MyISAM的差别
- lua实现的有限状态机
- 【图像处理】DIBR-3D图像变换(3D Image Warping)
- c#数据库对文本文件的导入导出
- 数组与指针关系
- 新鲜的技术博客出炉啦
- 工厂模式理解
- 一个有趣的计算器
- JavaScipt实现倒计时方法总结
- 面试题之——java交叉读取两个文件中单词,然后写入新的文件