C++ 版本的行为树的简单实现
作者:网络转载 发布时间:[ 2015/10/9 13:30:03 ] 推荐标签:.NET 测试开发技术
其实说到这个地方,主要的逻辑已经基本上说的差不多了。还有一些其他的方面,比如说树的组装如何处理,如果是挨个编写他们之间的引用应该也会很麻烦。并且,使用这种结构处理业务逻辑的时候,业务内容会分的乱七八糟什么地方都有,调试也可能会成为问题。
实现Id跟类型之间的关联之后可以通过描述类型来创建类了,后的实现如下
AINodeDescribe des[] = {
AINodeDescribe(1, 0, ANBT_SELECT, "根节点"),
AINodeDescribe(2, 1, ANBT_SEQUENCE, "是否拾取金币的判定节点"),
AINodeDescribe(5, 2, ANT_RELEASE_SKILL, "附近是否存在金币"),
AINodeDescribe(6, 2, ANT_PICKING_UP_COINS, "捡取金币节点"),
AINodeDescribe(3, 1, ANBT_SEQUENCE, "是否回到主人身边的判定节点"),
AINodeDescribe(7, 3, ANT_RELEASE_SKILL, "是不是很长时间没有见到金币了"),
AINodeDescribe(8, 3, ANT_PICKING_UP_COINS, "是不是很长时间没有回到主人身边了"),
AINodeDescribe(9, 3, ANT_PICKING_UP_COINS, "回到主人身边的执行节点"),
AINodeDescribe(4, 1, ANT_PICKING_UP_COINS, "没事随便逛逛吧"),
};
int desCount = sizeof(des) / sizeof(AINodeDescribe);
vector<AINodeDescribe> des_vtr;
for (int i = 0; i < desCount; ++i)
{
des_vtr.push_back(des[i]);
}
AINodeBase * rootNode = AINodeHelper::sharedHelper()->CreateNodeTree(des_vtr);
AINodeDescribe初始化的时候接受四个参数:当前Id,父节点Id,当前节点创建的树节点具体类型,当前节点实例的描述。其中父节点如果是0的时候则会被当做根节点返回,这个一点要有一个哦,不然会直接返回NULL,并且申请的所有节点都会造成内存泄露。
起始这个地方可以吧参数都写到文件中,然后通过文件来进行初始化,不过,我这个地方只是为了演示用,所以直接写死也没有关系,不过你在用的时候,我推荐你写一个读取文件配置的方法,效果会更好。(因为你可以吧这段的逻辑整理直接做一个编辑器,让策划来进行对应的内容的整理。)
对了,这个地方,你可能是按照自己的想法来描写的这个文件,但是实际的执行结果可能跟你的想法并不一样,你可以进行如下处理来进行验证
cout << " 状态结构组织图 " << endl;
AINodeHelper::sharedHelper()->printAITree(rootNode);
cout << " 状态结构组织图 " << endl;
输出的结果呢,是上边那张图了
剩下的还存在一个问题,那是调试问题了,我不可能在这么多内容中下断点,那跟下毒没啥区别。所以我们需要有一种方式来打印各个节点的运行结果。这个我的处理如下
for (int i = 0; i < 10; ++i)
{
cout << "调用树开始" << endl;
rootNode->invoke(0, true);
cout << "调用树结束" << endl;
}
其中invoke的第一个参数的意思为基础的节点的届位,第二个参数为是否打印Log,如果不想调试的话,两个参数都不要填可以。
后说一下项目的地址
http://git.oschina.net/anxin1225/AiTreeTest
可能这个描述还不是很明确,你可以给我留言,我尽量给你解答
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南