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

坦克大战ai引擎设计

2008-12-20 16:19 232 查看
坦克大战ai引擎设计

前言:人在山边约我和他一起写一个3d坦克大战游戏,并且约定我们写的免费游戏都开源。这几天他在写3d渲染库,我就研究了一下ai系统。因为是刚刚接触ai引擎,所以设计上肯定有缺陷。呵呵。

一、需求

为坦克大战敌军坦克设计ai,这是一个小游戏,所以不必设计复杂的ai,用状态机就足够了。

二、概要设计

一个分层的基于消息的状态机系统,敌军坦克假设能看到所有地图,并且不同的敌军拥有不同的智商。

三、状态图

状态机高层



状态机低层:





四、消息井

状态机高层状态是由程序主动指定而不是ai自动指定的。

底层状态消息由状态发送到MessagePump里,再由MessagePump调用消息的回调函数

五、实现方法

Message类的header

class cMessage

{

Public:

cMessage(int type = MESSAGE_DEFAULT)

{

m_typeID = type;

m_deliverd = false;

m_timer = 0.0f;

}

~cMessage(){}

int m_typeID;//消息类型

int m_fromID;//发送消息的对象的id

int m_toID;//发送消息对象到哪

float m_timer;//是否延时发送

bool m_delivered;//是否已经发送

}

template<typename
T>

class
cDataMessage : public cMessage

{

Public:

cDataMessage(int type, T data) :
Message(type){m_dataStorage = data;}

~cDataMessage(){}

T m_dataStorage;

}

MessagePump类,是一个单件

class
cMessagePump

{

公共接口:

1.
update(float dt)每帧循环调用,处理逻辑,检测队列中的每个消息,若消息要延时发放,则减少计时器,调用消息的回调函数,删除已发送消息

2.
为消息井插入一个消息类型

3.
若存在某消息类型,还未为他注册回调函数,则注册

4.
反注册某消息类型

5.
发送消息

}

未完待续…………

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