a = 3;
b = 3;
c = 3;
turnCount = 1;
function decrease(x, y) //x represents a, b, c while y subtracts 1, 2, or 3//
//stuff I figured out//
所以我试图为游戏创建一个AI,其中有3个回合。 TurnCount 1和2是计算机,3是玩家转弯。在计算机转弯时,它们将始终从具有最高值的变量中减去1。有9个按钮可以从每个变量中减去1,2或3。任何将减去超过变量值的按钮都将被禁用。现在,我的问题是,如果有多个具有最高值的变量,我想随机化从哪个变量中减去。我的方法是:
function theAI()
{
highestValue = Math.max(a, b, c);
theArray = ["", a, b, c];
varToDecrease = theArray.indexOf(highestValue);
decrease(varToDecrease, 1);
}
然而,这种方法总是使a和b等于2,因此永远不会使用从变量中减去3的按钮。任何人都可以帮忙想出一种方法来随机化哪个maximumValue变量被减去,以便减去3个按钮可以适用于所有三个变量?
答案 0 :(得分:1)
您可以先找到最大值的所有索引,然后使用math random从数组中选择一个元素。
function theAI()
{
highestValue = Math.max(a, b, c);
theArray = ["", a, b, c];
var idx = array.indexOf(element);
while (idx != -1) {
indices.push(idx);
idx = array.indexOf(element, idx + 1);
}
varToDecrease = indices[Math.floor(indices.length * Math.random())];
decrease(varToDecrease, 1);
}
我在这里使用while循环来搜索数组中最高值的每个实例。 (它实际上接近于do-while语法)
首先,我将idx设置为数组中最高元素的第一个位置。由于我用Math.max找到了max元素,因此无法找到它。因此,当找到indexOf的内容时,它返回索引,当找不到某些内容时,它返回-1。
因此它将进入while循环,将最高元素的当前位置添加到数组,然后将idx设置为最高元素的下一个索引。如果在数组中只找到一个,它将返回-1,而while循环将结束。但是,如果idx不是-1,那意味着数组中还有另一个max元素,因此while循环将再次循环。