JavaScript数字猜测器的行为与“ 0”值奇怪地

时间:2019-07-12 00:25:32

标签: javascript

我正在完成JavaScript Codecademy课程,并且遇到一个独立项目的麻烦,该项目需要您设计数字猜谜游戏。由于某些原因,当涉及到“ 0”时,它会错误地返回。

JavaScript和我并不是最好的朋友,但是我在一个相对简单的项目上遇到了困难,决定尝试其中一个“挑战自己”部分,但我根本无法使其工作,或找出问题所在。

function generateTarget() {
    return Math.floor(Math.random() * 10);
};

function compareGuesses(userGuess, computerGuess, targetNumber) {

  function getAbsoluteDistance() {
    const uGuess = Math.abs(generateTarget() - userGuess);
    const cGuess = Math.abs(generateTarget() - computerGuess);
    return uGuess - cGuess
  };

  if (getAbsoluteDistance() <= 0) {
    return true
  } else {
    return false
  };
};

// 'human' is input when return is true; 'computer' when return is false

function updateScore(winner) {
  if (winner === 'human') {
    humanScore ++;
  } else if (winner === 'computer') {
    computerScore ++;
  };
};

function advanceRound() {
  currentRoundNumber +=1;
};

从本质上讲,这是一个游戏,其中计算机生成一个随机的“目标”数字,您输入一个猜测数字,然后计算机生成一个猜测数字。根据您猜猜哪个数字的接近,您或计算机获胜。如果您猜出相同的数字,或者您的猜测是等距的,那么人类就是赢家。

现在(大约)可以正常工作,除非出现以下情况:

  1. “目标”号为0。(计算机始终获胜)
  2. 您和计算机猜测的数字相同。 (计算机总是赢了)
  3. 您和计算机猜出的数字与目标数字不同但等距(计算机始终获胜)

我想尝试一些基本的JavaScript,以便可以继续学习其他内容,但根本无法弄清问题所在或解决方法。我唯一能确定的是这些情况的共同点是,绝对距离计算中的某处总是有“ 0”。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

我想要:

function NumGuessGame(){
  this.computerScore = this.score = 0;
  this.guess = function(num){
    if(num === Math.floor(Math.random()*10)){
      this.score++;
    }
    else{
      this.computerScore++;
    }
    return this;
  }
}
var gg = new NumGuessGame;
gg.guess(9).guess(11).guess(7).guess(7);
if(gg.computerScore >= gg.score){
  console.log('Computer Wins');
}
else{
  console.log('You Win');
}

当然,您应该注意到在这种情况下计算机几乎总是会赢。您应该注意到赔率在这里升高:

function NumGuessGame(){
  this.computerScore = this.score = 0;
  this.guess = function(num){
    if(num === Math.floor(Math.random()*10)){
      this.score++;
    }
    else{
      this.computerScore++;
    }
    return this;
  }
}
var gg = new NumGuessGame;
gg.guess(4);
if(gg.computerScore >= gg.score){
  console.log('Computer Wins');
}
else{
  console.log('You Win');
}

请注意,上面的示例期望0-9的猜测,否则无论如何您都会输掉。

答案 1 :(得分:0)

使其具有互动性。根据您所说的,如果出现平局或猜测相同的数字(平局),则用户获胜。我认为这些评论表明了最初失败的原因,或者至少是我所看到的。您正在与两个不同的目标进行比较,您可以在小提琴中看到它,因为结果不一致。

const userinput = document.getElementById("user");
const computerinput = document.getElementById("computer");
const targetvalue = document.getElementById("target");
const roundcount = document.getElementById("round");
var humanScore = 0;
var computerScore = 0;
var rounds = 0;

document.getElementById("generate").addEventListener("click", function(e) {
		targetvalue.value = generateTarget();
});

document.getElementById("calc").addEventListener("click", function(e) {

let result = compareGuesses(userinput.value, computerinput.value, targetvalue.value);

if(result) humanScore++
else computerScore++
rounds++
roundcount.innerHTML = rounds;
alert("Score:  Human:  " + humanScore + ", Computer:  " + computerScore );
});

function generateTarget() {
    return Math.floor(Math.random() * 10);
}


function compareGuesses(userGuess, computerGuess, targetNumber) {

	const uGuess = Math.abs(targetNumber - userGuess);
  const cGuess = Math.abs(targetNumber - computerGuess);

if (uGuess - cGuess <= 0) {
    return true
  } else {
    return false
  }
}
<input id = "user" value="" placeholder ="user">
<input id = "computer" value="" placeholder ="computer"><br>
<input id = "target" value="" placeholder ="target">
<button id ="calc" type = "submit">
Submit
</button>
<button  id ="generate" type = "submit">
Generate Number
</button><br>
Round:  <span id = "round"></span>

该代码段应该可以轻松进行测试。没有添加任何东西来生成计算机猜测,但这类似于生成目标。