Actionscript 3 ActionScript3中的动态比较

Actionscript 3 ActionScript3中的动态比较,actionscript-3,flash,variables,comparison,Actionscript 3,Flash,Variables,Comparison,我正在为AS3中的游戏创建AI。为此,我需要能够运行多个检查,以确定AI是否执行特定任务 我需要能够存储比较运算符(例如==)或整个比较(例如v1==v2) 如何将其存储为变量或允许类似用法的东西?v1==v2返回一个对象(布尔值),因此您可以使用它来存储它 至于存储操作符,我认为这不是任何OOP语言都能做到的。。。 在AS3中,您可以求助于eval函数,但这会损害性能,因此我建议您实现一个为您这样做的函数->例如,在较差的伪代码中: const EQUAL:int = 0; const LES

我正在为AS3中的游戏创建AI。为此,我需要能够运行多个检查,以确定AI是否执行特定任务

我需要能够存储比较运算符(例如==)或整个比较(例如v1==v2)


如何将其存储为变量或允许类似用法的东西?

v1==v2
返回一个对象(布尔值),因此您可以使用它来存储它

至于存储操作符,我认为这不是任何OOP语言都能做到的。。。
在AS3中,您可以求助于
eval
函数,但这会损害性能,因此我建议您实现一个为您这样做的函数->例如,在较差的伪代码中:

const EQUAL:int = 0;
const LESS_THAN:int = 1;
etc...

function compare(v1, v2, op):Boolean
   switch(op)
       case EQUAL
          return v1 == v2
       etc...
因此,可以使用int变量来存储比较运算符。
如果使用ASC2编译,还可以考虑内联此函数

如果你计划对很多特定情况进行硬编码,我还建议你重新考虑你的AI逻辑:S(如果不是这样的话,就忽略这一点)。

你想了解的。因为我们谈论的是人工智能,Prolog就是这种编程的典型例子。更严格地说,解决这类问题存在着不同的算法,其中一大类被称为isfiability算法。以下是一些已知解算器的列表:

在处理此类问题时,您可能希望使用某些构造,特别是当它们随着时间的推移而演变时:。通过仔细模拟您的情况,您可以避免重复重新计算状态。例如,如果模型的某些特征仅在某个条件变为真后才被激活,则您可以通过转换到暗示该条件真值的状态对其进行建模。为了给你一个更具体的例子,假设你有一个系统,其中有一个玩家角色和一天中的时间。如果白天的时间是
夜晚
,则角色可以执行
睡眠
动作,否则角色执行的动作是
漫无目的地四处游荡
。然后,您可以创建状态
day
night
,如果由游戏环境输入,这两个状态都将具有功能
characterAction
。当调用
characterAction()
时,游戏循环将不知道环境的状态,但角色将执行正确的操作

但将系统的状态保存为定义状态的所有变量的向量可能更为有利。当您添加更多变量时,后者的伸缩性更好。例如,您可以将游戏模型定义为可能的状态转换


总之,您需要开始做一些事情,并在实现时遇到问题时询问更多具体的例子。我不认为好的解决方案仅限于我所提到的。很可能不是。这似乎是最好的选择。我硬编码我的人工智能仅仅是因为它是一个小项目。对于一个更大的项目(有一个半复杂的AI),我会使用AI脚本。