2017-09-09 1 views
0

가 이미이 게임이 대답에 대한 하나 개의 질문을 했어 바닐라 자바 ​​스크립트 교수형 집행 인의 기능을 재설정,하지만 난 내 "승리"와 "손실"을 추적 한 다음 후 내 임의의 단어를 다시 설정하라는에 붙어 점점 계속 승리 또는 손실. 여기에 지금까지 가지고 무엇 :은 카운터 점수와

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

 
document.getElementById("counter").innerHTML = counter; 
 
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 wordList 
 
var word = wordList[Math.floor(Math.random() * wordList.length)]; 
 

 
//choosen word is replaced with 
 
function start() { 
 
    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(" "); 
 
     counter--; 
 
     console.log(counter); 
 
     //+1 to the losses if 7 words are missed 
 
     if (counter === 0) { 
 
     document.getElementById("losses").innerHTML = losses + 1; 
 
     console.log(losses); 
 
     confirm("play again?"); { 
 
      counter = 7; 
 
      letters = []; 
 
      wrongLetters = []; 
 
      start(); 
 
     } 
 
     } 
 
    } 
 
    } 
 
} 
 

 
//need the counter to subtract 1 with every wrong guess 
 
//when counter hits zero losses = losses + 1 
 
//make a wins var that adds 1 when word is guessed 
 
//reset if either are 
 

 

 
start(); 
 
checkLetter();
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <title>Hangman</title> 
 
</head> 
 

 
<body> 
 
    <h1>Hangman!</h1> 
 
    <span>Just start writing to play.</span> 
 

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

 
</body> 
 

 
</html>

카운터 ALMOST 노력을! 그것은 7에서부터 카운트 다운되고, 그것이 0에 도달 할 때 손실에 1을 더하는 것으로 보인다. 그러나 표시되는 카운트는 꺼져 있습니다 (콘솔에 기록 된 카운트가 올바르게 보이더라도).

또 다른 문제는이 "손실"카운트가 지난 한 경우에도 카운터 리셋을 계속 추가하고 다시 공을 명중하지 않을 것입니다. 이전과 같이 또한

, 나는 플레이어가 먼저 대답을 실패한 후 새로운 임의 단어를 잡기 위해 시도, 게임은 같은 단어를 선택합니다. 이러한 문제의 대부분은 내 변수의 범위를 처리해야처럼

는 느낌,하지만 난 시도 재 작업의 아무도 (이 상황을 악화하지 않는 경우) 어떤 영향을 갖고있는 것 같아요 없습니다. 나는 여기서 많은 것을 묻고있다. 그러나 누군가가 올바른 방향으로 나를 가리킬 수 있다면 그것은 대단히 감사하게 될 것이다!

+0

는 손실이 합산되지 함께 문제를 해결 한 것으로 보이지만, 어떤 이유로 나는를 얻을 수 없다 변화시킬 단어 ... 무작위 생성기를 시작 함수 안에 넣으려고했으나, 상황이 악화되었습니다. –

답변

0

무작위로 단어를 고치기 시작합니다.

는 현재 외부의 기능 범위에서 정의 될 필요가 있도록 여러 가지 기능에 액세스 할 필요 word 가변. 그러나 당신은 start() 함수 안에서 매번 새로운 것을 설정하고 싶습니다. 변수를 함수의 외부에 선언하면 가능하지만 으로 설정되어 있습니다. 카운터를 재설정해야합니다.

//randomly chooses a word from wordList 
var word 

//choosen word is replaced with 
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); 
} 

카운터가 변경 될 때 html을 업데이트하는 것처럼 보이지 않으므로 카운터가 작동하지 않습니다. 각 추측과 같은 뭔가가 필요 : (위의 반대의 종류) 당신은 단지 HTML을 변경하지만 손실이 변수하지 때문에 손실이 증가하지 않는

document.getElementById("counter").innerHTML = counter; 

counter--; 
console.log(counter); 

. 둘 다 필요합니다

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

하나 미묘한 문제가 있습니다 - 당신은 당신이 처음 시작할 때이의 keyup 입력을 포함한 모든 keyups을 사로 잡고있다. 이 같은 만 문자를 잡을 수 : 확인 ("다시 재생")에서 손실 ++ 추가

document.onkeyup = function(event) { 
    // don't catch numbers, punctuation, enter, etc. 
    if (!(event.which <= 90 && event.which >= 65)) return 
+0

이제 게임 사용자가 올바른 단어를 사용하도록하는 방법을 알아내는 데 어려움을 겪고 있습니다. 7에서 카운트 다운 카운트에서 단어를 잘못 입력하는 것은 간단했는데 0을 입력하면 손실이 발생했습니다. 분명히 카운터는> 0이되어야하지만, 어떻게 든 완전한 단어가 채워져 있는지 확인해야합니다. 나는 그 표현 방법을 너무 확신 할 수 없다고 생각합니다. –

+0

그래, 다음 도전처럼 보입니다. 어쩌면'if (letters.join ('') == word) {}'주위에 만들어진 무언가가 효과가있을 것입니다. –

+0

아 좋은 생각! 나는 (추측 == 단어) 시도하고 그것이 작동하지 않았지만, 나는 그것을 지킬거야! –