`
swingboat
  • 浏览: 62540 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

有限状态机的实现

阅读更多
有限状态机(Finite State Machine或者Finite State Automata)是软件领域中一种重要的工具,很多东西的模型实际上就是有限状态机。

最近看了一些游戏编程AI的材料,感觉游戏中的AI,第一要说的就是有限状态机来实现精灵的AI,然后才是A*寻路,其他学术界讨论比较多的神经网络、模糊控制等问题还不是很热。

FSM的实现方式:
1) switch/case或者if/else
这无意是最直观的方式,使用一堆条件判断,会编程的人都可以做到,对简单小巧的状态机来说最合适,但是毫无疑问,这样的方式比较原始,对庞大的状态机难以维护。

2) 状态表
维护一个二维状态表,横坐标表示当前状态,纵坐标表示输入,表中一个元素存储下一个状态和对应的操作。这一招易于维护,但是运行时间和存储空间的代价较大。

3) 使用State Pattern
使用State Pattern使得代码的维护比switch/case方式稍好,性能上也不会有很多的影响,但是也不是100%完美。不过Robert C. Martin做了两个自动产生FSM代码的工具,for java和for C++各一个,在http://www.objectmentor.com/resources/index上有免费下载,这个工具的输入是纯文本的状态机描述,自动产生符合State Pattern的代码,这样developer的工作只需要维护状态机的文本描述,每必要冒引入bug的风险去维护code。

4) 使用宏定义描述状态机
一般来说,C++编程中应该避免使用#define,但是这主要是因为如果用宏来定义函数的话,很容易产生这样那样的问题,但是巧妙的使用,还是能够产生奇妙的效果。MFC就是使用宏定义来实现大的架构的。
在实现FSM的时候,可以把一些繁琐无比的if/else还有花括号的组合放在宏中,这样,在代码中可以3)中状态机描述文本一样写,通过编译器的预编译处理产生1)一样的效果,我见过产生C代码的宏,如果要产生C++代码,己软MFC可以,那么理论上也是可行的。
分享到:
评论

相关推荐

    基于有限状态机实现全双工可编程UART

    ### 基于有限状态机实现全双工可编程UART #### 概述 本文介绍了一种基于异步协议的全双工可编程UART(通用异步收发器)的设计与实现方法。该设计采用有限状态机(FSM)技术,并使用硬件描述语言如Verilog HDL或...

    教学游戏人工智能的有限状态机实现研究.pdf

    在当今这个高度重视人工智能(AI)技术发展的时代,教学游戏人工智能的有限状态机实现研究显得尤为重要。有限状态机(FSM)是一种计算模型,它能够研究具有有限内存的计算过程和某些语言类别。它由有限数量的状态、...

    I_2C总线接口模块的有限状态机实现

    ### I_2C总线接口模块的有限状态机实现 #### 一、引言 I_2C(Inter-Integrated Circuit)总线是由NXP半导体(原Philips半导体)开发的一种简单、高效的双向二线制串行通信总线。它以其简单易用、支持设备种类多、...

    Python-一个轻量级面向对象的Python有限状态机实现

    总结来说,`pytransitions`库是Python中实现有限状态机的一种强大工具,它通过面向对象的方式简化了状态机的创建和管理。通过理解状态、事件、转换和回调的概念,以及如何使用`pytransitions`库来实现它们,开发者...

    VHDL——有限状态机

    ### VHDL中的有限状态机设计概述 #### 一、有限状态机(FSM)的重要性与优点 有限状态机(Finite State Machine, FSM)是一种被广泛应用于数字逻辑设计中的模型,尤其在VHDL语言中有着非常重要的地位。在设计复杂的...

    VHDL简单状态机实现交通灯系统

    简单状态机实现交通灯系统

    transitions-Python轻量级、面向对象的有限状态机实现

    transitions-Python轻量级、面向对象的有限状态机实现

    基于有限状态机实现的单片机控制电梯仿真系统.pdf

    基于有限状态机实现的单片机控制电梯仿真系统.pdf

    verilog有限状态机实验报告(附源代码).pdf

    实验内容是利用三段式有限状态机实现序列检测功能,具体包括: a) 通过拨动开关逐位串行输入一个序列。 b) 当检测到序列“1101”时,LED灯亮起;否则,保持熄灭。 c) 八段数码管显示最后输入的四个数,每次输入都会...

    JavaScript有限状态机

    在JavaScript中实现有限状态机,通常涉及到以下几个关键知识点: 1. **状态定义**:在有限状态机中,每个状态都是系统可处的明确条件。例如,在用户登录系统中,状态可能包括“未登录”、“正在登录”、“已登录”...

    fsm_keil_version3_keil有限状态机_fsm打开_8051实现状态机_

    标题中的"keil有限状态机"指的是使用Keil工具在8051单片机上实现的一种有限状态机。有限状态机(FSM)是一种数学模型,它具有有限数量的状态,这些状态之间通过事件(或输入)相互转换。在8051实现中,这些状态通常...

    C++实现的分层有限状态机v0.1

    《C++实现的分层有限状态机v0.1详解》 在计算机科学中,有限状态机(Finite State Machine, FSM)是一种模型,用于描述一个系统的行为,它根据当前状态和输入来决定如何转移到下一个状态。分层有限状态机...

    基于FPGA与有限状态机的高精度测角系统的设计与实现

    本文提出了一种基于有限状态机的高精度测量系统,在FPGA上用有限状态机实现了编码器输出脉冲的去抖,并通过32位计数器实现精确计数。该系统主要应用于激光跟踪测量系统中,对空间运动目标进行跟踪并实时测量目标的...

    计算理论导引讲义 有限状态机模型

    例如,在编译器中,词法分析器(也称为扫描器或tokenizer)就是基于有限状态机实现的,它能根据输入字符流识别出编程语言的语法元素。 深入研究有限状态机模型,还可以拓展到更复杂的计算模型,如下推自动机(Push...

    有限状态机应用文档资料FPGA设计项目应用学习文档资料(18个).zip

    基于有限状态机实现全双工可编程UART.pdf 基于有限状态机的UART设计.pdf 基于有限状态机的工控系统软件设计.pdf 嵌入式软件中状态机的抽象与实现.pdf 有限状态机FSM在PLD中的实现分析.pdf 有限状态机_FSM_的实现.pdf...

    ufsm:简单的C ++有限状态机实现

    "ufsm: 简单的C++有限状态机实现"是一个开源项目,旨在提供一个简洁且易于使用的C++库,用于构建和操作有限状态机。 有限状态机是一种数学模型,它定义了一组状态、初始状态、结束状态以及在不同条件或事件下状态...

    trafficlight_quartusII_TrafficLight_有限状态机_状态机_40_

    通过阅读和分析这些文件,可以深入理解如何用Quartus II和有限状态机实现一个具体的交通灯控制逻辑。 总结来说,"trafficlight_quartusII_TrafficLight_有限状态机_状态机_40_"是一个实践性的教学案例,它展示了...

    用C语言实现有限状态机

    用C语言实现有限状态机用C语言实现有限状态机用C语言实现有限状态机

    一个有趣的有限状态机的JAVA实现

    "当JAVA遇到状态机.wps"可能包含了更深入的Java状态机实现示例,或者对如何在实际项目中应用状态机的讨论。而"状态机图1.png"很可能是这个状态机的图形化表示,它可以帮助我们直观地理解不同状态之间的关系和转换...

Global site tag (gtag.js) - Google Analytics