有限状态机的概念

简介: 有限状态机的概念

一、有限状态机的概念

有限状态机简称状态机,是表示有限个状态,以及在状态之间的转移和动作等行为的数学模型。状态机的要素有状态状态转移两个。

在Unity中,动画状态机最重要的属性就是节点和连线,其中每个节点都是一个动画片段(或动画融合树),而没跟连线代表着可以从一个状态转移到另一个状态。

对动画来说,动画状态的转移是有条件的,一般是通过设定动画变量,使得动画播放完毕时能够跳转到另一个动画状态 。其他编程逻辑也是一样,总要设计出一些必要的状态,并定义状态之间的转移条件,才能把一个复杂的逻辑描述清楚。

1、状态机用于电子体重秤设计

AI状态机既可以用于复杂逻辑也可以用于简单逻辑,此处先从一个简单的、不属于AI的例子开始——电子体重秤。

电子体重秤是一种常见的电子设备,一般不需要用按钮或遥控器操作,使用时人只需要站在上面,或者把需要称重的物体放在上面,保持几秒钟,很快就会在小屏幕上显示出测量的结果。

其工作流程是自动化的,背后也有一段程序控制其测量过程。如果用状态机的方法分析它,它应当具有几种状态?状态之间又是如何切换的呢?

根据使用流程分析出它的基本工作状态如下:

  1. 休眠状态
  2. 启动状态(初始化)
  3. 测量状态(数字会持续变化的状态)
  4. 锁定状态(数字不再变化的状态)

不再使用时会回到休眠状态,因此基本上只有以上几种工作状态。

其状态转移的条件如下:

  1. 在休眠状态下,如果感受到压力则启动
  2. 启动后立即进入测量状态
  3. 在测量状态下,持续测量并显示当前重量值。如果重量在几秒内没有变化,进入锁定模式
  4. 锁定状态,显示测量结果,数字闪烁 提示。在锁定状态下一段时间后压力不变则进入休眠状态;如果压力大幅变化则再次进入测量状态

将以上描述化成状态转移图,如图:

以上状态转移图是根据观察分析得出的结论,其他电子体重秤的逻辑可能有所不同。但重要的是,可以设想集中常规和非常规使用场景,去分析和测试是否存在设计漏洞,如以下设想。

  1. 在锁定后离开体重秤。体重秤发现压力大幅降低,切换到测量状态,然后再次进入锁定状态。
  2. 在测量未结束时离开体重秤。测量值变为0,一段时间后进入测量状态。
  3. 锁定时再加上一些重物。体重秤发现重量变化,再次进入测量状态。

还可以举出很多像这样的测试例子。经过推演发现,很多特殊行为都会转移到锁定状态,逻辑上没有明显漏洞。在设计上未发现错误的状态机就可以考虑用代码实现了,细节问题可以在功能实现后进一步测试。

2、状态机用于游戏逻辑设计

某些看似简单的游戏,实际编写的代码并不简单。例如,经典的电子游戏俄罗斯方块,用编程实现它对于初学者来说相当具有挑战性。

就俄罗斯方块来说,游戏中有一些逻辑并不是显而易见的。例如按方向键的时候如何处理?从表面上看,按下方向键时正在下落的方块应当左右移动,但是如果进一步分析什么时候会出现正在下落的方块,就会发现有方块下落的状态仅仅是多个游戏状态中的一种。

俄罗斯方块的游戏流程,至少分为生成方块、方块下落、方块固定、消除整行方块、游戏结束5种状态,其中只有方块下落状态是受玩家控制的,其他状态都不用考虑玩家的输入。从状态机的角度考虑,游戏逻辑会变得十分清晰,如图:

编写逻辑时,代码中有一个关键变量——CurrentState(当前状态)。代码按照状态分成5部分,每一帧格局当前状态执行其中的一部分,满足某条件时修改当前状态,影响下一帧执行的逻辑。

严格按照这种思路编写代码,就可以避免大量的条件判断,让代码变得清晰,从而减少出错的可能性。

3、状态机应用于游戏AI设计

现代的很多游戏中都有一些具备简单智能的敌人,特别是潜行类游戏,例如在《细胞分裂》等游戏中,具有一定智能的敌人是游戏设计的核心,也是让玩家乐此不疲、不断挑战的动力。

以下是几个例子:

  1. 敌人AI:在一个射击游戏中,敌人的行为可以由状态机控制。比如,当敌人处于"巡逻"状态时,它会在指定区域内来回移动;当敌人检测到玩家进入其感知范围时,它会切换到"追逐"状态并开始追击玩家;当敌人受到攻击并生命值降低时,它可能会切换到"逃跑"状态以寻找掩体或者呼叫援助。
  2. 玩家角色AI:在一个角色扮演游戏中,玩家角色的行为也可以由状态机来控制。比如,当玩家角色处于"探索"状态时,它会自由地在游戏世界中移动和探索;当玩家角色进入战斗时,它会切换到"攻击"状态并执行攻击动作;当玩家角色生命值过低时,它可能会切换到"撤退"状态以避免被击败。
  3. NPC角色AI:在一个角色扮演游戏或者生存游戏中,非玩家角色(NPC)的行为也可以利用状态机来设计。比如,一个NPC农民的状态机可以包括"种田"、“收割”、"出售农产品"等状态,根据当前的任务和条件来决定下一个动作。

这只是状态机在游戏AI设计中的一些简单应用举例,实际上,状态机可以处理更加复杂的行为和决策流程,从而使游戏角色的行为更加智能、有趣和逼真。


相关文章
|
5月前
|
编译器 程序员 C语言
2.8关键概念
编程充满挑战,需具备抽象与逻辑思维,同时注重细节。在日常交流中,小错误或不完整句子不会影响理解,但编译器却严格得多。本章旨在帮助读者理解C程序的本质,即对计算机任务的描述。编译器将任务转化为底层机器语言,但由于不具备智能,你需要使用C语言标准规定的术语明确表达意图。
70 10
|
10月前
|
存储 安全 算法
Secureboot概念
Secureboot概念
266 0
|
设计模式 数据可视化 Linux
为Linux应用构造有限状态机
为Linux应用构造有限状态机
174 0
|
存储 Java 数据库连接
串池的概念
串池的概念
|
存储 算法 异构计算
状态机的概念与设计
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
330 0
状态机的概念与设计
有限状态机
有限状态机简介 有限状态机(FSM)是许多数字系统中用来控制系统和数据流路径行为的时序电路。FSM的实例包括控制单元和时序。 本实验介绍了两种类型的FSM(Mealy和Moore)的概念,以及开发此类状态机的建模方式。 请参阅Vivado教程,了解如何使用Vivado工具创建项目和验证数字电路。 Mealy FSM(米利型有限状态机) 有限状态机(FSM)或称简单状态机用于设计计算机程序和时序逻辑电路。它被设想为抽象机器,可以处于有限数量的用户定义状态之一。机器一次只能处于一种状态; 它在任何给定时间所处的状态称为当前状态。 当由触发事件或条件启动时,它可以从一种状态改变为另一种状态;
272 0
|
存储 弹性计算 资源调度
【k8s】概念、构成
文章目录 前言 一、概念
134 0
【k8s】概念、构成
|
开发框架 安全 .NET
初学C#需要掌握哪些概念
今天给大家带来刚整理好的初学C#需要掌握的概念。
|
Java API
有限状态机问题编程实践(上)
摘要:一般来说,实体的可能状态是有限的, 在满足一定的条件的情况下触发特定动作会发生实体的状态迁移。对于这类问题,我们一般称为FSM(Finite State Machine), 即有限状态机。本文分享一个有限状态机的java实现,以及使用DSL实现的通用化描述。
757 0
有限状态机问题编程实践(上)
|
自然语言处理 运维 负载均衡
PolarisMesh系列文章——概念系列(一)
北极星是腾讯开源的服务发现和治理中心,致力于解决分布式或者微服务架构中的服务可见、故障容错、流量控制和安全问题。虽然,业界已经有些组件可以解决其中一部分问题,但是缺少一个标准的、多语言的、框架无关的实现。
412 0

热门文章

最新文章