状态机FSM

简介

FSM(Finite State Machine)有限状态机.
可以分为两类:
- Mealy状态机 : 次态=f(现状,输入),输出=f(现状,输入)
这里写图片描述

  • Moore状态机 : 次态=f(现状,输入),输出=f(现状)
    这里写图片描述

图片摘自某个视频: https://www.youtube.com/watch?v=S352lyPZP00
在软件领域我们常用的是Moore状态机.

状态机的组成:状态、事件、动作。当状态机处于某一状态时,一个事件触发状态机转换到下一个状态,同时执行相应的动作.

### 状态机 FSM 实现原理 有限状态机(Finite State Machine, FSM)是一种数学模型,用于描述系统的状态及其之间的转换关系。FSM的核心在于定义一组有限的状态集合以及触发这些状态间转换的条件或事件[^2]。 #### FSM 的基本组成 1. **状态 (State)** 表示系统当前所处的情况。例如,在游戏角色中,“行走”、“攻击”和“防御”都可以是一个状态。 2. **事件 (Event/Trigger)** 导致状态变化的因素。例如,当检测到敌人接近时,可能触发从“巡逻”状态切换至“战斗”状态。 3. **动作 (Action)** 当进入某个新状态时执行的操作。例如,切换到“攻击”状态时播放攻击动画。 4. **转换规则 (Transition Rule)** 描述如何从一个状态迁移到另一个状态。这通常是基于预设逻辑完成的。 --- ### FSM 的实现方法 以下是 FSM 的一种常见实现方式: #### 伪代码结构 ```csharp public abstract class State { public virtual void Enter() { } public virtual void Execute() { } public virtual void Exit() { } } public class StateMachine { private State currentState; public void SetInitialState(State initialState) { this.currentState = initialState; currentState.Enter(); } public void Update() { if (currentState != null) { currentState.Execute(); } } public void TransitionTo(State nextState) { if (this.currentState != null) { this.currentState.Exit(); } this.currentState = nextState; this.currentState.Enter(); } } ``` 此代码展示了 FSM 的核心机制:`StateMachine` 类负责管理当前状态,并允许通过 `TransitionTo()` 方法动态更改状态;而每个具体状态继承自抽象类 `State` 并实现了自己的行为逻辑[^4]。 --- ### FSM 的应用场景 1. **游戏开发** 游戏中的 NPC 或玩家角色可以通过 FSM 来控制不同行为模式间的切换。例如,NPC 可能处于“闲逛”、“追逐目标”或“攻击”等状态之一[^3]。 2. **协议解析** 在网络通信中,数据包接收器可以用 FSM 建模不同的连接阶段(如握手、传输、关闭),从而简化复杂流程处理。 3. **嵌入式系统** 很多硬件设备内部运行的小型控制器也依赖于 FSM 设计来响应外部信号并作出相应反应。 4. **用户界面交互** 应用程序 UI 中按钮点击后的各种反馈效果亦可视为一系列离散状态的变化过程。 --- ### 层级有限状态机 HFSM 相较于传统 FSM,HFSM 提供了一种更灵活的方式组织复杂的多层次状态体系。它允许多个子状态共享父状态的部分属性或功能,减少重复编码的同时提高了维护效率[^1]。 例如,在一款 RPG 游戏里,“战斗”大类别下面还可以细分出诸如近战搏斗、远程射击等多种具体情况作为各自独立却又相互关联的小分支节点存在。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值