程序中有限状态机自动机实现逻辑简化

本文介绍了如何使用有限状态机来简化游戏中的状态切换逻辑,例如控制门的开关状态。通过状态机,代码变得更清晰,逻辑更符合自然规律。状态机的应用广泛,包括游戏状态管理、渲染引擎等,并提到了面向对象设计下状态模式的高效实现。
摘要由CSDN通过智能技术生成

/********************有限状态机自动机***********************/
状态图--一个图的数据结构!
1.while + switch;
2.状态机:就是指定系统的所有可能的状态及状态间跳转的条件,然后设一个初始状态输入给这台机器,机器就会自动运转,或最后处于终止状态,或在某一个状态不断循环。
游戏中状态切换是很频繁的。 可能以前要切换状态就是if~else,或者设标志,但这些都不太结构化, 如果把它严格的设为一种标准的状态机,会清楚的多。

比如控制一扇门的运动, 初始时门是关的, 当有力作用在门上时,门开始慢慢打开,力的作用完后,门渐渐停止不动, 当有反向的力时,门又渐渐关上, 知道回到初始关的状态。 这个你会怎么来编程实现呢。似乎很麻烦, 的确,没有状态机的思想时会很烦,设很多标志,一堆if条件。
用状态机的话,不只是代码更清晰, 关键是更符合逻辑和自然规律, 不同状态不同处理, 满足条件则跳转到相关状态。

伪码如下:
enum
{
 CLOSED, // 关上状态
 CLOSING, // 正在关状态
 OPENED, // 打开状态
 OPENING, // 正在开的状态
}doorState = CLOSED; // 初始为关

Update()
{
     switch(doorState)
     case CL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
有限状态自动机(Finite State Machine,FSM)的状态转换图可以用图论的有向图来描述。下面是实现有限状态自动机状态转换图的一般步骤: 1. 确定状态:首先需要确定状态集合,即有限状态自动机的所有可能状态。根据具体的问题,状态可能包括某个系统的不同状态、某个输入字符串的不同状态等等。 2. 确定转移条件:在有限状态自动机,每个状态可以根据输入条件转移到其他状态。因此需要确定状态转移的条件,即输入符号或输入字符串。例如,一个二进制有限状态自动机的输入符号集合可能是{0, 1}。 3. 确定初始状态和终止状态:确定有限状态自动机的初始状态和终止状态。通常情况下,初始状态为某个默认状态,而终止状态则是某个特定的状态。 4. 绘制状态转换图:根据上述三个步骤确定的状态、转移条件、初始状态和终止状态,绘制有限状态自动机的状态转换图。 5. 实现状态转移函数:根据状态转换图,实现状态转移函数。状态转移函数可以用一个二维数组或哈希表来实现,其第一维表示当前状态,第二维表示输入符号,返回值表示转移后的状态。 6. 实现状态识别函数:根据状态转移函数,实现状态识别函数。状态识别函数接受一个输入字符串作为参数,根据状态转移函数进行状态转移,最终判断是否到达了终止状态。 以上是实现有限状态自动机状态转换图的一般步骤。具体实现过程,需要根据具体问题进行调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值