惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
L
LangChain Blog
博客园 - 司徒正美
G
Google Developers Blog
博客园 - 【当耐特】
GbyAI
GbyAI
月光博客
月光博客
人人都是产品经理
人人都是产品经理
D
DataBreaches.Net
大猫的无限游戏
大猫的无限游戏
A
About on SuperTechFans
Microsoft Azure Blog
Microsoft Azure Blog
V
Visual Studio Blog
D
Docker
MongoDB | Blog
MongoDB | Blog
Vercel News
Vercel News
Stack Overflow Blog
Stack Overflow Blog
Jina AI
Jina AI
博客园 - 聂微东

博客园 - leonbao

Unity3D - 关于Dynamic和Static HTML5 - HTML5 postMessage API 注意事项 Cocos2d-x——支持多触点 Cocos2d-x——Cocos2d-x 屏幕适配总结 Cocos2d-x——Cocos2d-x 屏幕适配新解 – 兼容与扩展【转载】 Cocos2d-x——Cocos2d-x 屏幕适配新解【转载】 Unity3D-Baked Lightmapping 示例学习 Cocos2d-x——CocosBuilder官方帮助文档翻译3 动画 Cocos2d-x——CocosBuilder官方帮助文档翻译2 多分辨率支持 Cocos2d-x——pthread的使用注意事项 Cocos2d-x——CocosBuilder官方帮助文档翻译1 使用自定义类 高性能服务器-关于游戏服务器中多线程的使用 Unity3D-UnityVS的安装和使用 高性能服务器-多线程的再次学习 Programming Windows Workflow Foundation第六章-工作流宿主翻译完成 关于SQL Server数据库设计的感悟,请指教 关于分层结构的感悟,请指教 NHibernate 连接 Access数据库的配置文件 - leonbao [原创]关于多层设计想到的问题-涉及Nhibernate和Log4Net
人工智能-有限状态机(FSM)的学习
leonbao · 2013-06-19 · via 博客园 - leonbao

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

FSM的定义:

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

FSM的实现:

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

类讲解:

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

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

MinersWife:一个具体的实体

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

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

WifesGlobalState:状态类,全局状态

VisitBathRoom:状态类,洗澡

DoHouseWork:状态类,干家务

CookStew:状态类,做饭

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

Telegram:消息报文的格式

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

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