2017-09-10 1 views
2

그래서이 교수형 집행 게임에 관해 몇 가지 질문을했지만 (굉장한 답변을 얻었습니다.) "점수 키퍼"가 계속해서 문제를 풀어 왔습니다. 이 게임은 거의 내가 너무 필요하지만, 임의의 키가 전체 단어 다음을 누른 후에 ... 여기바닐라 행 자바 행맨 게임에서 "승리"시작

<!DOCTYPE html> 
<html> 
<head> 
    <title>Hangman</title> 
</head> 
<body> 
    <h1>Hangman!</h1> 

    <p> 
     <font size="+3"><span id="answer"></span></font> 
    </p> 
    <p>Lives: <span id="counter"></span></p> 
    <p id="wrongGuesses"></p> 
    <p>Wins: <span id="wins"></span></p> 
    <p>Losses: <span id="losses"></span></p> 


    <script type="text/javascript"> 

var word; 

var guess;  //user guess 
var letters = [];  //correctly guessed letters 
var wrongLetters = [];  //incorrectly guessed letters 
var counter;  //counts correct letters 
var losses = 0; 
var wins = 0; 


document.getElementById("losses").innerHTML = losses; 
document.getElementById("wins").innerHTML = wins; 

var wordList = ["cat", "dog", "wolf", "laser", "apple"];  //FILL LIST LATER!! 


//randomly chooses a word from the array and replaces letters with underscores 
function start() { 
    word = wordList[Math.floor(Math.random() * wordList.length)]; 
    counter = 7; 
    document.getElementById("counter").innerHTML = counter; 
    for (i = 0; i < word.length; i++) { 
     letters[i] = "__"; 
    } 

    document.getElementById("answer").innerHTML = letters.join(" "); 
    console.log(word); 

} 


//checks if letter is in the word or not 
function checkLetter() { 
    document.onkeyup = function(event) { 
     guess = event.key.toLowerCase(); 
     //var found = false; 
     for (i = 0; i < word.length; i++) { 
      if (guess === word[i]) { 
       letters[i] = guess; 
       document.getElementById("answer").innerHTML = letters.join(" "); 
       //found = true; 
      } 
     } 
     //wrong letters go into the wrongLetters array and are displayed 
     //if (found) return; 
     if (wrongLetters.indexOf(guess) < 0) { 
      wrongLetters.push(guess); 
      document.getElementById("wrongGuesses").innerHTML = wrongLetters.join(" "); 
      //every wrong guess subtracts one from the counter 
      counter--; 
      console.log(counter); 
      document.getElementById("counter").innerHTML = counter; 
      //when counter reaches 0 it's Game Over 
      //+1 to the losses if 7 words are missed 

      if (counter > 0 && letters.join("") === word) {    //THE ISSUE 
       document.getElementById("wins").innerHTML = wins + 1; 
       console.log(wins); 
       confirm("YOU WIN! Play Again?"); 
        wins++; 
        counter = 7; 
        letters = [ ]; 
        wrongLetters = [ ]; 
       start(); 
      } 

      else if (counter === 0) { 
       document.getElementById("losses").innerHTML = losses + 1; 
       console.log(losses); 
       confirm("YOU LOOSE... play again?"); { 
        losses++; 
        counter = 7; 
        letters = []; 
        wrongLetters = []; 
        start(); 
       } 
      } 
     } 
    } 
} 


start(); 
checkLetter(); 

</script> 
</body> 
</html> 

작성되었습니다 때까지이 "승리"기록에 남지 않습니다 모든 일은 내가 지금까지 가지고 무엇을 여기에 jsfiddle 링크가 있습니다 : https://jsfiddle.net/t57zfv3t/11/ 주된 문제는 발견 된 부울과 리턴과 관련이 있습니다. 그러나 그 문제를 해결할 방법을 찾지 못하는 것 같습니다. 누군가 통찰력이 있다면 그것은 크게 감사하겠습니다. 나는 이미이 일로 귀찮게 생각하는 사람에게 진심으로 사과드립니다. 감사!! 그것은 전체 단어 일치하는 경우에도 문자가 발견되면

답변

1

당신은 너무 너무 조건에 조언을

//wrong letters go into the wrongLetters array and are displayed 
if (found && letters.join("") !== word) return; 
+0

감사 것을 확인, 반환! 내가이 일을 할 때 거의 반대의 영향을 미칩니다 ... 마지막 편지를 추측 할 때 그 편지를 표시하지 않고 곧 "승리"알림으로갑니다. 그것은 분명히 제대로 작동하는 데있어 가장 가까운 것이지만, 우승 전/우승 중에 마지막 편지를 표시 할 수 있다면 정말 좋을 것입니다. –

+0

@ michael-wolfe 아하, 여기에 몇 가지 변경 사항이 있습니다. https://jsfiddle.net/9L5epmyL/ 성공 메시지가 표시되기 전에 DOM을 업데이트 할 시간이 없습니다. 잃는다면 같은 문제 일 수 있습니다. –

+0

멋진 외모와 기능! 모든 도움을 주셔서 감사합니다! –

관련 문제