定义

有限状态机(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. tag标签[置顶] 高级NFC
  2. MySQL:数据库优化,看这篇就够了
  3. 华为的发展与管理浅析
  4. SharePoint 服务器端对象模型操作文档库(上传/授权/查看权限)
  5. SPIFFS文件系统移植–基于STM32F407
  6. 金融风控实战——集成学习
  7. 计算机网络常见问题总结
  8. Adempiere 在Ubuntu下的安装方法(二)
  9. 【项目管理】git和码云的使用
  10. [css] 有哪些方式可以对一个DOM设置它的CSS样式?
  11. 网站建设中 模板_网站建设之模板网站的缺点
  12. python缩放图片,复制即用
  13. 为什么Bert的三个Embedding可以进行相加?
  14. 印度首颗 CPU 横空出世:软件开发已开动
  15. dnf全部使用_dnf命令 (常用总结)
  16. 【笔试面试】75道逻辑推理题及答案
  17. 力天创见客流统计标书制作
  18. java 图片缩放 失真_Java图片缩小后不失真的代码(缩略图)
  19. 域适应(Domain Adaptation)综述
  20. 肇庆学院"菜鸟杯"程序设计竞赛2019 A.解锁专家

热门文章

  1. OA性能调优方案(二)
  2. DirectX(dll)修复软件推荐4.2增强版
  3. 1:Android Studio开发蓝牙上位机--环境搭建
  4. 11月面完美团+网易+腾讯+百度+滴滴熬夜5天整理面经攒人品
  5. 研究生论文写作和发表建议
  6. Python2 基础
  7. 数据结构与算法——数据结构知识归纳
  8. python删除重复文件代码
  9. 关键字驱动自动化测试
  10. Python网络爬虫数据采集实战(八):Scrapy框架爬取QQ音乐存入MongoDB