Behavior Tree 用 Lua 实现一个最简行为树

 1 local SELECTOR = 1
 2 local SEQUENCE = 2
 3 local CONDITION = 3
 4 local ACTION = 4
 5
 6 local function Traverse(node, ...)
 7     local t = node.type
 8     if t == SELECTOR then
 9         for i=1, #node do
10             if Traverse(node[i], ...) then
11                 return true
12             end
13         end
14         return false
15     elseif t == SEQUENCE then
16         for i=1, #node do
17             if not Traverse(node[i], ...) then
18                 return false
19             end
20         end
21         return true
22     elseif t == CONDITION then
23         for i=1, #node do
24             if not node[i](...) then
25                 return false
26             end
27         end
28         return true
29     elseif t == ACTION then
30         for i=1, #node do
31             node[i](...)
32         end
33         return true
34     end
35 end
36
37 local root =
38 {
39     type = SELECTOR,
40     {
41         type = SEQUENCE,
42         {
43             type = CONDITION,
44             function(i,j) return math.random() > i end,
45             function(i,j) return math.random() < j end,
46         },
47         {
48             type = ACTION,
49             function() print("random") end,
50         },
51     },
52     {
53         type = ACTION,
54         function() print("idle") end,
55     },
56 }
57
58 local input1 = 0.2
59 local input2 = 0.7
60 Traverse(root, input1, input2)

有没有比 C++ 代码简单一万倍,有没有?

时间: 2024-11-09 15:42:27

Behavior Tree 用 Lua 实现一个最简行为树的相关文章

使用行为树(Behavior Tree)实现游戏AI

原地址:http://blog.csdn.net/akara/article/details/6084786 [原创]使用行为树(Behavior Tree)实现游戏AIby AKara 2010-12-09 @ http://blog.csdn.net/akara @ akarachen(at)gmail.com @weibo.com/akaras 谈到游戏AI,很明显智能体拥有的知识条目越多,便显得更智能,但维护庞大数量的知识条目是个噩梦:使用有限状态机(FSM),分层有限状态机(HFSM)

使用行为树(Behavior Tree)实现网游奖励掉落系统

原地址:http://blog.csdn.net/akara/article/details/6165421 [原创]使用行为树(Behavior Tree)实现网游奖励掉落系统by AKara 2011-01-24 @ http://blog.csdn.net/akara @ akarachen(at)gmail.com @weibo.com/akaras 奖励/掉落系统,涵盖物品,经验,金钱等网游中可直接给予玩家的元素.一个简单,直观,可扩展的掉落系统对网游中的产出控制起非常重要的作用. 奖

【转载】行为树(Behavior Tree)

使用行为树(Behavior Tree)实现游戏AIby AKara 2010-12-09 @ http://blog.csdn.net/akara @ [email protected] ——————————————————————— 谈到游戏AI,很明显智能体拥有的知识条目越多,便显得更智能,但维护庞大数量的知识条目是个噩梦:使用有限状态机(FSM),分层有限状态机(HFSM),决策树(Decision Tree)来实现游戏AI总有那么些不顺意. 试试Next-Gen AI的行为树(Beha

&quot;iOS push全方位解析(三)【译文】&quot;——一个极简的demo,并测试一下push

这是一篇来自raywenderlich的教程,内容翔实!结构简单透彻.讲解循序渐进.文章质量上乘!是一篇难的的博文!使用半瓶的英语水平翻译了一下: 1. push的概述 2. 生成push证书,生成Provisioning Profile 3. 一个极简的demo,并测试一下push.(本博文) 这里查看原文 一个极简的demo 到目前为止,上面还不是做的还不够让人兴奋,但是那些准备工作还是很有必要的.本教程像你详细展示了如何生成证书,因为每天都会用到证书,而且没有证书push就不好.刚才你刚搞

洛谷 P2253 好一个一中腰鼓 --线段树

P2253 好一个一中腰鼓 --线段树 题目背景 话说我大一中的运动会就要来了,据本班同学剧透(其实早就知道了),我萌萌的初二年将要表演腰鼓[喷],这个无厘头的题目便由此而来. Ivan乱入:“忽一人大呼:‘好一个安塞腰鼓!’满座寂然,无敢哗者,遂与外人间隔.” 题目描述 设想一下,腰鼓有两面,一面是红色的,一面是白色的.初二的苏大学神想给你这个oier出一道题.假设一共有N(1<=N<=20,000)个同学表演,表演刚开始每一个鼓都是红色面朝向观众,舞蹈老师会发出M(1<=M<=

【转】手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)

前言 做这个 vueAdmin-template 的主要原因是: vue-element-admin 这个项目的初衷是一个vue的管理后台集成方案,把平时用到的一些组件或者经验分享给大家,同时它也在不断的维护和拓展中,比如最近重构了dashboard,加入了全屏功能,新增了tabs-view等等.所以项目会越来越复杂,不太适合很多初用vue的同学来构建后台.所以就写了这个基础模板,它没有复杂的功能,只包含了一个后台需要最基础的东西.vueAdmin-template 主要是基于vue-cli w

[lua大坑]一个莫名其妙的lua执行时崩溃引出的堆栈大小问题

这是一个坑,天坑!如果不是我随手删除了一个本地变量,这个问题直到现在我应该也没有头绪. 首先,写了一个新的lua脚本,载入,执行.在执行的时候,出了这么一个莫名其妙的问题: EXC_BAD_ACCESS 莫名其妙是不是?如果是某个函数访问了nil,或之类的lua语法范围内的问题,pcall肯定会触发错误处理函数打出log.而如果是调用的c++函数出现了错误,那也应该崩溃在那个函数相关的地方.在这种地方崩溃,让人摸不着头脑. 没关系,本资深程序员,什么bug不是谈笑风生,来,log大法.通过log

笔记:利用Cocos2dx 3.3 lua 做一个动作类游戏(一)

在这之前,声明一下: 做不完我是小狗. 没办法,没毅力和恒心,之前的那个Quick Cocos2dx做的横版过关游戏的demo已经转成了3.3的版本了,其实也算是个半成品,战斗,UI啥的都有了,呵呵. 本次DEMO要达成的目的如下: 1 熟悉Cocos2dx 3.3 - lua 2 使用Joystick 3 完成简单的怪物AI 4 尝试扩展现有的api(可选) 嗯,差不多就以上了. 今天第一次笔记. 当前完成的任务有如下: 1 使用新的player新建项目 2 在场景中添加Sprite以及其帧动

cocos2dx2.2.2 自带的extern.lua的一个bug

最近在做核心战斗,大量用到了类,不得不说cocos2dx 2.2.2 自带的类方法真是写的太不好了,有一个很初级的bug,另外缺少超类方法. 初级bug是原作者在new方法里,连:和.都没搞清楚. 重新写了一下该文件: function super(TmpClass) return TmpClass.super end --Create an class. function class(classname, super) local superType = type(super) local c