gpt4 book ai didi

javascript - 动态创建匿名函数?

转载 作者:行者123 更新时间:2023-11-29 17:19:33 25 4
gpt4 key购买 nike

我正在研究简单的进化 AI。我需要动态生成一个匿名函数。为此,我有一个条件和操作列表:

   var conditions = [
function () { return enemyNear(), },
function () { return mySpeed() > 5; },
function () { return 1 === 1; }];
var actions = [
function () { return alert('walk'); },
function () { return alert('jump'); }
function () { return alert('attack'); } ]

代码选择其中一个来生成一个新函数:

condition = conditions [Math.floor(Math.random()*conditions .length)];
actions = conditions [Math.floor(Math.random()*actions .length)];

如果选择的条件是enemyNear(),选择的 Action 是walk(),我如何生成简单的匿名函数?

behavior = function() {
if(enemyNear()) {
walk();
}
}

如果需要,我可以更改数组的保存方式。如何做到这一点?

所有字符行为都在这样的循环中调用:

for(i=0,i<chars.length,i++) {
chars[i].behavior.call();
}

最佳答案

最简单的方法是只将函数放在数组中:

var conditions = [
enemyNear,
function () { return mySpeed() > 5; },
function () { return 1 === 1;
}];
var actions = [walk, attack, jump];

然后你可以将behave定义为:

var behave = function(condition, action) {
if(condition()) {
action();
}
}

并像这样使用它:

behave(conditions[2], actions[1]);

这里,21 可以是随机生成的数字,如下所示:

var getRandomInt = function (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}

var actRandomly = function (conditions, actions) {
behave(
conditions[getRandomInt(0, conditions.length -1)],
actions[getRandomInt(0, actions.length -1)]
);
};

这样调用它:

actRandomly(conditions, actions);

当然这只是提出的想法,并没有条理清晰。

为了好玩,我创建了一个 Basic jsFiddle Demo Version .


注意:定义变量时始终使用var。不要污染全局范围。

关于javascript - 动态创建匿名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13982552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com