基础 | 简单的智能体----有限状态机(五)

本系列为笔者初学c/c++和游戏AI开发的学习经历,练习为主,不涉及到具体的游戏开发软件学习(如unity,虚幻4等),适合刚入门的小伙伴一起学习探讨,欢迎在评论区留下意见。
开发语言:c/c++ (11及以上)
开发平台:macOS mojave / Linux
编译器:vs Code / g++

三、代码实现
3.1 什么是矿工?
什么是矿工?或者说,我们应该如何去描述具有一些共同特征的某一类对象?举个例子,我们程序员具有哪些特点,爱穿格子衫?喜欢背着双肩包?戴眼镜的宅男?或者,秃头?
换句话说,我们去认识一个群体的时候,常常会用一些固有的特征和行为去描述他们。这种方式体现在编程思想里,就是类与面向对象编程。
在c++的编程思想里,定义一个类,本质上是在定义一种新的数据类型。这种新的数据类型可以用来描述一类对象,包括这类对象的属性和行为。
类是可重复使用的,可被继承的。对象则是类的实例化。
面向对象编程,意味着我们可以通过定义一个通用类,来根据不同的需求,实例化出多个不一样的对象。
就像女娲拿土捏了一堆小人,这些小人又可以变成高矮胖瘦、性格各异的人类。
3.2 定义一个居民类
Bob是小镇上的一个居民,但小镇上可能还有其他生活着的居民。
所以首先我们需要定义一个居民类,用来描述小镇上的所有居民对象。我们所有的居民都将继承这个类,它也被称为基类,描述了所有居民共有的一些属性:
ID:每个人都是独一无二的,拥有唯一的数字记号,让程序可以寻找出我们需要的对象
Update(): 所有居民每个时刻都会更新自身的状态,这里通过虚函数,来保证该方法一定会被执行
SetID():小镇上每增加一个居民,则ID自动增加,并且要判断居民的ID是否合法


图8,图9是居民类的简单实现。在项目里我们将类的定义写在了一个.h头文件里(图8里的代码),将类的成员函数的具体实现写在了一个.cpp文件里(图9里的代码)。
头文件(.h):写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。
源文件(.cpp):源文件主要写实现头文件中已经声明的那些函数的具体代码。需要注意的是,开头必须#include一下实现的头文件,以及要用到的头文件。

知识点:
类&对象
虚函数 / 纯虚函数
头文件&源文件

参考:
《游戏人工智能编程案例精粹》
《C++ Primer Plus》
相关代码下载:https://github.com/linpeijie/GameToy/tree/master/GameAI/FSM