【问题标题】:Is it possible to display more detailed Function() info during debugging是否可以在调试期间显示更详细的 Function() 信息
【发布时间】: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


【解决方案1】:

(代表 OP 发布)

在使用调试器的时间稍长后,我找到了问题的根源。 Player 提供的数字不是 parseInt();所以它们是字符串,而来自 Math.random() 的 nums;在哪里整数。解析后一切正常。感谢大家,我吸取了教训! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2015-04-06
    相关资源
    最近更新 更多