您的位置:首页 > 大数据 > 人工智能

<<游戏人工智能编程案例精粹>>读书笔记二

2017-11-07 21:26 99 查看
<<游戏人工智能编程案例精粹>>读书笔记二

全局状态和状态翻转(State Blip):当设计一个有限状态机时,如果加入一个新的状态,且这个状态可能从任何一个状态或任何时间切换。容易想到的一个方法是:直接复制条件逻辑加进每个状态中,但这个方法是不提倡的,因为你需要对每个状态进行逻辑的修改,一个,五个容易改,十个百个呢? 还有一种方法是将状态放进智能体中,在每次更新时调用,但这个也不好。因为我们前面的目标就是对人工智能体和智能体的状态进行了解耦,这个时候加进去犹如画蛇添足。因为我们当时设计时,是将FSM的逻辑都被包含进状态中,从而实现智能体类和FSM的解耦(这么做原因有很多比如当有状态添加或者删除的时候我们不必对智能体类进行修改,对应的OO原则就是封装变化,对修改关闭。如果不这么做我们将要经常进入智能体类的设计中徒增重复工作和增加复杂程度)这时我们可以考虑创建一个全局状态,每次FSM更新时就会被调用。这样,所以用于FSM的逻辑被包含在状态中并且不在拥有FSM的智能体类中!
 状态翻转  其实就是当状态退出时,智能体返回前一个状态。这个很简单我们只需添加一个变量对上一状态进行保存就行了,这样当当前状态结束时,可以用保存的上一状态作为鼻白刺?迪肿刺???⑦还有一个需要记下的是消息结构体Telegram中 void*  ExtraInfo的使用,非常值得学习。作为消息的额外信息,因为我们不知道额外的消息是什么类型,用void类型指针可以保持任何类型例如:传的消息是Msg_MoveToPosition消息ExtraInfo可以用于存储那个位置的坐标。 当然如果还要增加总结的话,书上的代码唤起了我初学C++primer时map容器和Set容器支配的恐惧,然后Set容器又唤起了我被重载运算符支配的恐惧~~~

End
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息