CN109684217A - 一种游戏检测的方法及装置、电子设备、存储介质 - Google Patents
一种游戏检测的方法及装置、电子设备、存储介质 Download PDFInfo
- Publication number
- CN109684217A CN109684217A CN201811594389.1A CN201811594389A CN109684217A CN 109684217 A CN109684217 A CN 109684217A CN 201811594389 A CN201811594389 A CN 201811594389A CN 109684217 A CN109684217 A CN 109684217A
- Authority
- CN
- China
- Prior art keywords
- node
- mark information
- present
- child
- behavior tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明实施例提供了一种游戏检测的方法及装置、电子设备、存储介质,所述方法包括:获取游戏中一非玩家对象对应的行为树,所述行为树包括多个节点;确定每个节点对应的节点类型,并根据所述节点类型,确定每个节点对应的标记信息,所述标记信息包括返回值与节点状态的对应关系;根据每个节点对应的标记信息,确定所述行为树中的死循环路径。通过本发明实施例,实现了对死循环路径的检测,避免非玩家对象陷入死循环状态,提升了游戏的稳定性。
Description
技术领域
本发明涉及游戏领域,特别是涉及一种游戏检测的方法及装置、电子设备、存储介质。
背景技术
在网络游戏中,非玩家对象是游戏的重要组成部分,如游戏中怪物、NPC(Non-Player Character,非玩家角色),通常可以采用行为树(BehaviorTree)的树形逻辑结构对非玩家角色进行控制。
在采用行为树控制非玩家对象的过程中,当行为树存在配置错误时,可能进入病态的执行环路中,不断循环执行行为树中不阻塞的节点,导致非玩家对象不响应外界事件,陷入死循环状态,进而带来大量的资源消耗,降低服务器的运行速度,甚至导致服务器宕机,影响游戏的稳定性。
发明内容
鉴于上述问题,提出了本发明以便提供克服上述问题或者至少部分地解决上述问题的一种游戏检测的方法及装置、电子设备、存储介质,包括:
一种游戏检测的方法,所述方法包括:
获取游戏中一非玩家对象对应的行为树,所述行为树包括多个节点;
确定每个节点对应的节点类型,并根据所述节点类型,确定每个节点对应的标记信息,所述标记信息包括返回值与节点状态的对应关系;
根据每个节点对应的标记信息,确定所述行为树中的死循环路径。
可选地,所述节点类型包括叶子节点,以及非叶子节点。
可选地,所述根据所述节点类型,确定每个节点对应的标记信息的步骤包括:
若当前节点为叶子节点,确定当前节点的一个或多个返回值;
确定每个返回值对应的节点状态。
可选地,所述根据所述节点类型,确定每个节点对应的标记信息的步骤包括:
若当前节点为非叶子节点,确定当前节点的子节点对应的标记信息;
采用所述子节点对应的标记信息,生成当前节点对应的标记信息。
可选地,所述非叶子节点包括第一类非叶子节点和第二类非叶子节点,所述第一类非叶子节点的子节点数量为固定值,所述第二类非叶子节点的子节点数量为非固定值,所述在当前节点为非叶子节点时,确定当前节点的子节点对应的标记信息的步骤包括:
在当前节点为第一类非叶子节点时,分别确定当前节点的每个子节点对应的标记信息;
在当前节点为第二类非叶子节点时,确定当前节点的第一个子节点对应的标记信息,并基于所述当前节点的第一个子节点对应的标记信息,依次确定当前节点的每个子节点对应的标记信息。
可选地,所述根据每个节点对应的标记信息,确定所述行为树中的死循环路径的步骤包括:
确定满足第一预设条件的候选路径;
当检测到所述候选路径中所有节点对应的标记信息满足第二预设条件时,判定所述候选路径为死循环路径。
可选地,所述第一预设条件至少包括:
所述候选路径中开始节点和末尾节点为同一节点,所述候选路径中开始节点为指定节点,所述候选路径中任意相邻的节点相连通;
其中,所述指定节点为能够调用自身的节点。
可选地,所述第二预设条件至少包括:
在所述候选路径的任一节点对应的标记信息中,均存在至少一返回值对应的节点状态为非等待状态。
可选地,还包括:
对所述死循环路径进行修正。
一种游戏检测的装置,所述装置包括:
行为树检测模块,用于获取游戏中一非玩家对象对应的行为树,所述行为树包括多个节点;
标记信息确定模块,用于确定每个节点对应的节点类型,并根据所述节点类型,确定每个节点对应的标记信息,所述标记信息包括返回值与节点状态的对应关系;
死循环路径确定模块,用于根据每个节点对应的标记信息,确定所述行为树中的死循环路径。
一种电子设备,包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的游戏检测的方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如上所述的游戏检测的方法的步骤。
本发明实施例具有以下优点:
在本发明实施例中,通过获取游戏中一非玩家对象对应的行为树,行为树包括多个节点,然后确定每个节点对应的节点类型,并根据节点类型,确定每个节点对应的标记信息,标记信息包括返回值与节点状态的对应关系,然后根据每个节点对应的标记信息,确定行为树中的死循环路径,实现了对死循环路径的检测,避免非玩家对象陷入死循环状态,提升了游戏的稳定性。
附图说明
为了更清楚地说明本发明的技术方案,下面将对本发明的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的一种游戏检测的方法的步骤流程图;
图2是本发明一实施例提供的一种标记信息的示意图;
图3是本发明一实施例提供的一种行为树的示意图;
图4是本发明一实施例提供的另一种行为树的示意图
图5是本发明一实施例提供的另一种行为树的示意图;
图6是本发明一实施例提供的另一种行为树的示意图;
图7是本发明一实施例提供的一种游戏检测的装置的结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1,示出了本发明一实施例提供的一种游戏检测的方法的步骤流程图,具体可以包括如下步骤:
步骤101,获取游戏中一非玩家对象对应的行为树,行为树包括多个节点;
作为一示例,非玩家对象可以为游戏中怪物、NPC等。
在实际应用中,每个非玩家对象可以具有对应的行为树,可以检测非玩家对象对应的行为树,确定行为树中的多个节点。
由于游戏中部分动作是持续性的,如追击技能,持续性的动作无法在瞬时完成,则可以采用基于事件驱动的行为树,基于事件驱动的行为树通过执行结构来保证动作的有序发射和返回,实现一组动作的序列执行。
具体的,基于事件驱动的行为树在执行节点时可以不直接返回,而可以将当前节点设置为等待状态,当外部事件通知节点执行完成时,如追击技能命中某个玩家角色,再返回重启。
而且,在等待状态,当前节点也可以接收外部信息输入,中断当前节点的执行,以对环境的改变和玩家的交互进行反馈。
步骤102,确定每个节点对应的节点类型,并根据节点类型,确定每个节点对应的标记信息,标记信息包括返回值与节点状态的对应关系;
其中,返回值可以为节点执行完成时返回的值,如返回值为Ture或False,节点状态可以包括等待状态和非等待状态,在等待状态下,节点需要等待特定事件才能返回,在非等待状态下,节点可以直接返回。
在具体实现中,行为树可以具有不同类型的节点,可以确定每个节点的节点类型,然后根据节点类型确定标记信息,标记信息的属性可以为字典。
具体的,标记信息可以包括如下表所示的8种情况:
在一示例中,可以通过图形来描述标记信息的8种情况,如图2,返回值Ture简写为T,False简写为F,等待状态/非等待状态进行区别显示,等待状态下为白色,非等待状态下染色为灰色。
在本发明一实施例中,节点类型可以包括叶子节点,叶子节点不具有调度功能,不拥有子节点,其可以控制非玩家对象的Entity执行特定动作去影响外部环境,如寻路和攻击,则根据节点类型,确定每个节点对应的标记信息的步骤可以包括如下子步骤:
若当前节点为叶子节点,确定当前节点的一个或多个返回值;确定每个返回值对应的节点状态。
由于叶子节点不拥有子节点,且其返回值也是确定的,则在当前节点为叶子节点时,可以直接确定当前节点的返回值及对应的节点状态。
以下对叶子节点进行详细说明:
1、计算节点(Compute)
行为树可以通过一个blackboard的字典去维持行为树的内部执行环境,行为树的相关节点可以通过blackboard的字典去获取内部执行环境中的状态,则计算节点可以执行特定语句来操作行为树的内部执行环境。
对于计算节点,其能够保证返回值为Ture,但在返回值为Ture时,并不能保证当前节点处于等待状态。
2、调用节点(Call)
调用节点的逻辑是可以将某个行为树调用在到当前节点的子节点上,作为当前节点下的子行为树来执行,以实现行为树复用。
对于调用节点,其能够保证返回值为True,且在返回值为Ture时,其能够保证当前节点处于等待状态。
3、条件计算节点(Condition)
在条件计算节点内,可以编写代码并执行,代码的执行结果即可以为条件计算节点的返回值。
对于条件计算节点,其不能够保证返回值为True,且也不能够保证当前节点处于等待状态。
4、动作节点(Action)
动作节点执行的是在脚本里导出的可供非玩家对象使用的接口,动作节点是扩充非玩家对象功能的最主要入口,其返回值可以与导出接口调用之后的返回值相对应。
对于动作节点,存在以下四种情况:
a)返回值能够保证为True,且节点状态能够保证为等待状态,例如,释放一个技能并等待结束,当前节点需要技能动画彻底播放完成之后才通知结束,是异步过程,会进入等待。
b)返回值能够保证为True,但节点状态不能够保证为等待状态,例如,获取当前的坐标,不是异步过程,不会进入等待。
c)返回值可能为True,也可能为False,但节点状态能够保证为等待状态,例如,寻找一个合适的技能进行释放,如果有则释放技能,并在释放完成后返回True,否则等待5秒之后再返回True,两个分支都是异步过程,都会进入等待。
d)返回值可能为True,也可能为False,且节点状态不能够保证为等待状态,例如,判断自身与仇恨最大目标之间的距离是否大于特定值,直接根据坐标之间计算距离即可,不是异步过程,不会进入等待。
5、等待节点(Wait)
等待节点是行为树与外部环境通信的及其重要的手段,在执行之后会进入等待状态,直到外部通知其所期望的特定事件到来,然后恢复执行,返回True。
对于等待节点,其能够保证返回值为Ture,但在返回值为Ture时,能够保证当前节点处于等待状态。
在本发明一实施例中,节点类型可以包括非叶子节点,非叶子节点具有调度功能,其可以用于对节点进行调度及为了辅助调度决策的内部执行环境处理,拥有子节点,则根据节点类型,确定每个节点对应的标记信息的步骤可以包括如下子步骤:
若当前节点为非叶子节点,确定当前节点的子节点对应的标记信息;采用子节点对应的标记信息,生成当前节点对应的标记信息。
由于非叶子节点拥有子节点,其返回值可以与子节点的返回值相关联,则在当前节点为非叶子节点时,可以先确定当前节点的子节点对应的标记信息,然后可以采用子节点对应的标记信息进行逻辑运算,得到当前节点对应的标记信息。
在本发明一实施例中,非叶子节点可以包括第一类非叶子节点和第二类非叶子节点,第一类非叶子节点的子节点数量为固定值,即其子节点的数量是固定的,第二类非叶子节点的子节点数量为非固定值,即其子节点的数量不固定,则在当前节点为非叶子节点时,确定当前节点的子节点对应的标记信息的步骤可以包括如下子步骤:
在当前节点为第一类非叶子节点时,分别确定当前节点的每个子节点对应的标记信息;在当前节点为第二类非叶子节点时,确定当前节点的第一个子节点对应的标记信息,并基于当前节点的第一个子节点对应的标记信息,依次确定当前节点的每个子节点对应的标记信息。
对于第一类非叶子节点:
由于其子节点的数量为固定值,则可以设置每个子节点对应的标记信息的运算规则,确定每个子节点对应的标记信息,然后采用所有的子节点对应的标记信息进行逻辑运算,得到当前节点的标记信息。
以下对第一类非叶子节点进行详细说明:
需要注意的是,由于以下涉及多个逻辑公式,在此对公式进行说明:
当前节点为N,当前节点的子节点为N.C,N.C0代表第一个子节点,N.C1代表第二个子节点,以此类推。
RunInfo为标记信息,N.R为当前节点N对应的标记信息,N.C0.R为第一个子节点N.C0对应的标记信息,N.C1.R为第二个子节点N.C1对应的标记信息,以此类推。
标记信息的key为返回值,简写为k,key为T表征返回值为Ture,标记信息的value为节点状态,简写为v,value为T表征节点状态为等待状态,value为F表征节点状态为非等待状态,则对于涉及集合的表示中,集合中第一位为key、第二位为value,即集合(k,v),(T,F)表征key为Ture,value为False,以此类推。
N.T表征当前节点在任何返回值时都保证的节点状态为等待状态,其可以采用如下逻辑公式:
相应的,N.C0.T表征当前节点的第一个子节点在任何返回值时都保证的节点状态为等待状态,其计算公式与N.T类似,以此类推。
1、装饰节点(Decorator)
装饰节点可以用于对子节点进行修饰,进而修改子节点的返回值,其可以包括Not节点、Always节点和NPass节点。
对于Not节点,其对子节点的返回值取非,而对应的value则保持与子节点一致,可以采用如下逻辑公式:
对于Always节点,其可以忽略子节点的返回值,而返回该节点内部存储的值,且可以结合子节点的RunInfo里的所有Value,若子节点保证进入等待状态,则当前节点也保证进入等待状态,可以采用如下逻辑公式:
N.R={(T,N.C0.T)}
对于NPass节点,其可以限制子节点在非玩家控制对象的生命周期内的执行次数,若由于次数限制无法执行则返回False,否则返回True,在返回True时,当前节点的节点状态与子节点的等待状态一致,在返回False时,当前节点一定不会进入等待状态,可以采用如下逻辑公式:
N.R={(F,F),(T,N.C0.T)}
2、根节点(Root)
根节点的RunInfo则直接复制子节点的RunInfo,可以采用如下逻辑公式:
N.R=N.C0.R
3、循环节点(While)
循环节点拥有两个子节点,第一个子节点可以用于执行判断,第二个子节点可以用于执行特定序列动作,当第一个子节点执行结束时返回True时,第二个子节点则会执行一遍,并进入第一个子节点重新开始判断。当第一个子节点返回False时,循环节点开始回溯并返回True。
基于此,循环节点需要先确定第一个子节点返回True/False,循环节点在返回True时进入等待状态,定义为VT,VT为True的条件是:当且仅当第一个子节点返回True或者第二子节点保证进入等待状态。循环节点在返回False时进入等待状态,定义为VF,VF为True的条件是:第一个子节点返回False,则可以采用如下逻辑公式:
vF=N.C0.R.get(F,T)
N.R={(T,vT∧vF)}
4、判断节点(IfElse)
判断节点的逻辑可以是先执行第一个子节点,根据第一个子节点的返回值去选择执行后面的两个分支,如果第一个子节点返回True,则执行第二个子节点,反之执行第三个子节点。
基于此,判断节点需要先计算出RunInfo的keys的取值范围,然后才能得到对应的values,在此定义kT,kF分别代表判断节点是否会返回True和False,kT,kF的确定都需要结合两条不同的执行路径,分别处理判断节点返回True或者False的情况,则可以采用如下逻辑公式:
kT=F∨(N.C0.R.get(T,F)∧N.C1.R.get(T,F))∨(N.C0.R.get(F,F)∧N.C2.R.get(T,F))
kF=F∨(N.C0.R.get(T,F)∧N.C1.R.get(F,F))∨(N.C0.R.get(F,F)∧N.C2.R.get(F,F))
keys={(T,kT),(F,kF)}
在确立了判断节点的返回值kT,kF的取值范围后,定义vT,vF为返回True和False状态下是否会保证进入等待状态,则可以采用如下逻辑公式:
values={(T,vT),(F,vF)}
对于第二类非叶子节点:
由于其子节点的数量为非固定值,无法针对每一个子节点设置对应的运算规则,则可以设置第一个子节点对应的标记信息的运算规则,确定第一个子节点对应的标记信息。
在确定第一个子节点对应的标记信息后,可以根据第一个子节点对应的标记信息确定第二个子节点对应的标记信息,根据第二个子节点对应的标记信息确定第三个子节点对应的标记信息,以此类推,直至确定所有的子节点对应的标记信息,然后采用所有的子节点对应的标记信息进行逻辑运算,得到当前节点的标记信息。
以下对第二类非叶子节点进行详细说明:
1、顺序节点(Sequence)
顺序节点的逻辑是顺次执行子节点,若某个子节点返回值是失败,则向该顺序节点的父节点返回失败;若所有子节点的返回值都是成功,则向该顺序节的父节点返回成功。
基于此,定义Sn来表征以N.C0,…,N.Cn的作为子节点的Sequence节点,此时S0.R=N.C0.R,在此定义下,拥有n个子节点的Sequence节点的标记信息等价于该节点的S(n-1).R,可以采用如下逻辑公式:
在一示例中,Sequence节点衍生出了一种AlwaysSequence节点,该节点并不关心子节点的返回值,总是尝试顺序的执行所有的子节点,执行完之后返回True,其只要有任何一个子节点进入等待状态即可进入等待状态,可以采用如下逻辑公式:
N.R={(T,v)}
在一示例中,Sequence节点还衍生出另外一种RandmSequence节点,执行到该节点后,以随机顺序对将所有子节点组成为一个Sequence节点进行执行,其需要分类讨论各种取值的条件,然后判断每种取值情况下的保证等待状态,并最后予以结合作为最后的标记信息,可以采用如下逻辑公式:
keys={(T,kT),(F,kF)}
values={(T,vT),(F,vF)}
2、选择节点(Select)
选择节点的逻辑是顺次执行子节点,若某个子节点返回值是Ture,则向该选择节点的父节点返回Ture,若所有子节点的返回值都是False,则向该选择节点的父节点返回False。
基于此,定义Sn来表征以N.C0,…,N.Cn的作为子节点的选择节点,此时S0.R=N.C0.R,在此定义Sn.R下保证返回True,则不需要考虑后续的子节点信息,直接返回即可,否则按照N.Cn+1.R是否包含F来分类讨论,拥有n个子节点的选择节点的标记信息等价于该节点的S(n-1).R,可以采用如下逻辑公式:
3、并行节点(Parallel)
并行节点可以依次执行所有子节点,直到其中任何一个子节点执行完成,返回True。并行节点主要是将一个持续性的动作和多个事件联系起来,在动作的持续期间可以通过特定事件进行打断。
基于此,定义Pn来表征以N.C0,…,N.Cn作为子节点的并行节点,此时P0.R=N.C0.R。在并行节点的定义下,只要有一个子节点不保证进入等待,则当前节点不保证进入等待状态,可以采用如下逻辑公式:
4、概率节点(Probability)
概率节点的逻辑可以是依照填写的概率参数来选择一个子节点去执行,并返回该子节点的执行结果。
基于此,可以先计算出当前节点的所有可能执行结果类型,对于每一种可能的执行结果的等待信息,都需要查询所有子节点对应执行结果的等待信息的逻辑与结果,只要有一个节点在此返回值下不保证等待,则此结果下不保证等待,可以采用如下逻辑公式:
values={(T,vT),(F,vF)}
步骤103,根据每个节点对应的标记信息,确定行为树中的死循环路径。
在确定标记信息后,可以判断环路上是否存在保证进入等待状态的节点,如果存在则该环路不为死循环路径,如果不存在则该环路为死循环路径。
在行为树陷入死循环状态下时,非玩家对象失去了行为树驱动的寻路、技能、动画、聊天等行为表现的能力,进而导致对玩家的互动无反馈,严重阻塞相关玩法和任务流程。
由于应用上述过程确定节点的标记信息,只需采用递归下降的方式,进行一次深度优先遍历即可将整棵行为树的所有节点的标记信息计算完成,无需手动遍历行为树中的路径,降低了死循环路径检测的复杂度。
在本发明一实施例中,步骤103可以包括如下子步骤:
确定满足第一预设条件的候选路径;当检测到候选路径中所有节点对应的标记信息满足第二预设条件时,判定候选路径为死循环路径。
其中,第一预设条件至少可以包括:
候选路径中开始节点和末尾节点为同一节点,候选路径中开始节点为指定节点,候选路径中任意相邻的节点相连通。
第二预设条件至少可以包括:
在候选路径的任一节点对应的标记信息中,均存在至少一返回值对应的节点状态为非等待状态。
在具体实现中,可以先从行为树中筛选出满足第一预设条件的候选路径,即候选路径至少需要满足以下三个条件:
1、候选路径中开始节点和末尾节点为同一节点,即候选路径是闭合的。
2、候选路径中开始节点为指定节点,指定节点可以为能够调用自身的节点,如根节点(Root)和循环节点(While),根节点(Root)和循环节点(While)能够无限制的自我调用,进而导致路径无限循环。
3、候选路径中任意相邻的节点相连通,即候选路径是连通的,上一个节点执行完成之后会执行到下一个节点。
在筛选出候选路径后,可以进一步判断候选路径中所有节点对应的标记信息是否满足第二预设条件时,若满足则判定候选路径为死循环路径,若不满足则判定候选路径不为死循环路径。
具体的,对于候选路径中的每个节点,若均存在至少一返回值对应的节点状态为非等待状态,则当该候选路径中的每个节点的返回值对应非等待状态时,该候选路径中不存在保证进入等待状态的节点,即为死循环路径。
在本发明一实施例中,还可以包括如下步骤:
对死循环路径进行修正。
在确定死循环路径后,可以死循环路径进行修正,使得非玩家对象不会进入无响应状态,避免了交互流程的阻塞,且避免了服务器由于死循环路径时的空跑带来的资源消耗,保证了游戏的稳定性。
而且,能够使得上层逻辑的编写者只需要关注流程原有逻辑即可,避免了依赖于非玩家对象的各种上层逻辑中断。
如图3,行为树中第0号节点为Root节点,第1号节点为Sequence节点,第1号节点对应的第2号节点和第3号节点,第2号节点和第3号节点均为叶子节点,分别执行Action为:选择仇恨Max目标、使用技能1后等待结束,则其标记信息对应的染色图如图4。
对该行为树进行修正,如图5,可以将原行为树修正为:第0号节点为Root节点,第4号节点为Select节点,第4号节点对应第5号节点和第8号节点,第5号节点为Sequence节点,第5号节点对应的第6号节点和第7号节点,第6号节点和第7号节点均为叶子节点,分别执行Action为:选择仇恨Max目标、使用技能1后等待结束,第8号节点为叶子节点,其执行Action为等待1秒,则其标记信息对应的染色图如图6。
在染色图中,返回值Ture简写为T,False简写为F,等待状态下染色为白色,非等待状态下染色为灰色。
可以理解,在原行为树中,存在一候选路径(节点0-节点1-节点2-节点1-节点0),该候选路径中每个节点均存在一返回值对应的节点状态为非等待状态,即如图4中颜色为灰色,则该候选路径为死循环路径,而在修正后的行为树中并不存在死循环路径。
在本发明实施例中,通过获取游戏中一非玩家对象对应的行为树,行为树包括多个节点,然后确定每个节点对应的节点类型,并根据节点类型,确定每个节点对应的标记信息,标记信息包括返回值与节点状态的对应关系,然后根据每个节点对应的标记信息,确定行为树中的死循环路径,实现了对死循环路径的检测,避免非玩家对象陷入死循环状态,提升了游戏的稳定性。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图7,示出了本发明一实施例提供的一种游戏检测的装置的结构示意图,具体可以包括如下模块:
行为树检测模块701,用于获取游戏中一非玩家对象对应的行为树,行为树包括多个节点;
标记信息确定模块702,用于确定每个节点对应的节点类型,并根据节点类型,确定每个节点对应的标记信息,标记信息包括返回值与节点状态的对应关系;
死循环路径确定模块703,用于根据每个节点对应的标记信息,确定行为树中的死循环路径。
在本发明一实施例中,节点类型包括叶子节点,以及非叶子节点。
在本发明一实施例中,标记信息确定模块702包括:
返回值确定子模块,用于若当前节点为叶子节点,确定当前节点的一个或多个返回值;
节点状态确定子模块,用于确定每个返回值对应的节点状态。
在本发明一实施例中,标记信息确定模块702包括:
子节点信息确定子模块,用于若当前节点为非叶子节点,确定当前节点的子节点对应的标记信息;
当前节点信息确定子模块,用于采用子节点对应的标记信息,生成当前节点对应的标记信息。
在本发明一实施例中,非叶子节点包括第一类非叶子节点和第二类非叶子节点,第一类非叶子节点的子节点数量为固定值,第二类非叶子节点的子节点数量为非固定值,子节点信息确定子模块包括:
第一标记信息确定单元,用于在当前节点为第一类非叶子节点时,分别确定当前节点的每个子节点对应的标记信息;
第二标记信息确定单元,用于在当前节点为第二类非叶子节点时,确定当前节点的第一个子节点对应的标记信息,并基于当前节点的第一个子节点对应的标记信息,依次确定当前节点的每个子节点对应的标记信息。
在本发明一实施例中,死循环路径确定模块703包括:
候选路径确定子模块,用于确定满足第一预设条件的候选路径;
死循环路径判定子模块,用于当检测到候选路径中所有节点对应的标记信息满足第二预设条件时,判定候选路径为死循环路径。
在本发明一实施例中,第一预设条件至少包括:
候选路径中开始节点和末尾节点为同一节点,候选路径中开始节点为指定节点,候选路径中任意相邻的节点相连通;
其中,指定节点为能够调用自身的节点。
在本发明一实施例中,第二预设条件至少包括:
在候选路径的任一节点对应的标记信息中,均存在至少一返回值对应的节点状态为非等待状态。
在本发明一实施例中,还包括:
死循环路径修正模块,用于对死循环路径进行修正。
在本发明实施例中,通过获取游戏中一非玩家对象对应的行为树,行为树包括多个节点,然后确定每个节点对应的节点类型,并根据节点类型,确定每个节点对应的标记信息,标记信息包括返回值与节点状态的对应关系,然后根据每个节点对应的标记信息,确定行为树中的死循环路径,实现了对死循环路径的检测,避免非玩家对象陷入死循环状态,提升了游戏的稳定性。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明一实施例还提供了一种电子设备,可以包括处理器、存储器及存储在存储器上并能够在处理器上运行的计算机程序,计算机程序被处理器执行时实现如上游戏检测的方法的步骤。
本发明一实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储计算机程序,计算机程序被处理器执行时实现如上游戏检测的方法的步骤。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种游戏检测的方法及装置、电子设备、存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (12)
1.一种游戏检测的方法,其特征在于,所述方法包括:
获取游戏中一非玩家对象对应的行为树,所述行为树包括多个节点;
确定每个节点对应的节点类型,并根据所述节点类型,确定每个节点对应的标记信息,所述标记信息包括返回值与节点状态的对应关系;
根据每个节点对应的标记信息,确定所述行为树中的死循环路径。
2.根据权利要求1所述的方法,其特征在于,所述节点类型包括叶子节点,以及非叶子节点。
3.根据权利要求2所述的方法,其特征在于,所述根据所述节点类型,确定每个节点对应的标记信息的步骤包括:
若当前节点为叶子节点,确定当前节点的一个或多个返回值;
确定每个返回值对应的节点状态。
4.根据权利要求2所述的方法,其特征在于,所述根据所述节点类型,确定每个节点对应的标记信息的步骤包括:
若当前节点为非叶子节点,确定当前节点的子节点对应的标记信息;
采用所述子节点对应的标记信息,生成当前节点对应的标记信息。
5.根据权利要求4所述的方法,其特征在于,所述非叶子节点包括第一类非叶子节点和第二类非叶子节点,所述第一类非叶子节点的子节点数量为固定值,所述第二类非叶子节点的子节点数量为非固定值,所述在当前节点为非叶子节点时,确定当前节点的子节点对应的标记信息的步骤包括:
在当前节点为第一类非叶子节点时,分别确定当前节点的每个子节点对应的标记信息;
在当前节点为第二类非叶子节点时,确定当前节点的第一个子节点对应的标记信息,并基于所述当前节点的第一个子节点对应的标记信息,依次确定当前节点的每个子节点对应的标记信息。
6.根据权利要求1所述的方法,其特征在于,所述根据每个节点对应的标记信息,确定所述行为树中的死循环路径的步骤包括:
确定满足第一预设条件的候选路径;
当检测到所述候选路径中所有节点对应的标记信息满足第二预设条件时,判定所述候选路径为死循环路径。
7.根据权利要求6所述的方法,其特征在于,
所述第一预设条件至少包括:
所述候选路径中开始节点和末尾节点为同一节点,所述候选路径中开始节点为指定节点,所述候选路径中任意相邻的节点相连通;
其中,所述指定节点为能够调用自身的节点。
8.根据权利要求6所述的方法,其特征在于,
所述第二预设条件至少包括:
在所述候选路径的任一节点对应的标记信息中,均存在至少一返回值对应的节点状态为非等待状态。
9.根据权利要求1所述的方法,其特征在于,还包括:
对所述死循环路径进行修正。
10.一种游戏检测的装置,其特征在于,所述装置包括:
行为树检测模块,用于获取游戏中一非玩家对象对应的行为树,所述行为树包括多个节点;
标记信息确定模块,用于确定每个节点对应的节点类型,并根据所述节点类型,确定每个节点对应的标记信息,所述标记信息包括返回值与节点状态的对应关系;
死循环路径确定模块,用于根据每个节点对应的标记信息,确定所述行为树中的死循环路径。
11.一种电子设备,其特征在于,包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至9中任一项所述的游戏检测的方法的步骤。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1至9中任一项所述的游戏检测的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811594389.1A CN109684217B (zh) | 2018-12-25 | 2018-12-25 | 一种游戏检测的方法及装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811594389.1A CN109684217B (zh) | 2018-12-25 | 2018-12-25 | 一种游戏检测的方法及装置、电子设备、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109684217A true CN109684217A (zh) | 2019-04-26 |
CN109684217B CN109684217B (zh) | 2022-06-14 |
Family
ID=66189511
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811594389.1A Active CN109684217B (zh) | 2018-12-25 | 2018-12-25 | 一种游戏检测的方法及装置、电子设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109684217B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110478893A (zh) * | 2019-08-23 | 2019-11-22 | 网易(杭州)网络有限公司 | 游戏事件执行方法及装置 |
CN110688301A (zh) * | 2019-08-22 | 2020-01-14 | 浙江口碑网络技术有限公司 | 服务器测试方法、装置、存储介质及计算机设备 |
CN111158881A (zh) * | 2019-12-31 | 2020-05-15 | 北京字节跳动网络技术有限公司 | 数据处理方法、装置、电子设备和计算机可读存储介质 |
CN111760294A (zh) * | 2020-07-07 | 2020-10-13 | 网易(杭州)网络有限公司 | 控制游戏中非玩家游戏角色的方法及装置 |
WO2021082759A1 (zh) * | 2019-10-30 | 2021-05-06 | 上海莉莉丝科技股份有限公司 | 可视化的逻辑执行方法、系统、设备和介质 |
CN113238855A (zh) * | 2021-07-13 | 2021-08-10 | 浙江大华技术股份有限公司 | 一种路径检测方法及装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105721297A (zh) * | 2016-01-28 | 2016-06-29 | 北京国电通网络技术有限公司 | 基于sdn网络中路由环路的检测方法及系统 |
WO2016200622A1 (en) * | 2015-06-12 | 2016-12-15 | Sorenson Media, Inc. | Detecting channel change in automatic content recognition fingerprint matching |
CN106775703A (zh) * | 2016-12-09 | 2017-05-31 | 网易(杭州)网络有限公司 | 应用逻辑的处理方法及装置 |
CN106874339A (zh) * | 2016-12-20 | 2017-06-20 | 北京华宇信息技术有限公司 | 一种有向循环图的展示方法及其应用 |
US20170225076A1 (en) * | 2016-02-09 | 2017-08-10 | Disney Enterprises, Inc. | System and Method of Implementing Behavior Trees When Modifying Attribute Values of Game Entities Based On Physical Token Detection |
CN107080945A (zh) * | 2017-05-11 | 2017-08-22 | 网易(杭州)网络有限公司 | 测试游戏中人工智能行为的方法、装置及电子设备 |
CN108780303A (zh) * | 2016-03-03 | 2018-11-09 | 玛格兹诺有限公司 | 具有行为树架构的机器人的控制过程 |
-
2018
- 2018-12-25 CN CN201811594389.1A patent/CN109684217B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016200622A1 (en) * | 2015-06-12 | 2016-12-15 | Sorenson Media, Inc. | Detecting channel change in automatic content recognition fingerprint matching |
CN105721297A (zh) * | 2016-01-28 | 2016-06-29 | 北京国电通网络技术有限公司 | 基于sdn网络中路由环路的检测方法及系统 |
US20170225076A1 (en) * | 2016-02-09 | 2017-08-10 | Disney Enterprises, Inc. | System and Method of Implementing Behavior Trees When Modifying Attribute Values of Game Entities Based On Physical Token Detection |
CN108780303A (zh) * | 2016-03-03 | 2018-11-09 | 玛格兹诺有限公司 | 具有行为树架构的机器人的控制过程 |
CN106775703A (zh) * | 2016-12-09 | 2017-05-31 | 网易(杭州)网络有限公司 | 应用逻辑的处理方法及装置 |
CN106874339A (zh) * | 2016-12-20 | 2017-06-20 | 北京华宇信息技术有限公司 | 一种有向循环图的展示方法及其应用 |
CN107080945A (zh) * | 2017-05-11 | 2017-08-22 | 网易(杭州)网络有限公司 | 测试游戏中人工智能行为的方法、装置及电子设备 |
Non-Patent Citations (3)
Title |
---|
A. MARZINOTTO, M. COLLEDANCHISE, C. SMITH AND P. ÖGREN: "Towards a Unified Behavior Trees Framework for Robot Control", 《2014 IEEE INTERNATIONAL CONFERENCE ON ROBOTICS AND AUTOMATION (ICRA)》 * |
JONYGLI: "planner.cpp", 《HTTPS://GITHUB.COM/TENCENT/BEHAVIAC/BLOB/A280FE24B3E7C357E607C397287A76A8BEC33DE3/SRC/HTN/PLANNER.CPP》 * |
圣空老宅: "游戏AI设计经验分享——行为树的研究", 《HTTPS://BLOG.CSDN.NET/ZHAISHENGFU/ARTICLE/DETAILS/51953993》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110688301A (zh) * | 2019-08-22 | 2020-01-14 | 浙江口碑网络技术有限公司 | 服务器测试方法、装置、存储介质及计算机设备 |
CN110478893A (zh) * | 2019-08-23 | 2019-11-22 | 网易(杭州)网络有限公司 | 游戏事件执行方法及装置 |
WO2021082759A1 (zh) * | 2019-10-30 | 2021-05-06 | 上海莉莉丝科技股份有限公司 | 可视化的逻辑执行方法、系统、设备和介质 |
CN111158881A (zh) * | 2019-12-31 | 2020-05-15 | 北京字节跳动网络技术有限公司 | 数据处理方法、装置、电子设备和计算机可读存储介质 |
CN111158881B (zh) * | 2019-12-31 | 2023-05-02 | 北京字节跳动网络技术有限公司 | 数据处理方法、装置、电子设备和计算机可读存储介质 |
CN111760294A (zh) * | 2020-07-07 | 2020-10-13 | 网易(杭州)网络有限公司 | 控制游戏中非玩家游戏角色的方法及装置 |
CN111760294B (zh) * | 2020-07-07 | 2023-10-13 | 网易(上海)网络有限公司 | 控制游戏中非玩家游戏角色的方法及装置 |
CN113238855A (zh) * | 2021-07-13 | 2021-08-10 | 浙江大华技术股份有限公司 | 一种路径检测方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109684217B (zh) | 2022-06-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109684217A (zh) | 一种游戏检测的方法及装置、电子设备、存储介质 | |
KR102577365B1 (ko) | 플레이어의 경쟁형 게임플레이 참여 장려 | |
US20140243079A1 (en) | Video game processing apparatus and video game processing program | |
US11235241B2 (en) | Route navigation system within a game application environment | |
CN111880877B (zh) | 一种动画切换方法、装置、设备及存储介质 | |
US11534694B2 (en) | Server-based game activity suggestions | |
CN103577704A (zh) | 游戏系统中npc处理事件的方法及装置 | |
CN110124307A (zh) | 操作控制方法和装置、存储介质及电子装置 | |
CN111701246B (zh) | 一种游戏ai的决策配置方法和装置 | |
US11235249B2 (en) | Server-based individual playtime estimation for game activity | |
Bell et al. | Ghost direction detection and other innovations for Ms. Pac-Man | |
KR20200002589A (ko) | 장려되는 계층적 게임플레이의 제시 | |
CN113658300B (zh) | 动画播放方法、装置、电子设备以及存储介质 | |
JP6704017B2 (ja) | ビデオゲーム処理プログラム、及びビデオゲーム処理システム | |
CN114570022A (zh) | 游戏资源处理方法、装置、设备及存储介质 | |
Braunschweiler et al. | A Two-Level Planning Framework for Mixed Reality Interactive Narratives with User Engagement | |
CN110399974A (zh) | 一种超参数的自动确定方法及装置 | |
KR20080067892A (ko) | 게임 모델링 장치 및 그 방법 | |
US20180147499A1 (en) | Controlling a user interface of a computer device | |
CN116351063B (zh) | 技能释放处理方法、装置、电子设备及存储介质 | |
CN117149339B (zh) | 基于人工智能的用户界面关系识别方法及相关装置 | |
US11504618B2 (en) | Server-based video help in a video game | |
CN109472363B (zh) | 可解释性竞争对手建模方法 | |
CN113856205A (zh) | 游戏中事件处理方法、装置、电子设备和存储介质 | |
KR102530298B1 (ko) | 악성 게임의 탐지 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |