2017-04-24 10 views
0

私は、文字が単語に含まれているかどうかを確認するためにハングマンゲームを取得しようとしていますが、今のところ、その文字が単語のすべての文字に含まれているかどうかを確認しています。私は最初の推測の後に再び推測することはできません。JavaScript - Hangman - Logic Issue

setScreen("WelcomeScreen"); 
//variables 
var WordArray = ["apple", "word", "quiz"]; 
var currentWord = ""; 
var wrongCounter = 0; 
var bodyPartCounter = 0; 
var Guess = ""; 
//Welcome Screen Code 
onEvent("letsGoBtn", "click", function() { 
    setScreen("playingHangmanScreen"); 
    generateWord(); 
    setUpScreenElements(); 
}); 

function generateWord() { 
    currentWord = WordArray[randomNumber(0,2)]; 
    console.log(currentWord); 
} 
function setUpScreenElements(){ 
    for (var i = 0; i < currentWord.length; i++) { 
    showElement("letterArea" + [i]); 
    } 
    var showCorrectHint = "hintWord" + currentWord; 
    showElement(showCorrectHint); 
    console.log(showCorrectHint); 
} 
//Guessing Code 
onEvent("submitBtn", "click", function() { 
    Guess = getText("guessInputTxt"); 
    console.log("The guess for " + currentWord + " is: " + Guess); 
    checkGuess(); 
}); 

function checkGuess() { 
    for (var i = 0; i < currentWord.length; i++) { 
     if (Guess == currentWord.charAt([i])) { 
     setText("letterArea" + [i], Guess); 
     console.log("Correctly guessed letter is: " + currentWord.charAt([i])); 
     } 
     else { 
     wrongCounter++; 
     console.log("wrongCounter for " + currentWord + " is: " + wrongCounter); 
     if (wrongCounter == currentWord.length) { 
      bodyPartCounter++; 
      showElement("wrongGuessImg" + bodyPartCounter); 
      setText("livesLeftNumber", (6-bodyPartCounter)); 
     } 
     if (bodyPartCounter === 6) { 
      setScreen("gameOverScreen"); 
     } 
     } 
    } 
    resetGuessInput(); 
    } 

function resetGuessInput() { 
    setText("guessInputTxt", " "); 
    Guess = " "; 
    wrongCounter = 0; 
} 
//Game Over Screen and Play Again Button 
onEvent("playAgainBtn", "click", function() { 
    hideElement("hintWord" + currentWord); 
    generateWord(); 
    setUpScreenElements(); 
    setScreen("playingHangmanScreen"); 
    for (var i = 0; i <currentWord.length; i++) { 
    setText("letterArea" + [i], " "); 
    } 
    for (var j = 1; j < 7; j++) { 
    hideElement("wrongGuessImg" + [j]); 
    } 
    bodyPartCounter = 0; 
    wrongCounter = 0; 
    setText("livesLeftNumber", "6"); 
}); 
//Victory Screen 
onEvent("goHomeBtn", "click", function() { 
    setScreen("WelcomeScreen"); 
}); 

私はこのコードを添付しているだけでなく、実際にアプリを見るためのリンクも含めています。事前に

Here's a link to the app

ありがとう!

checkGuess関数は、文字が単語(またはしない)に表示される場所最初に決定する必要がある

答えて

0

、その後、ボードを一度更新し、代わりに各文字のためにそれを更新する:

幸いにも
function checkGuess() { 
    var foundAtIndex = -1; 
    for (var i = 0; i < currentWord.length; i++) { 
    if (Guess == currentWord.charAt([i])) { 
     foundAtIndex = i; 
     break; 
    } 
    } 

    if (foundAtIndex >= 0) { 
    setText("letterArea" + [foundAtIndex], Guess); 
    // etc... 

、Javascriptが提供文字列の場合はIndexOf関数なので、ループを完全に削除し、最初の部分を次のように集約することができます。

var foundAtIndex = currentWord.indexOf(Guess);