有限状态机以及扩展

经常会遇到这个词FSM,有限状态机,特别是在讲到游戏AI模块中。

 

正好通过看《游戏编程模式》中的状态模式对有限状态机有了一个初步的了解,文中从普通的有限状态机,到并行状态机,再到层次状态机,最后介绍了下推状态机.

目录

1.有限状态机

2.并发状态机

3.层次状态机

4.下推状态机


1.有限状态机

有限状态机的定义是:

    1.拥有一组状态,可以在这种状态中进行切换(由于有输入或者有事件发生)

    2.同一时刻只能处于一种状态。

 

比如一个角色,有站立,跳跃,俯冲,和躲避4种状态。在状态之间的切换操作有键盘按下B,按下↓,释放↓。简单的表示几组状态的转移:

1)用图来表示状态转移:

2)也可以用表来表示状态转移:

 
当前状态→
条件↓
状态A站立状态B跳跃状态C俯冲状态D躲避
按下B状态B跳跃   
按下↓状态D躲避状态C俯冲  
释放↓   状态A站立

对于有限状态机的实现有两种方式

1)使用枚举和分支--面向过程

用枚举类型来定义各种状态,用一个变量来指定当前是哪种状态。

用if分支来判断当处于何种状态下,当是何种事件或者输入的时候,会发生什么事。

 

2) 使用状态模式--面向对象

把每一种状态都定义成一个类。

对每种状态下各个输入都放到类中去处理。

 

    关于这两种实现方式,1)简单直观,如果是简单的状态机可以用这种方式。但是如果针对每个状态下还需要有自己的变量以及特殊的逻辑以及后续需要频繁的修改,可以考虑用2),使用状态对象把相关的数据和代码封装起来。

 

2.并发状态机(多维)

    并发状态机的意思就是两个不相关的状态机同时运行,也就是两组不相关的状态,并发的进行。比如一组状态是第一部分中的4种状态,另外一组状态是是否开火的状态。当然也可以是多组。

    如果不使用并行状态机,而是把两种状态混合到一起的话,就多出很多状态,比如站立开火,站立不开火,跳跃开火,跳跃不开火。

    如果是两组状态互不搭嘎的时候,用两个状态机实现方法很好。但是实际中,可能两组状态中有所干扰,比如在跳跃的时候不能开火,才开火的时候不能俯冲,对于这种需要加一些if语句进行判断。

 

3.层次状态机(HFSM)

    层次状态机就是有多层结构的,比如在第一部分中多了,滑行,走路,跑步,这个可以和站立 提炼出新的一层父级状态——在陆地上OnGround,这几个状态都是按↓要进入躲避,按B要进入跳跃。

    相当于滑行,走路,跑步,和站立 是子状态,其父状态是 OnGround,对于共同的特性,按↓要进入躲避,按B要进入跳跃,都交由父状态处理。

    如果用状态模式 来实现 状态机的话,就用类的继承来实现这一功能。

 

    同一个类型内的状态是不需要关心外部状态的跳转的,这样也做到了无关状态间隔离。

    同一层次的状态数量不宜超过5

   http://www.aisharing.com/archives/393

 

 

4.下推状态机

   首先下推状态机使用的是一个状态栈,在切换状态的时候 可以是替换原有的状态(替换栈顶元素),也可以是把要进入的状态pushdown到状态栈中。解决的是如何恢复到前一个状态。至于什么情况下用前者,什么情况下用后者,就看当这个状态完成以后是否是需要恢复到前一个状态的。

    比如开火是一个独立的新的状态,与第一部分中的各个状态同一等级,任何一个状态都能按下某个键以后都能进入到开火状态,并且开火动画完成以后自己切换到原来的状态

https://gpp.tkchu.me/state.html

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
层次有限状态机(Hierarchical Finite State Machine)是一种状态机模型,用于描述系统的状态转移和行为。它是在传统的有限状态机基础上引入了分层的概念,使得状态机的模型更加清晰和灵活。 层次有限状态机由多个层级组成,每个层级包含一组状态和转移规则。每个层级内的状态和转移规则相对独立,但可以与其他层级中的状态和规则进行交互。通过这种分层的方式,可以将复杂的系统行为分解为多个简单的层级,从而提高代码的可读性和可维护性。 在层次有限状态机的模型中,状态可以分为两种类型:基本状态和层级状态。基本状态代表系统的最细粒度的状态,而层级状态由多个基本状态组成。层级状态可以包含子状态机,使得状态机的模型更加模块化和可扩展。 在状态转移方面,层次有限状态机采用了层级转移和局部转移两种方式。层级转移用于在层级状态之间进行状态切换,而局部转移用于在同一层级内的状态之间进行状态切换。通过这两种方式的组合使用,可以组织和管理复杂的系统行为。 总之,层次有限状态机是一种强大的模型,适用于描述和处理复杂的系统行为。它通过引入分层的概念,将系统的状态和行为组织成多个层级,提高了系统的可读性和可维护性。在实际应用中,层次有限状态机常用于游戏开发、机器人控制等领域,能够有效地管理系统的状态和行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值