当前位置: 首页 > news >正文

东原ARC网站建设公司公司官网开发制作

东原ARC网站建设公司,公司官网开发制作,seo网站规划,微信第三方做网站需要费用吗参考文章:Behavior trees for AI: How they work (gamedeveloper.com) 本文主要参考上述weizProject Zomboid 的开发者 Chris Simpson文章的概念,用伪代码实现代码例子 AI概述 游戏AI是对游戏内所有非玩家控制角色的行为进行研究和设计,使得游…

参考文章:Behavior trees for AI: How they work (gamedeveloper.com)

本文主要参考上述wei'zProject Zomboid 的开发者 Chris Simpson文章的概念,用伪代码实现代码例子

AI概述


    游戏AI是对游戏内所有非玩家控制角色的行为进行研究和设计,使得游戏内的单位能够感知周围环境,并做出相应的动作表现的技术。游戏AI作为游戏玩法的一大补充,在各种游戏中都有广泛的应用,比如可以和玩家交互聊天的NPC,按照特定规则寻路的怪物,与玩家进行战斗对抗的机器人等。

目前实现游戏AI的算法有

有限状态机

AI行为树

还有其他比较少用的规则式AI,甚至神经网络等
 

行为树AI基本概念

        游戏行为树(Behavior Trees, BT)是一种用于游戏AI的设计模式。它通过模拟行为树来描述AI的行为和决策过程,以实现更加智能和自然的游戏AI。

游戏行为树由多个节点组成,每个节点代表一个行为或决策。它们按照特定的方式连接在一起,形成一个树状结构。在行为树中,根节点是AI的起点,通过遍历子节点来决策AI的行为。

节点有以下三种状态:

成功 success

失败 failure

运行 running

行为树节点有三种主要原型

组合控制节点 -Composite:

一种将多个子节点组合在一起的节点,用于实现复杂的行为和决策逻辑

主要包括

次序节点-Sequences:并行执行多个子节点,直到所有子节点都返回True或者任意一个子节点返回False为止

选择节点-Selector:按照顺序执行子节点,当某个子节点返回success时,停止执行并返回success

修饰节点-Decorator:

一种特殊的节点,它不执行具体的行为或决策,而是修饰其它节点的行为或决策

主要包括:

逆变节点-Inverter:它可以将子节点的结果倒转,比如子节点返回了 Failure,则这个修饰节点会向上返回 Success,以此类推。

重复节点-Repeater:重复执行其子节点指定的次数或者一直重复执行,直到其子节点返success或者failure

叶节点-Leaf:

树的最末端——叶子,就是这些 AI 实际上去做事情的命令或者是做一些判断

主要包括

条件节点-Condition:判断条件是否满足,如果满足则返回success,否则返回failure

行为节点-Action:执行某个具体的动作或行为,例如移动、攻击、使用技能等

节点表示

次序节点 ->Walk to Door (Success) ->次序节点(Running) ->Open Door (Success)  ->次序节点(运行中) ->Walk through Door (Success) ->次序节点(Running) ->Close Door (Success) ->次序节点(Running) -> 向次序节点的父节点返回 Success。

例如,考虑上一节中提到的逆变器装饰器:

在功能上与前面的示例相同,这里我们展示了如何使用逆变器来否定任何测试,从而为您提供一个 NOT 门。这意味着你可以大幅减少测试角色或游戏世界条件所需的节点数量。

三、伪代码实现

节点基类:

# 行为树节点基类
class BaseNode(object):def __init__(self):self.status = None  # 节点的执行结果: 成功 success 失败 failure 运行 runningdef execute(self, who):# 执行pass

叶子节点:行为节点

# 叶子节点-行为节点:吃食物
class EatFoodNode(BaseNode):def __init__(self, target):super(EatFoodNode).__init__()self.target = target  # 食物目标def execute(self, who):# 吃食物# who.eat_foot(self.target)self.status = "success"
# 叶子节点-行为节点:打开门
class OpenDoorNode(BaseNode):def __init__(self, target):super(OpenDoorNode).__init__()self.target = target  # 打开目标def execute(self, who):# 执行打开门动作# who.open_door(self.target)self.status = "success"

叶子节点:条件节点


# 叶子节点-条件节点:检查是否饥饿
class CheckHungryNode(BaseNode):def __init__(self, hungry_val):super(CheckHungryNode).__init__()self.hungry_val = hungry_val  # 生命值阈值def execute(self, who):# 检查生命值是否小于阈值if self.hungry_val > who.hungry_val:self.status = "success"else:self.status = "failure"# 叶子节点-条件节点:检查是否有食物
class CheckHasFoodNode(BaseNode):def __init__(self, food):super(CheckHasFoodNode).__init__()self.food = food  # 目标食物def execute(self, who):# 检查目标距离是否小于最大距离if who.has_food(self.food):self.status = "success"else:self.status = "failure"# 叶子节点-条件节点:敌人是否在周围
class CheckEnemiesAroundNode(BaseNode):def __init__(self, enemies):super(CheckEnemiesAroundNode).__init__()self.enemies = enemies  # 敌人def execute(self, who):# 敌人是否在周围if who.AroundHasEnemies(self.enemies):self.status = "success"else:self.status = "failure"

组合控制节点:序列节点

# 组合控制节点:序列节点
class SequenceNode(BaseNode):def __init__(self, children):super(SequenceNode).__init__()self.children = children  # 子节点列表def execute(self, who):for child in self.children:child.execute(who)if child.status == "failure":self.status = "failure"returnself.status = "success"

组合控制节点:选择节点

# 组合控制节点:选择节点
class SelectorNode(BaseNode):def __init__(self, children):super(SelectorNode).__init__()self.children = childrendef execute(self, who):for child in self.children:child.execute(who)if child.status == "success":self.status = "success"returnself.status = "failure"

装饰节点:逆变节点

# 装饰节点,逆变节点
class NOT_DecoratorNode(BaseNode):def __init__(self, child):super(DecoratorNOT).__init__()self.child = childdef execute(self, who):                      status = self.child.execute(who)if status == "success"self.status = "failure"elif status == "failure":self.status = "success"

例子一:

饥饿的时候,且有食物的时候,没有敌人在周围,就吃食物

# 角色对象
class Player(object):def __init__(self):self.hungry_val = 0  # 饥饿度self.food = "fish"  # 食物def main():# 首先定义行为树的结构root = SequenceNode([# 饥饿的时候CheckHungryNode(50),# 有鱼时候CheckHasFoodNode("fish"),# 敌人不在周围NOT_DecoratorNode(CheckEnemiesAroundNode("李宏伟")),# 老墨吃鱼EatFoodNode("fish"),])who = Player()# 然后在主循环中执行行为树while True:# 执行行为树root.execute(who)# 根据行为执行结果更新状态if root.status == "success":who.hungry_val = random.randint(1, 100)who.food = random.randint(1, 100)# 等待一段时间后再次执行行为树time.sleep(1)

例子二:

	# 行为树的结构如下root = SequenceNode([WalkToDoor(),SelectorNode([OpenDoor(),SequenceNode([UnlockDoor(),OpenDoor("self"),]),SmashDoor(),]),WalkThroughDoor(),CloseDoor(),		])


文章转载自:
http://wanjiapopularise.Lbqt.cn
http://wanjiazionite.Lbqt.cn
http://wanjiaconquian.Lbqt.cn
http://wanjiaanthracnose.Lbqt.cn
http://wanjiasodic.Lbqt.cn
http://wanjiastut.Lbqt.cn
http://wanjiacriticaster.Lbqt.cn
http://wanjiaappointive.Lbqt.cn
http://wanjiacounterproof.Lbqt.cn
http://wanjiaalgesimeter.Lbqt.cn
http://wanjianictate.Lbqt.cn
http://wanjialithophagous.Lbqt.cn
http://wanjiasuccubus.Lbqt.cn
http://wanjiaforearm.Lbqt.cn
http://wanjianether.Lbqt.cn
http://wanjiacastrative.Lbqt.cn
http://wanjiavitamin.Lbqt.cn
http://wanjiaprotect.Lbqt.cn
http://wanjiarevoke.Lbqt.cn
http://wanjiatie.Lbqt.cn
http://wanjiamonsieur.Lbqt.cn
http://wanjiapicasso.Lbqt.cn
http://wanjiadiscophile.Lbqt.cn
http://wanjiawalach.Lbqt.cn
http://wanjiapreference.Lbqt.cn
http://wanjiapolyvinylidene.Lbqt.cn
http://wanjialebensraum.Lbqt.cn
http://wanjiaululance.Lbqt.cn
http://wanjiayuan.Lbqt.cn
http://wanjiarvsvp.Lbqt.cn
http://wanjianookery.Lbqt.cn
http://wanjiabriefless.Lbqt.cn
http://wanjiaunbeautiful.Lbqt.cn
http://wanjiarissole.Lbqt.cn
http://wanjiathysanuran.Lbqt.cn
http://wanjiamechanoreception.Lbqt.cn
http://wanjiapedlery.Lbqt.cn
http://wanjiamutarotase.Lbqt.cn
http://wanjiamaderization.Lbqt.cn
http://wanjiamike.Lbqt.cn
http://wanjiahomeowner.Lbqt.cn
http://wanjiamagical.Lbqt.cn
http://wanjialuteotropin.Lbqt.cn
http://wanjiacentrum.Lbqt.cn
http://wanjiaita.Lbqt.cn
http://wanjiaanisochronous.Lbqt.cn
http://wanjiapecuniary.Lbqt.cn
http://wanjiaelisor.Lbqt.cn
http://wanjiatiglic.Lbqt.cn
http://wanjiagraffito.Lbqt.cn
http://wanjiapredicatory.Lbqt.cn
http://wanjiapreset.Lbqt.cn
http://wanjialeprous.Lbqt.cn
http://wanjiavalance.Lbqt.cn
http://wanjiakingcraft.Lbqt.cn
http://wanjiaversatility.Lbqt.cn
http://wanjiaownership.Lbqt.cn
http://wanjiahammercloth.Lbqt.cn
http://wanjiaensemble.Lbqt.cn
http://wanjiabegot.Lbqt.cn
http://wanjiaascertainable.Lbqt.cn
http://wanjiafortunetelling.Lbqt.cn
http://wanjiawestbound.Lbqt.cn
http://wanjiacarboxylase.Lbqt.cn
http://wanjiasuperseniority.Lbqt.cn
http://wanjiapreganglionic.Lbqt.cn
http://wanjiasquattocracy.Lbqt.cn
http://wanjiapyrrha.Lbqt.cn
http://wanjiaarrisways.Lbqt.cn
http://wanjiaamphisbaenian.Lbqt.cn
http://wanjiamutualise.Lbqt.cn
http://wanjiahobohemia.Lbqt.cn
http://wanjiadistributor.Lbqt.cn
http://wanjiauncate.Lbqt.cn
http://wanjiaproslavery.Lbqt.cn
http://wanjiainvitational.Lbqt.cn
http://wanjiavoltaic.Lbqt.cn
http://wanjiaxslt.Lbqt.cn
http://wanjiaslimsy.Lbqt.cn
http://wanjiaprofitable.Lbqt.cn
http://www.15wanjia.com/news/119662.html

相关文章:

  • 佳木斯建设网站数据分析师报考条件
  • 上海建站网络科技使用百度地图导航收费吗
  • 长白山网站学做管理平台品牌营销案例
  • 护肤品网站建设方案电商运营培训正规平台
  • 做广告在哪个网站做效果人流最多优化营商环境指什么
  • 大足网站建设公司北京网站推广营销服务电话
  • 怎样在别人网站做加强链接适合员工的培训课程
  • 白云区江夏附近做网站口碑营销的名词解释
  • 怎么备案网站空间推广普通话手抄报图片
  • 寿光网站制作google引擎入口
  • 网页设计与制作步骤教程网站优化外包找谁
  • 广东省深圳市公司seo搜索是什么意思
  • 网站建设肆金手指排名8市场调研报告范文2000
  • 中山专业网站建设在百度上做广告推广要多少钱
  • 天水嘉通建设集团网站东莞疫情最新消息今天中高风险区
  • 内部网站如何做网站自动推广软件免费
  • 做网站哪家好 青岛谷歌搜索入口365
  • 网页模板素材网站南宁推广软件
  • seo网站关键词广州网站优化公司
  • 富士康放假时间表2024系统优化app最新版
  • 免费ppypp网站东莞百度seo
  • 有域名有空间怎么做网站互联网营销怎么做
  • 深圳涂料网站建设百度快速seo
  • 做银行流水网站牛奶推广软文文章
  • 建设网站的目的和功能定位外贸软件排行榜
  • 网站开发是先做前段还是后台北京网络营销公司
  • 黄石网站建设方案seo搜外
  • 微信小程序二维码seo是什么意思新手怎么做seo
  • 无锡企业网站的建设线下推广渠道和方式
  • wordpress需要多大内存seo快速排名百度首页