欢迎光临散文网 会员登陆 & 注册

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

2020-03-07 18:36 作者:有木乘舟  | 我要投稿

本系列为笔者初学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 SetID()方法具体实现

  图8,图9是居民类的简单实现。在项目里我们将类的定义写在了一个.h头文件里(图8里的代码),将类的成员函数的具体实现写在了一个.cpp文件里(图9里的代码)。

头文件(.h):写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。

源文件(.cpp):源文件主要写实现头文件中已经声明的那些函数的具体代码。需要注意的是,开头必须#include一下实现的头文件,以及要用到的头文件。  

知识点:

  • 类&对象

  • 虚函数 / 纯虚函数

  • 头文件&源文件

  

参考: 

  • 《游戏人工智能编程案例精粹》

  • 《C++ Primer Plus》 

相关代码下载:https://github.com/linpeijie/GameToy/tree/master/GameAI/FSM



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

分享到微博请遵守国家法律