【问题标题】:HTML5/JavaScript comparing two randomly generated numbersHTML5/JavaScript 比较两个随机生成的数字
【发布时间】:2018-04-09 21:37:07
【问题描述】:

所以我正在制作一个游戏,通过在 HTML5 画布上单击它们来打开盒子并尝试匹配盒子内的数字(长话短说,获得匹配 = 胜利,即第一个盒子可能是 5,如果第二个盒子也是5,我赢了)。

当一个框被点击时,会在一定范围内产生一个随机数。我需要的是一种比较生成的数字的方法,以检查玩家是否赢了,或者他们是否需要继续打开盒子。

这些盒子是这样工作的:

    var rect = {
        x: 30,
        y: 150,
        width: 100,
        height: 100
    };

    function getMousePos(canvas, event) {
        var rect = canvas.getBoundingClientRect();
        return {
            x: event.clientX - rect.left,
            y: event.clientY - rect.top
        };
    }

我曾想过存储随机生成的数字,如下所示:

var firstChoice = Math.floor(Math.random() * (10 - 5 + 1) + 10);
var secondChoice = Math.floor(Math.random() * (10 - 5 + 1) + 10);

但我不知道如何让程序识别何时需要为下一个框而不是 firstChoice 运行 secondChoice、thirdChoice、fourthChoice 等。

有什么建议吗?

【问题讨论】:

  • 当你有一个变量列表时,是时候使用数组来存储了。
  • 不清楚你在问什么。如果每个框对应一个变量,那么每次点击后,可以比较两个变量,检查是否相等。您需要添加更多代码/详细信息
  • @smythdev 如果您只是询问如何保留值的存储,则可以使用 sessionStorage 在客户端上的浏览器会话期间保留值。但不清楚你在问什么
  • @AdamMcGurk 嗨,我要问的是如何让程序识别何时使用其他变量。即第一个盒子打开将是 firstChoice,第二个盒子打开将是 secondChoice,等等。
  • @smythdev 你能给我一个例子来说明这些“盒子”在代码中的样子吗?这将有很大帮助

标签: javascript html canvas random html5-canvas


【解决方案1】:

如果您正在寻找的只是一种存储和比较数据的方法...我会使用 sessionStorage 来存储第一个点击的数据,然后进行比较,直到找到匹配项:

// Player clicks box and generates number before the following function is called
function checkNumber(randomNumberGeneratedByRandomNumberGenerator) {

    // Checks to see if there is a number already stored
    if (sessionStorage.getItem("firstNumberClicked")) {

        // Retrieve the stored number to use for comparison
        const firstNumberClicked = sessionStorage.getItem("firstNumberClicked");

        // Compare numbers, if they are exactly equal, hooray for user...if not, boo for user.
        if (firstNumberClicked == randomNumberGeneratedByRandomNumberGenerator) {
            alert("hooray, you won user!!!!");
            sessionStorage.removeItem("firstNumberClicked");
        } else {
            alert("sorry user, better luck next time :(");
        }
    } else {

        // There is not a number that already exists in storage, store the number passed to the function
        sessionStorage.setItem("firstNumberClicked", randomNumberGeneratedByRandomNumberGenerator);
    }
}

生成随机数后立即调用此函数

【讨论】:

  • 谢谢!我现在就试一试。里面有什么需要更换的吗?喜欢变量名吗?
  • @smythdev 唯一需要替换的是将 randomNumberGeneratedByRandomNumberGenerator 替换为生成随机数的函数的返回值。
  • 到达那里,但似乎不太正确。一旦第一个盒子被打开,它就宣布损失,而当只打开一个盒子时,这是不可能的。如果它确实让我打开 2 个盒子,有时即使 2 个随机数相同,它也会造成损失。它似乎在记住旧数字。
  • @smythdev 编辑您的原始帖子并向我展示您如何调用所有函数,因为它对我有用
  • 好的新开发,我将 firstChoice 的声明移到 randomBox() 中而不是在程序的开头,并且还添加了 "sessionStorage.removeItem("firstNumberClicked"); 到 loss 语句中,现在它似乎可以按我的意愿工作了。非常感谢您的帮助和耐心!
猜你喜欢
  • 1970-01-01
  • 2014-10-02
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
相关资源
最近更新 更多