上次提出了关于AI懒惰问题的解决方案(见上一篇),一种称为计时器法,就是通过人为的延时来平滑AI的行为抖动,还有一种称为交叉边界法,通过平滑边际值来解决AI在边际上的行为问题。在讨论的最后,我们看到对于交叉边界法,在结果上看来,稍稍有点不是很符合一开始的对AI的行为定义。

再来看一下这个问题,[……]

继续阅读

最近在路上一直在思考AI中的懒惰问题,为什么会突然想到这个,实在是因为这个问题十分常见,它非常简单,但是又非常难以漂亮的解决。先从一个问题引入吧。看下面这张图

假设我们有一个开阔的战场,这个战场被划分成了4个小区域,A~D来表示,实心小红圈表示进攻方,也是我们控制的人。实心小蓝圈表示防守方,是[……]

继续阅读

接上篇,我们接着聊。

分数系统的打分公式,是根据情况自己定义的,但也有一些方式来帮助构建出比较合理的公式来,公式的推导就是一个函数的拟合过程,我们可以先取几个样点,然后试着找到一条函数曲线,尽可能的去使样点落在我们的这条函数曲线上。在中学的时候的实验课上,大家应该都做过这种事情。在AI中,我们[……]

继续阅读

最近在做的一个AI用到了分数系统,这次就来和大家聊聊这个话题。

先来设计一个场景,有一个单兵作战的士兵,在丛林中,他有一些基本的行为,比如射击(shoot),移动(move),撤退(retreat)。他必须结合很多因素来决定自己的行为,比如,敌人的数量,自身的情况,弹药的情况,环境的情况等等,我们[……]

继续阅读

做一个AI程序员是比较痛苦的事情,如果是看别人写的AI的代码,那更是痛苦至极。AI代码的可读性通常不会很高,里面充斥着莫名的算法,一大堆的经验数据,奇怪的逻辑。任何一项,都会使人觉得崩溃。AI的代码一般都是游戏相关的,而且随着design的改变而改变,正是这种特化,使得AI一般都很难有一个Engin[……]

继续阅读

最近想用做一种C++ Script,来分离引擎和游戏,AI就可以完全用这种C++ Script来做,不需要牵涉到任何引擎的代码,只是使用引擎暴露的API,这样做的好处很多,最重要的就是可以只依赖于API,减少了高层逻辑和底层引擎的耦合,当然,这样的结构就需要引擎提供一套完备的API接口。在接口中,由[……]

继续阅读

最近在研究游戏引擎Core模块,其实这部份对AI来说并不是直接相关的,属于游戏最底层的接口,像数学库,内存管理,文件系统,以及对系统接口的封装等等。不过有个东西却引起了我极大的兴趣,并且在某种程度上和AI联系紧密,即Reflection系统,虽然这样的库很通用,一般都是找一个来直接用,没人会重头去做[……]

继续阅读

C/C++一般函数只能返回一个返回值,要返回多个返回值,比较常用的一个办法可以传指针或者引用的参数进去,通过参数返回,还有一个办法,其实也很简单,就是返回一个structure出来。
struct stRet
{
retValue1;
retValue2;
….
}

stRet ReturnM[……]

继续阅读