AI实验报告实验3.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AI实验报告实验3

实验三:有限状态机 姓名:郭殷蓉 班级:10数媒1班 学号:一、实验目的 掌握有限状态机的原理,并会使用有限状态机,要求能编程序实现一个案例如书上蚁群世界。. 二、实验仪器 Microsoft Visual Studio 2005 三、实验原理及过程 有限状态机(FSM)简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型.简单说明一下,可以这样理解,系统的行为如果在不同的时间(环境)下,其工作不同,并且行为可以分成所谓的有限的状态以及不重叠的程序块时,系统显现出了状态行为。   这其实说明了两件事情,如果是状态机(这篇文章说说的状态机是FSM的简称),肯定体现了两点:首先是离散的,然后是有限的。UNCARING PLAYER SEEN ANNOYED UNCARING PLAYER ATTACKS MAD MAD MONSTER HURT RAGE MAD MONSTER HEALED UNCARING RAGE MONSTER HURT BERSERK RAGE MONSTER HEALED ANNOYED BERSERK MONSTER HURT BERSERK BERSERK MONSTER HEALED RAGE ANNOYED PLAYER GONE UNCARING ANNOYED PLAYER ATTACKS RAGE ANNOYED MONSTER HEALED UNCARING 根据上面的这个表格,我们可以很容易的画出一个MONSTER的“状态转换图”,MONSTER的每一个状态就是图中的顶点。 因此,根据当前状态和对FSM的输入,MONSTER的状态将被改变。这时根据MONSTER的状态执行相应操作的代码(假设已经实现)将被执行,这时MONSTER好像是具备了人工智能。显然,我们可以定义更多的“状态”,写出更多的“输入”,写出更多的“状态转换”,这样,MONSTER可以表现的更真实,生动,当然,这些游戏的规则问题应该是策划制定的。 定义FSMstate class FSMstate { unsigned m_usNumberOfTransition; //状态的最大数 int* m_piInputs; //为了转换而使用的输入数组 int* m_piOutputState; //输出状态数组 int m_iStateID; //这个状态的唯一标识符 public: //一个构造函数,可以接受这个状态的ID和它支持的转换数目 FSMstate(int iStateID,unsigned usTransitions); //析构函数,清除分配的数组 ~FSMstate(); //取这个状态的ID int GetID(){return m_iStateID;} //向数组中增加状态转换 void AddTransition(int iInput,int iOutputID); //从数组中删除一个状态转换 void DeleteTransition(int iOutputID); //进行状态转换并得到输出状态 int GetOutput(int iInput); }; 对这个类的分析: 功能:主要是实现与一个状态相关的各种操作。我们前面假设了MONSTER的各种状态: #define STATE_ID_UNCARING 1 #define STATE_ID_MAD 2 #define STATE_ID_RAGE 3 #define STATE_ID_BERSERK 4 #define STATE_ID_ANNOYED 5 状态转换所需的输入有: #define INPUT_ID_PLAYER_SEEN 1 #define INPUT_ID_PLAYER_ATTACK 2 #define INPUT_ID_PLAYER_GONE 3 #define INPUT_ID_MONSTER_HURT 4 #define INPUT_ID_MONSTER_HEALED 5 以上是五个状态的标识符。 我们就要声明5个FSMstate的实例,每一个实例代表一个状态和与之有关的操作。假设我们先处理状态STATE_ID_MAD类成员变量m_iStateID就等于STATE_ID_MAD类成员变量m_usNumberOfTransition就是可由这个状态转换成的状态的个数,前面有一个表,其中有两个状态可以由这个状态产生,它们分别是STATE_ID_UNCARING和STATE_ID_RAGE。这时,m_usNumberOfTransition等于2。

文档评论(0)

aicencen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档