一。游戏AI介绍
游戏AI,是一个非常值得挑战的部分。一个游戏好不好玩,游戏AI占了很大的分量。游戏中人物看起来比较智能,会让玩家觉得不是在和电脑作战,而是和真真的有思想的人来决斗。当然,真要做到那一步,很难,不过我们可以使用各种各样的方法,来模人工智能。
一般来说,人工智能有模式,条件模式,有限状态机,决策树,神经网络,遗传算法和模糊逻辑等等。而有限状态机,基本上是任何游戏都会用到的一种组织AI的方法。它可以为后面更加深奥的AI算法提供强力的支持,所以掌握好有限状态机的使用,对以后更深层次的游戏AI的学习,提供强大的助力。
二。有限状态机介绍
有限状态机,简称FSM,在各个游戏中都会出现它的身影,所以对于游戏编程人员来说,了解并掌握有限状态机,是非常重要的。根据前辈们的经验总结,FSM具有如下的特点:
编程快速简单,易于调试,很少的计算,直觉性和灵活性。
有限状态机的概念实际来源于数学,作为程序员我们不需要掌握数学上关于有限状态机的确切定义,我们只需要知道一个描述性的语言就可以了:
(以下描述摘自游戏人工智能编程案例精粹)一个有限状态机是一个设备,或是一个设备模型,在有限个数量的状态下,可以根据给定的输入来进行不同状态间的切换,一个有限状态机在任何时候,都只能有一个状态。
三。有限状态机的实现方式
有很多种方法来实现有限状态机,读者可能想到使用一串的if...else,或者加上枚举类型的switch来进行状态的判断。的确,这样的方法是最直观的,也是最简单的实现方法。在一个智能体的状态数量很少的情况下,使用这样的实现方法是可以的。但是,当一个智能体的状态有很多个的时候,在这样实现,代码就会显得很臃肿,就会跟上一长串的case语句或者if...else语句。读者可以自行试试,用这种方法实现的有限状态机,虽然可以工作,但是对于开发人员来说,将是一个噩梦。因为你不得不自己来维护这么一长串的代码,而且不易于调试和阅读。
所以这里推荐使用的方法是使用状态设计模式来完成整个有限状态机的实现。(关于状态设计模式,是属于设计模式的范畴,读者可自行查阅相关的资料进行了解,推荐看Head First设计模式中关于状态设计模式的章节)
现在我们来实现下,如何进行有限状态机的设计。
首先,我们需要定义一个公用的基类,用以派生出不同的状态类。
#ifndef _State_
#define _State_
//包含头文件
#include"Role.h"
#include<string>
using nam