【发布时间】:2017-11-12 23:16:00
【问题描述】:
我有一个随机数生成问题。我为游戏“猜数字游戏”制作了一个 AI,它工作得很好,直到玩家击中的数字 lower 比搜索的数字。之后 Math.random(); 可能,它很可能会产生负数。如果玩家击中的数字低于搜索的数字。 (AI 计算的数字范围由两个 nums 定义(nums 数组中最高的 lower[]; 比搜索的和数组中的最低 higher[]; 比搜索的) .
这里是 GitHub 上的完整代码,因为它太大而无法放在这里:https://github.com/lkobylanski/Guessing-number-game-1P-AI/blob/master/PvAv1.2.js
我的问题是,我如何正确调试应用程序以找到此类问题。我使用console.log(functionName) 来一一显示函数,以便它们被执行。我已经发出警报,显示数组、arrays[0]、arrays.length,但它没有帮助我,我被卡住了。我不知道我能做什么。
函数在执行这部分代码时开始产生否定:
else if(higher_l > 0 && lower_l > 0)
{ //losuje od 0 (ZERA) do (max-min+1) i dodaje + min;
guessed = Math.floor(Math.random()*((higher[0])-((lower[0]+1)+1))+(lower[0]+1));
if(guessed > drawn)
{
c2--;
document.getElementById("notes2").innerHTML = p2 + " remaining chances: " + c2;
higher.push(guessed);
higher_l = higher.length;
higher.sort(function(a, b) {return a-b;});
resultH = resultH + guessed + " ";
document.getElementById("higher").innerHTML = "Proper number is lower than: " + resultH;
counter = setTimeout(checkCounters, 100);
switch_trigger = setTimeout(switchPlayers, 2000);
return;
}
else if(guessed < drawn)
{
c2--;
document.getElementById("notes2").innerHTML = p2 + " remaining chances: " + c2;
lower.push(guessed);
lower_l = lower.length;
lower.sort(function(a, b) {return b-a});
resultL = resultL + guessed+ " ";
document.getElementById("lower").innerHTML = "Proper number is higher than: " + resultL;
counter = setTimeout(checkCounters, 100);
switch_trigger = setTimeout(switchPlayers, 2000);
return;
}
else if(guessed == drawn)
{
p2w++;
document.getElementById("all_wins").innerHTML = p1 + " wins: " + p1w + "/" + wins + "<br/>" + p2 + " wins " + p2w + "/" + wins;
if(p2w < wins)
{
document.getElementById("msg").innerHTML = "AI found the number: " + guessed + "first!<br/>" + currentp + " and gets a point!";
document.getElementById("next").disabled = false;
}
else if(p2w == wins)
{
alert("Winner is " + currentp + "!");
document.getElementById("msg").innerHTML = "AI found the number: " + guessed + " <br/> Player: " + currentp + " reached required number of: " + wins + " wins first!";
}
end = setTimeout(endMatch, 100);
return;
}
}
我知道代码本身可能比这更好,但我想在整个工作正常时对其进行改进。
【问题讨论】:
-
你应该做一些逐步调试。
-
我尝试在每个涉及猜测数字和扩展数组等的函数之后使用 console.log。还创建了显示数组、数组 [0]、arrays.length 的警报。移动:AI:70,我:100,AI:71,我:1,AI:-25(在屏幕上您可以看到数组已正确制作和排序:gyazo.com/6dc763cee81651002c6478ae3913e81e此处为 AI 下一步移动屏幕:gyazo.com/65457da3e13074b73953e3c14bc99984跨度>
-
我把 Math 函数读了 100 遍:guessed = Math.floor(Math.random()*((higher[0])-((lower[0]+1)+1)) +(下[0]+1));数学函数和数组都可以(或者在我看来)如果玩家选择的 nums 高于 比整个游戏搜索的结果,即使 AI picsk nums 低于这个问题也不会发生。我真的没有想法。
-
Math.random()本身不会产生负数。这就是您的代码对那些产生负数的随机数所做的事情。因此,您的问题的标题似乎不准确。 -
@JohnColeman 你说得对,解决这个问题,谢谢。
标签: javascript arrays sorting random negative-number