2017-04-27 8 views
0

私は現在、私のコーディングクラスのプロジェクトに取り組んでいます。私は自分のコードに問題があります。私のコードはwrongLetters配列に正しい文字を追加していますが、私はその理由を確信していません。 2番目の正しい文字とそれ以降の文字が入力されている場合にのみこれを行います。つまり、正しい文字を正確に推測すれば、それは正しい文字配列に追加されますが、それ以降に正しい文字があれば、correctLettersとwrongLettersいつそれを修正するだけに追加する必要があります。あなたが助けてくれるなら、私は非常に混乱しています。ありがとうございました。誰かがHangmanの推測手紙の問題を私に助けてくれますか?

This link will bring to my current code on CodePen. With the HTML and CSS. You will find the issue in the JS portion of my code thank you, which is below as well.

var guessWords = ["school", "test", "quiz", "pencil", "ruler", "protractor", "teacher", "homework", "science", "math", "english", "history", "language", "elective", "bully", "grades", "recess", ] 
var secretWord = guessWords[Math.floor(Math.random()*guessWords.length)]; 
var wrongLetters = [] 
var correctLetters = [] 
var repeatLetters = [] 
function startGame() { 
    var testWord = document.getElementById("randTest").innerHTML = secretWord; 
    var correctLettersOUT = ""; 
    document.getElementById("currentGuess").innerHTML = secretBlanks(secretWord) 
    function secretBlanks(secretWord) { 
     for (var i = 0; i < secretWord.length; i++) { 
     correctLettersOUT+=("_ "); 
     } return correctLettersOUT; 

}} 
function correctWord() { 
    var guessLetter = document.getElementById("guessLetter").value; 
    document.getElementById("letter").innerHTML = guessLetter; 

for (i=0; i < secretWord.length; i++) { 
    if (correctLetters.indexOf(guessLetter) === -1) 

     if (guessLetter === secretWord[i]) { 
      correctLetters.push(guessLetter); 
     } else if(wrongLetters.indexOf(guessLetter) === -1) { 
      wrongLetters.push(guessLetter); 
     } 
} 

    console.log(correctLetters); 
    console.log(wrongLetters); 
    console.log(repeatLetters); 
} 

答えて

0

あなたのforループで条件を参照してください - 最初の繰り返しで、手紙は秘密の単語の最初の文字とは異なり、wrongLettersに存在しない場合、あなたはこの配列に追加します。
まず、秘密の単語に文字が含まれているかどうかを確認し、次にこの文字を含む配列を決定します。 (あなたがindexOfまたはES6でincludes機能を使用することができたときにBTW。なぜループでそれを確認する?)

0
var guessWords = ["school", "test", "quiz", "pencil", "ruler", "protractor", "teacher", "homework", "science", "math", "english", "history", "language", "elective", "bully", "grades", "recess", ] 
var secretWord = guessWords[Math.floor(Math.random()*guessWords.length)]; 
var wrongLetters = [] 
var correctLetters = [] 
var repeatLetters = [] 
function startGame() { 
    var testWord = document.getElementById("randTest").innerHTML = secretWord; 
    var correctLettersOUT = ""; 
    document.getElementById("currentGuess").innerHTML = secretBlanks(secretWord) 
    function secretBlanks(secretWord) { 
     for (var i = 0; i < secretWord.length; i++) { 
     correctLettersOUT+=("_ "); 
     } return correctLettersOUT; 

}} 
function correctWord() { 
    var guessLetter = document.getElementById("guessLetter").value; 
    document.getElementById("letter").innerHTML = guessLetter; 

for (var i = 0; i < secretWord.length; i++) { 
    if (correctLetters.indexOf(guessLetter) === -1) 

     if (guessLetter === secretWord[i]) { 
      correctLetters.push(guessLetter); 
      break; 
     } 
} 
    if(wrongLetters.indexOf(guessLetter) === -1 && correctLetters.indexOf(guessLetter) === -1) { 
     wrongLetters.push(guessLetter); 
    } 

    console.log(correctLetters); 
    console.log(wrongLetters); 
    console.log(repeatLetters); 
} 

は問題がwrongLetters配列に文字を追加したコードが正しいのためにチェックしていたforループの中にあったということでしたしたがって、正しい文字が2の場合、ループは文字1と照合し、同じ文字ではなかったのでwrongLetters配列に追加します。

チェックをループ外に移動し、正しい配列に文字が追加されました。今、それはcorrectLettersアレイに追加されたら、あなたはその後、複数回以上同じ文字を推測する場合、

あなたがその振る舞いをしたくない場合は、単に

if (guessLetter === secretWord[i])

からチェック場合は、最初の変更〜

if (guessLetter === secretWord[i] && correctLetters.indexOf(guessLetter) === -1)

+0

ありがとうございました! – MilkyBoii

関連する問題