使用JavaScript跟踪号码猜测尝试

时间:2016-01-17 17:42:16

标签: javascript

我正在尝试构建一个简单的数字猜谜游戏numberGuess(),用于跟踪玩家的尝试次数,但如果玩家猜到已经猜到的数字,则不会跟踪尝试。

唯一不断发生的错误是,如果玩家猜测他不止一次猜测的第一个数字 - 游戏会在不应该的时候记录该尝试。但是,如果玩家猜测任何其他数字,但第一个不止一次,它的效果非常好。

例如,如果玩家按此顺序猜测:2,5,2,3,总尝试次数应该显示为3,但它显示为4。

但是,如果玩家按此顺序猜测2,5,5,3,则总尝试次数正确显示为3.

我有几个小时和几个小时修补这个代码,并试图在问这里之前解决这个问题,但是已经碰壁了。这似乎是一个我无法弄清楚的简单修复。如果你发现了修复这个小错误的错误,请告诉我!

function numberGuess () {
	var number = Math.floor(Math.random() * 100 + 1); // Generates a random number between 0 and 100

	var totalGuesses = []; // Array to stores all the guesses
 	
 	var guess = Number(prompt("Welcome to number guess!  Guess a number between 1 and 100")); // Prompts guessor to guess first number
 	
	while (guess != number) { //loop runs while user has not guessed the number

		if (!guess) { // User cancels prompts
			return;
		}
		else if (totalGuesses.indexOf(guess) >= 0) { // Checks to see if guess has already been guessed
			guess = prompt ("You already guessed that number before.  Give me another guess.");
		}
		else {
			totalGuesses.push(guess);
			if (guess > number) {
				guess = prompt ("Your number is too high.  Try Again.  Don't give up!");
			}

			else { 
				guess = prompt ("Your number is too low.  Try Again.  I know you can do it!");
			}
		}
	}
	
	// Guess is correct!				

	alert("Congratulations!  You guessed the number!  It took you " + (totalGuesses.length +1) + " attempts!");	
};

numberGuess();

1 个答案:

答案 0 :(得分:0)

问题在于if语句的以下分支:

else if (totalGuesses.indexOf(guess) >= 0) { // Checks to see if guess has already been guessed
   guess = prompt ("You already guessed that number before.  Give me another guess.");
}

在此代码中,您并未将猜测添加到totalGuesses数组中,因为它已经被猜到了。因此,即使猜测数量增加了一个,totalGuesses数组中的项目数也保持不变。

一个hacky解决方案是将猜测添加到totalGuesses数组中。但更好的解决方案是使用totalGuesses作为集合(仅限唯一值)并使用从0开始的计数器变量来跟踪用户所做的猜测次数。

此外,虽然您假设数组中的索引从0开始正确,但数组的length属性返回数组中的项数,即使索引从0,将始终返回正确数量的项目。因此,您不需要在结果中添加1。

alert("Congratulations!  You guessed the number!  It took you " + totalGuesses.length + " attempts!");  

我还注意到的一点是,如果用户在他/她的第一次猜测时输入的数字不是数字,代码会正确地将其转换为数字,但是如果用户输入的内容不是&# 39;他/她的第一次猜测后的数字,它将保持为一个字符串。