人工智能-有限状态机(FSM)的学习

摘要:
有限状态机在任何时刻只能处于一种状态。

首先声明:此文源于本人最近学习的一本书 《游戏人工智能编程案例精粹》

FSM的定义:

一个有限状态机是一个设备,或是一个设备模型,具有有限数量的状态,它可以在任何给定的时间根据输入进行操作,使得从一个状态变换到另一个状态,或者是促使一个输出或者一种行为的发生。一个有限状态机在任何瞬间只能处在一种状态。

FSM的实现:

不要用if else语句或者switch语句实现状态机,越往后越累

人工智能-有限状态机(FSM)的学习第1张

类讲解:

EntityManager:实体对象的管理类,用来注册实体、取得实体还有移除实体,主要是为了处理消息传递,因为消息发出时要指定接收者,如何取得呢?就在这里取得

BaseGameEntity:实体的基类,HandleMessage是一个纯虚函数,任何继承自它的实体类都要实现这个消息处理的方法。Update方法用于刷新

MinersWife:一个具体的实体

StateMachine:专门用来管理状态的类,被MinersWife引用,借用此类可以更改实体的状态,它包含三个状态引用:当前状态,全局状态(任何时刻都必须遵守的规则,比如尿急上厕所)和之前的状态(上厕所之后要继续前面的工作)

State:状态接口,抽象,包括状态的进入、执行和退出,还有消息的处理

WifesGlobalState:状态类,全局状态

VisitBathRoom:状态类,洗澡

DoHouseWork:状态类,干家务

CookStew:状态类,做饭

MessageDispatcher:消息处理类,包括发送即时消息和延迟消息

Telegram:消息报文的格式

另外,还有一篇抨击FSM的文章有点意思

http://blog.csdn.net/lanphaday/article/details/2070675

免责声明:文章转载自《人工智能-有限状态机(FSM)的学习》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇BZOJ 1567 Blue Mary的战役地图(二维hash+二分)C++获取时间函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

kafka之生产者

生产者生产消息概述 从创建一个ProducerRecord对象开始,此对象包含目标主题和要发送的内容,还可以指定键和分区。 在发送ProducerRecord对象时,生产者首先要把键和值对象序列化成字节数组,这样才可以在网络上传输。 数据传送给分区器,如果数据指定了分区则使用此分区;如果没有指定分区,则通过ProducerRecord的键通过一定的算法来选...

【PHP】你使用过redis做异步队列么,是怎么用的?有什么缺点?

Redis设计主要是用来做缓存的,但是由于它自身的某种特性使得它可以用来做消息队列。 它有几个阻塞式的API可以使用,正是这些阻塞式的API让其有能力做消息队列; 另外,做消息队列的其他特性例如FIFO(先入先出)也很容易实现,只需要一个list对象从头取数据,从尾部塞数据即可; Redis能做消息队列还得益于其list对象blpop brpop接口以及P...

4wpa_supplicant适配层 详解

适配层是 通用的wpa_supplicant的 封装,在Android中 作为 WiFi部分的 硬件抽象层来使用。wpa_supplicant适配层 主要用于 与wpa_supplicant守护进程 的 通信,以提供给Android框架使用,它实现了 加载、控制 和 消息监控等功能。           1、当java层调用 loadDriver时, 它...

看大数据时代下的IT架构(1)业界消息队列对比

一、MQ(Message Queue) 即 消息队列,一般用于应用系统解耦、消息异步分发,能够提高系统吞吐量。MQ的产品有很多,有开源的,也有闭源,比如ZeroMQ、RabbitMQ、 ActiveMQ、Kafka/Jafka、Kestrel、Beanstalkd、HornetQ、Apache Qpid、Sparrow、Starling、Amazon SQ...

RocketMQ 入门

一、rocketMQ是什么 rocketmq是一款低延迟、高可靠、可伸缩、已使用的消息中间件。具有以下特性: 1、支持发布/订阅、点对点(p2p)消息模型 2、同一个队列中支持先进先出(FIFO)和严格的顺序传递 3、支持拉(pull)和推(push)两种消息模式 4、单一队列百万消息的堆积能力 5、支持多种消息协议,比如: JMS 、MQTT 6、分布式...

kafka rebalance机制

kafka rebalance机制 kafka保证同一个consumer group中只有一个consumer会消费掉某条消息,实际上,kafka保证的是稳定状态下每一个consumer实例只会消费一个或者多个特定的数据,而某个partition的数据只会被某一个特定的consumer实例所消费,这样设计的劣势是无法让同一个consumer group里的...