最近苦于思考怎么去加强AI
之前都是在代码里面根据各种情况去写代码
简单的逻辑还好说,复杂的情况实在是让人受不了
一大堆的这种业务逻辑代码自己都看晕了
后来想用行为树的方式去实现AI
找了几个行为树编辑器最后找到了这个:http://behavior3js.guineashots.com
还可以在线编辑,很符合我的需求
添加各种节点后导出json 然后我来解析.需要做的是实现你添加节点的方法
用一个Blackboard 传递属性给下一个节点,记录公共变量
--------------
具体点的用法说明:
这里面分为复合节点(顺序节点,选择节点), 条件节点,装饰节点,行为节点
我用起来的话这几个就够了
条件节点,装饰节点,行为节点 这几个是需要你去添加并且实现自己业务逻辑的
复合节点不需要变动了.
复合节点没什么逻辑.就是顺序调用子节点的返回结果(成功或者失败)
条件节点 这个也很简单.和行为节点有点相识,都是没有子节点的.然后用来做一些基础判断 返回(成功或者失败)
行为节点 也很简单,就是最终需要执行的操作.这里直接调用你原本的业务代码就行
装饰节点 的作用就是计算一些数值,然后这个数值存储到Blackboard 传递到下一个节点去
下一个节点可以利用上一个节点传递的值.
装饰节点不做判断逻辑. 这个交给条件节点.多个装饰节点串联起来最终进行简单的true false 或者数字比较判断
我在里面实现了个循环节点,有些操作是需要循环判断的,这里有点不同的是 一般用到循环节点,上个节点会传入 list. 这里会在循环的时候 把里面的元素传入到子节点里面去
解析代码:
@PostConstruct public void init() throws IOException, InstantiationException, IllegalAccessException { FileSystemResource f = new FileSystemResource("config/ai/ddz_ai.txt"); File file = f.getFile(); String str = FileUtils.readFileToString(file, "utf-8"); BehaviorTree tree = JSON.parseObject(str, BehaviorTree.class); JSONObject jsonObject = JSON.parseObject(str); initClass(); JSONObject array = jsonObject.getJSONObject("nodes"); for (Object j : array.values()) { JSONObject json = (JSONObject) j; String id = json.getString("id"); map.put(id, json); } rootNode = parse(jsonObject.getString("root")); } BaseNode rootNode; BaseNode parse(String root) throws InstantiationException, IllegalAccessException { JSONObject obj = map.get(root); String name = obj.getString("name"); Class clazz = clazzs.get(name); if (clazz == null) { logger.error("不存在节点:{}", name); } BaseNode node = JSON.toJavaObject(obj, clazz); if (node.getChild() != null && node instanceof Decorator) { Decorator decorator = (Decorator) node; decorator.setChildNode(parse(node.getChild())); } if (node.getChildren() != null && node instanceof Composite) { Composite composite = (Composite) node; List<BaseNode> list = new ArrayList<BaseNode>(); for (String nodeId : node.getChildren()) { list.add(parse(nodeId)); } // 按照y值 升序排序保证执行顺序 Collections.sort(list, new Comparator<BaseNode>() { @Override public int compare(BaseNode o1, BaseNode o2) { if (o1.getDisplay().getY() > o2.getDisplay().getY()) { return 1; } else if (o1.getDisplay().getY() < o2.getDisplay().getY()) { return -1; } return 0; } }); composite.setChildrenNodes(list); } node.setChild(null); node.setChildren(null); return node; } public void initClass() { add(new Priority()); add(new Sequence()); // add(new CallAction()); add(new NotCallAction()); add(new RobAction()); add(new NotRobAction()); add(new PlayCardAction()); add(new PassAction()); add(new FilterAction()); add(new SuccessAction()); // add(new EqualCondition()); add(new FalseCondition()); add(new GreaterCondition()); add(new LessCondition()); add(new TrueCondition()); add(new CompareCondition()); // add(new IsLordDecorator()); add(new BaseChooseCardDecorator()); add(new CanPlayCardDecorator()); add(new GetCardTypeDecorator()); add(new GetCardTypeNameDecorator()); add(new GetHandCardKindDecorator()); add(new GetCardValueDecorator()); add(new GetGameStatusDecorator()); add(new GetLordCardNumDecorator()); add(new GetNextHandCardNumDecorator()); add(new GetStartCardDecorator()); add(new GetStartCardDecorator()); add(new IfLessLordCardDecorator()); add(new IfMustPlayDecorator()); add(new IfSuppressedDecorator()); add(new LoopDecorator()); add(new SelfHandCardNumDecorator()); } public void add(BaseNode baseNode) { clazzs.put(baseNode.getName(), baseNode.getClass()); }
上传了 代码和脚本.可以看看怎么去编辑逻辑 让逻辑跑通
相关推荐
行为树允许开发者以可视化的方式设计AI的逻辑,使得非程序员也能理解并调整AI的行为。在这个场景中,我们将深入探讨如何在C++中实现基于BehaviorTree的AI控制系统。 行为树是一种编程范式,它将复杂的决策流程分解...
Godot引擎开发:AI行为树与状态机_1.引言.docx Godot引擎开发:AI行为树与状态机_10.在Godot中实现行为树.docx Godot引擎开发:AI行为树与状态机_11.行为树节点类型.docx Godot引擎开发:AI行为树与状态机_12.状态机...
行为树(Behavior Tree, BT)是一种在游戏开发和人工智能领域广泛使用的控制结构,它为非玩家角色(NPCs)的行为设计提供了灵活和可扩展的框架。行为树允许开发者以直观、模块化的方式组合简单行为,构建出复杂的...
行为树是游戏AI设计中常用的一种方法,它将智能体的行为模型化为一棵树状结构,每个节点代表一个行为或决策,通过树的遍历执行不同的行为序列。这个编辑器附带源码,意味着开发者可以深入理解其工作原理,甚至根据...
行为树、有限状态机的可视化编辑器和创建其他类型人工智能工具的基础。 AI 图形实现为可重用的可编写脚本的对象,同一个实例可以由多个 GameObjects 运行。 使用 Blackboard 变量在场景和行为树之间共享数据。 已...
Unity3D 中的行为树插件是游戏开发领域中一种强大的工具,它允许开发者以图形化的方式设计和实现人工智能(AI)行为。行为树是AI设计中的一个重要概念,它通过节点和连接线的形式来描述复杂的逻辑流程,使得非程序员...
在“aitest”这个文件中,我们可以预见到它包含了一个简单的行为树实现。这可能是一个演示如何组织和执行一系列行为的代码,比如一个游戏中的NPC(非玩家角色)可能会有寻找敌人、攻击敌人、躲避伤害等行为。这些...
行为树(Behavior Tree)是一种在游戏AI和机器人控制领域广泛使用的结构化设计工具,它能够清晰地描述和组织复杂的逻辑流程。行为树以其模块化、易于理解和扩展的特性,成为了现代游戏开发中智能体行为控制的重要...
行为树(Behavior Tree,简称BT)是一种在游戏开发、机器人学以及人工智能领域广泛应用的设计模式,用于管理复杂的决策逻辑。其核心在于将复杂的任务分解成一系列更小、更易管理的子任务,通过树状结构来表示这些...
行为树(Behavior Tree, BT)是一种在人工智能(AI)设计中用于构建和组织非玩家角色(NPC)行为的工具,尤其在游戏开发领域中广泛应用。Unity5.2版本中的Behavior Trees算法提供了高效且灵活的方式来定义复杂的NPC...
Godot引擎开发:AI与行为树_(4).Godot引擎中的AI实现.docx Godot引擎开发:AI与行为树_(5).行为树的设计与实现.docx Godot引擎开发:AI与行为树_(6).Godot引擎中的行为树组件.docx Godot引擎开发:AI与行为树_...
GameMaker Studio开发:AI与行为树_(10).AI感知系统开发.docx ...GameMaker Studio开发:AI与行为树_(4).GameMakerStudio中的AI实现.docx GameMaker Studio开发:AI与行为树_(5).行为树在GameMakerStudio中的应用
执行示例(1.3.1)展示了如何通过行为树实现具体任务,而具有记忆功能的控制流节点(1.3.2)则进一步说明了行为树能够根据任务执行的历史来做出决策。 行为树不仅在理论上具有优势,而且在实际应用中也展现了其广泛...
Behavior Designer 是一个针对Unity引擎的高级行为树插件,它简化了在Unity项目中实现智能行为的设计过程。该插件版本为1.5.13,特别强调对Unity 2018版本的全面支持,意味着它已经优化了与Unity引擎的兼容性,能够...
行为树(Behavior Tree)是一种设计模式,尤其在游戏AI(人工智能)设计中占据了重要地位。它为非玩家角色(NPC)的行为提供了一种结构化、可读性强且灵活的描述方式。在这个【Unity行为树封装】主题中,我们将深入...
专为Unity3D打造的AI行为树,包括ai编辑器 相关的博客文章地址为: 行为树(Behavior Tree)具有如下的特性: 它只有4大类型的Node: 复合节点 装饰器节点 条件节点 动作节点 更多详情、使用方法,请下载后阅读...
Behavior Designer 是专为每个人设计的行为树实现 - 程序员、艺术家、设计师。 Behavior Designer 提供具有强大的 API 的直观可视化编辑器,帮您轻松创建新任务。它还包含数百个任务,PlayMaker 集成和广泛的第三方...