定义

有限状态机(Finite-state machine)是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。1

特征

简单说,它有三个特征2

  • 状态总数(state)是有限的。
  • 任一时刻,只处在一种状态之中。
  • 某种条件下,会从一种状态转变(transition)到另一种状态。

几个重要概念3

  • 状态(State):表示对象的某种形态,在当前形态下可能会拥有不同的行为和属性。
  • 转移(Transition):表示状态变更,并且必须满足确使转移发生的条件来执行。
  • 动作(Action):表示在给定时刻要进行的活动。
  • 事件(Event):事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态。

状态机的要素1

状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:

  • 现态:当前所处的状态。
  • 条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。
  • 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。
  • 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。

我们可以用状态表了表示整个过程,如下图所示。

状态表

注意的问题

避免把某个“程序动作”当作是一种“状态”来处理1

那么如何区分“动作”和“状态”?“动作”是不稳定的,即使没有条件的触发,“动作”一旦执行完毕就结束了;而“状态”是相对稳定的,如果没有外部条件的触发,一个状态会一直持续下去。

例子

游戏

有限状态机用来编游戏和故事是最好的了。4
这有一个寻宝游戏,首先你从‘开始’出发,然后你跟随箭头知道你到达终点。

褒扬和批判

游戏开发

在游戏开发中使用状态机显然不失为一种不错的选择,首先它的概念并不复杂,其次它的实现也十分简单而直接。但它的缺点却也十分明显,例如难以复用,因为它往往需要根据具体的情况来做出反应,当然当状态机的模型复杂到一定的程度之后,也会带来实现和维护上的困难。3

更多

参考:5

代码相关:2

对JavaScript的意义在于,很多对象可以写成有限状态机。

参考


  1. 深入浅出理解有限状态机 - 简书 ↩︎ ↩︎ ↩︎

  2. JavaScript与有限状态机 - 阮一峰的网络日志 ↩︎ ↩︎

  3. 趣说游戏AI开发:对状态机的褒扬和批判 - Runtime - SegmentFault ↩︎ ↩︎

  4. Programming Basics: 有限状态机 ↩︎

  5. 有限状态机 - 维基百科,自由的百科全书 ↩︎

有限状态机 FSM 是什么?相关推荐

  1. Cocos Creator 超简洁代码实现有限状态机 FSM,打造丝滑角色动作

    引言:本文作者黄聪是一名在校大学生,设计毕设的过程中,他参考<游戏编程模式>一书,摸索出了一套角色动作控制方案. 作为一名在校学生,前段时间在做毕业设计的过程中,我也遇到了很多同学都会遇到 ...

  2. 【算法】有限状态机FSM

    目录 一.快速理解 1.有限状态机(FSM) 2.有限状态机的设计 二.详细说明 1.有限状态机FSM 1)FSM概念 2)FSM的3特点 3)FSM的4要素 4)FSM状态转换图 2.FSM的设计和 ...

  3. 有限状态机FSM(finite state machine) 二

    有限状态机FSM(finite state machine) 二 延续上一篇继续有限状态机 上一篇中的状态切换判断是在每一个状态类的 OnExecute 方法中各种 if else 硬编码逻辑 当状态 ...

  4. 什么是有限状态机FSM

    什么是有限状态机FSM 简介 有限状态机(以下用FSM指代)是一种算法思想,简单而言,有限状态机由一组状态.一个初始状态.输入和根据输入及现有状态转换为下一个状态的转换函数组成.在Gof的23种设计模 ...

  5. Unity进阶第三章-有限状态机FSM(三种方法实现角色动画操作)

    一.有限状态机FSM概述 二.不用有限状态机实现角色的走路.攻击动作 (1)新建角色.地面.为角色添加动画 (2)为角色添加脚本 using System.Collections; using Sys ...

  6. 有限状态机FSM(finite state machine) 一

    有限状态机FSM(finite state machine) 一 有限状态机又称有限自动状态机,它拥有有限数量的状态,每个状态代表不同的意义,每个状态可以切换到 零-多 个状态.任意时刻状态机有且只能 ...

  7. c语言状态机_【C语言】有限状态机FSM

    有限状态状态机FSM(finite state machine)是为研究有限内存的计算过程和某些语言类而抽象出的一种计算模型.有限状态自动机拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字 ...

  8. php状态机,有限状态机FSM的原理与GO的实现

    有限状态机(Finite-state machine, 简写FSM)又可以称作有限状态自动机.它必须是可以附着在某种事物上的,且该事物的状态是有限的,通过某些触发事件,会让其状态发生转换.为此,有限状 ...

  9. 有限状态自动机java实现_有限状态机FSM的几种简单实现

    标签: 有限状态机,Akka fsm,squirrel-foundation,java状态模式.责任链模式 1. 有限状态机的概念 有限状态机(英语:finite-state machine,缩写:F ...

  10. 有限状态机(FSM)设计原理

    1 概述 2 状态机的描述方法 3 FSM的状态编码 4 FSM的Verilog HDL 设计的基本准则及有限状态机设计的一般步骤 基本准则 一般步骤 5 设计举例 51一段式one alwaysFS ...

最新文章

  1. 数据结构--图(Graph)详解(二)
  2. 获取对象属性(key)
  3. 前端:常用单词(JS,CSS,HTML)
  4. 一加9 Pro高清渲染图曝光:后置四摄加持哈苏logo真香
  5. 【java】大并发下Timeout waiting for connection from pool 解决方案
  6. GitCode 版本升级,让开发更加高效
  7. 【毕业设计】JSP数据库连接池的研究与实现(源代码+论文)
  8. wpf ui框架_替代Silverlight:微软面向Web开发者推出Blazor新框架
  9. 在fstab中使用UUID挂载
  10. 购物网站的设计与实现论文
  11. 《仿人机器人原理与实战》一1.2 反射弧与仿人机器人设计
  12. 本地远程连接服务器调试
  13. mongodb-b站黑马程序员
  14. 路由器与交换机的关系
  15. 在vue项目中使用webp图片心得
  16. java成员变量的调用_java中对象调用成员变量与成员的方法介绍
  17. 8. 查询表orders——统计各类商品的销售量
  18. 洛谷——P1361 小猫爬山
  19. Xilinx vivado 常用IP核使用
  20. 通达信指标公式编写答疑汇总(三)

热门文章

  1. 【深度学习基础】02梯度下降算法改进:SGD、Momentum、NAG、RMSProp、Adam等
  2. 服务器微信服务号响应变慢,微信卡顿和响应慢,教大家轻松搞定:简单操作,赶快收藏分享吧...
  3. 达芬奇密码 第五十五章 第五十六章
  4. VR视频拍摄手法学习笔记
  5. 网络嗅探 精华版(全)
  6. windows10安装SQL server 2008 R2
  7. Python语句求一个正整数的全部约数
  8. 【干货长文】诺亚财富解读市场信息心理学
  9. android实现可暂停/继续的计时器
  10. chart控件两个Y轴