2016-11-12 95 views
2

试图从JS为孩子挑战#3完成Hang子手游戏。它要求限制玩家的猜测数量。Hang子手游戏试图限制猜测次数 - JavaScript

我想我需要将所有猜测转储到一个新的数组中,然后让游戏退出,一旦新的数组长度变得大于猜测数量,但它不工作。这本书中的提示是使用& &,但没有真正看到与其他条件一致的情况。

赞赏我哪里有什么想法错 -

//create an array of words 
    var words =["java","monkey","amazing","pankcake"]; 

    //pick a random words 
    var word= words[Math.floor(Math.random() * words.length)]; 

//set up the answer array 
    var answerArray=[]; 
    for(var i=0; i< word.length; i++){ 
    answerArray[i]="_"; 
    } 
    var remainingLetters=word.length; 

    //The game loop 
    while(remainingLetters >= 0) { 

    //show the player their progress 
    alert(answerArray.join(" ")); 

    //Get a guess from the player 
    var guess=prompt("guess a letter, or click cancel to stop playing"); 

    **//add guesses to an answerArray 
    var guessAll=""; 
     guessAll+=guess;** 

//convert toLowerCase 
    var guessLower=guess.toLowerCase(); 
    if(guessLower===null){ 
    break; 

    **} else if(guessAll.length >4) { 
    break;** 

} else if(guessLower.length !== 1){ 
    alert("Please pick single character"); 

    }else{ 
    //update the game state with the guess 
    for(var j=0; j<word.length; j++){ 
    if(word[j] ===guessLower){ 
     answerArray[j]= guessLower; 
     remainingLetters--; 
    } 
    } 
    } 
} 

//比赛结束循环 警报(answerArray.join(”“));警告(“你是一个好猜测!!答案是”+单词);

+0

可以说选中的单词是“java”吗?你只是想给用户4个尝试猜测单词,如果用户在4次尝试中没有猜到它,那么就说:对不起,你猜不出这个单词??? – HenryDev

回答

1

那么,在代码中有几点需要指出,看看你是否遵循。检查下面的代码片段:

//The game loop 
while(remainingLetters >= 0) { 

    //show the player their progress, Get a guess from the player, etc. 

    //add guesses to an answerArray 
    var guessAll=""; 
    guessAll+=guess; 

    // all other stuff 
} 

注意如何var guessAll="";循环?这意味着每次交互(每当循环进行时),您都将重新定义为guessAll作为空白,因此您正在擦除您应该跟踪的猜测。现在,如果你提出这个声明循环,就像这样:

// This is your answers array 
var guessAll=""; 

//The game loop 
while(remainingLetters >= 0) { 

    //show the player their progress, Get a guess from the player, etc. 

    //add guesses to an answerArray 
    guessAll+=guess; 

    // all other stuff 
} 

现在变量guessAll只初始化一次。在每个循环中,新的猜测会被附加到预先存在的值中,这个值将保留在循环之间,因为您不会再擦除它。

相信提示使用&&(这意味着AND)将适用于while检查:

while(remainingLetters >= 0 && guessAll.length < 4) { 
    ... 
} 

这样,它检查unguessed都remaningLetters和猜测的玩家尝试的数量。这两个条件必须是真实的:剩余未发现的字母数量必须大于或等于零,玩家必须尝试少于四次。 这也会导致检查else if(guessAll.length > 4) break;不必要,因为循环将在达到限制时终止。

然而,由于你有更长的单词(“惊人的”,“猴子”),玩家永远无法完成这个单词,所以这个限制应该提高。一个非常好的做法是把它变成一个参数,像这样:

var maximumTries = 10; 

(...) 

while (remainingLetters >= 0 && guessAll.length < maximumTries) { 
... 

它可以改善你的代码的可读性和它更容易维护。假设你后来发现10次尝试太困难了,你想要做15次:你只需要改变代码的第一行中的值,而不需要深入编程逻辑并准确地分析你应该在哪里改变它的循环中,对测试结果等 所以我对你的代码建议的修复方法是:

// set the maximum number of tries 
var maximumTries = 10; 

// create an array of words 
var words =["java","monkey","amazing","pancake"]; 

// pick a random word 
var word = words[Math.floor(Math.random() * words.length)]; 

// set up the answer array 
var answerArray=[]; 
for(var i=0; i< word.length; i++){ 
    answerArray[i]="_"; 
} 
var remainingLetters=word.length; 

// this will hold all the letters tried 
var guessAll=""; 

// The game loop 
while(remainingLetters >= 0 && guessAll.length < maximumTries) { 

    // show the player their progress 
    alert(answerArray.join(" ")); 

    // Get a guess from the player 
    var guess = prompt("guess a letter, or click cancel to stop playing."); 

    // add guesses to an answerArray 
    guessAll += guess; 

    //convert toLowerCase 
    var guessLower = guess.toLowerCase(); 
    if (guessLower === null) { 
     break; 
    } else if(guessLower.length !== 1){ 
     alert("Please pick single character"); 
    } else { 

     //update the game state with the guess 
     for(var j=0; j<word.length; j++){ 
      if(word[j] === guessLower){ 
       answerArray[j] = guessLower; 
       remainingLetters--; 
      } 
     } 
    } 
} 

您可能会看到它的行动在JS Fiddle。请记住,在编程中几乎总是有多种方式来实现相同的结果,这只是其中之一。