首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何阻止随机数的再生?

如何阻止随机数的再生?
EN

Stack Overflow用户
提问于 2014-02-18 06:04:38
回答 2查看 1K关注 0票数 0

我正在创建一个儿童猜数游戏,其中生成一个随机数(介于1到50之间),你必须一直猜测这个数字,直到你找到生成的数字。您收到反馈,您的猜测是太高还是太低,以更好地告知您的猜测。下面是我想出的代码,但问题是,我似乎找不到随机数。似乎每个猜测都重新生成了这个数字。在猜准之前,我怎样才能使每个猜测都使用相同的数字?

代码语言:javascript
复制
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro' rel='stylesheet' type='text/css'>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
    <form id ="game" action="javascript:void(checkGuess())">
        <p class="owlOne">I'm thinking of a number between 1 and 50.</p>
        <br class="clear" />
        <p class="owlTwo"><input id="guess" type="text"><input id="button" type="submit" value="Guess!"></p>
        <br class="clear" />
        <p class="owlOne"><span id="response">Can you guess what it is?</span></p>
    </form>

<script>
function checkGuess() {
    var guess = Number(document.getElementById('guess').value); // Assigns guessed number to variable.
    var number = Math.floor(Math.random() * 49 + 1); // Generates a random number between 1 and 50.

    // Guessed number is correct.
    if (guess == number) {
        document.getElementById("response").innerHTML= "Congratulations, you guessed correctly!";
    }

    // Guessed number is within 5 above.
    else if (guess > number && guess <= number+5) {
        document.getElementById("response").innerHTML= "You're so close! Just a little bit lower.";
    }

    // Guessed number is within 5 below.
    else if (guess < number && guess >= number-5) {
        document.getElementById("response").innerHTML= "You're so close! Just a little bit higher.";
    }

    // Guessed number is at least 1, but more than 5 below.
    else if (guess < number-5 && guess >= 1) {
        document.getElementById("response").innerHTML= "Too low! Guess again.";
    }

    // Guessed number is no more than 50, but less than 5 above.
    else if (guess > number+5 && guess <= 50) {
        document.getElementById("response").innerHTML= "Too high! Guess again.";
    }

    // Guessed number is not within the 1 - 50 range.
    else {
        document.getElementById("response").innerHTML= "Remember, the number I'm thinking of is between 1 and 50.";
    }
}
</script>

</body>
</html>

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-18 06:05:42

移动

代码语言:javascript
复制
var number = Math.floor(Math.random() * 49 + 1);

外部的函数。然后,这个数字将只在页面加载时生成,而不是每次调用该函数时都生成。

number将成为一个全局变量,也可以在函数中访问。

票数 1
EN

Stack Overflow用户

发布于 2014-02-18 06:09:02

每次调用该函数时,它都是将数字重新定义为一个新的随机数。如果您将声明移出函数之外,则不会在每次调用checkGuess时重新定义它;

您的代码应该类似于

代码语言:javascript
复制
 var number = Math.floor(Math.random() * 49 + 1); 

   function checkGuess() {
      // code
   }

不过,您应该注意,这会将数字放在全局范围内,您也可以这样做

代码语言:javascript
复制
var checkGuess = (function(number) {
   return function(){
      // code that was in checkGuess(){

   } 
})(Math.floor(Math.random() * 49 + 1));

这样做是将checkGuess函数返回给变量,但是现在代码可以访问number变量,因为它位于闭锁中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21845576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档