2016-11-12 2 views
2

JSの子供からハングマンゲームを挑戦しようとしました。それは、プレイヤーの推測数を制限するように求めています。ハングマンゲーム推測数を制限しようとしています - JavaScript

私はすべての推測を新しい配列にダンプしてから、新しい配列の長さが推測の数より大きくなってもゲームが終了しないと思っていました。本のヒントは、& &を使用することですが、他の条件がどこに配置されるのかは実際に分かりません。

は私がどこに行った上の任意の考えを感謝wrong-ゲームの終わりが 警告(answerArray.joinを(」「))ループ//

//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--; 
    } 
    } 
    } 
} 

。 アラート(「あなたは良い推測家です!答えは「+単語」です)。

+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とプレイヤーが試した推測の量をチェックします。両方の条件が満たされていなければなりません。残りの未知の文字の数はゼロ以上でなければなりません。また、プレイヤーは4回未満試行しなければなりません。 これはまた、このチェックが限界に達するとループが終了するため、else if(guessAll.length > 4) break;を不要にする効果があります。

しかし、長い単語(「驚く」、「猿」)を使用すると、プレーヤーは4回の試行で単語を完成することができないため、この制限を上げる必要があります。

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のアクションでそれを見ることがあります。だからあなたのコードのための私の提案の修正がある など、結果をテスト、ループ内でそれを変更。 プログラミングでは、同じ結果を達成するための方法はほぼ常に複数ありますが、これは1つの方法に過ぎません。

関連する問題