Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Erro na logica ao receber a resposta do usuario

Ola, Estou criando o jogo de advinhar o numero em JavaScript. A funcionalidade aparentemente está Ok. Porem estou com uma duvida com relacao ao que acontece com o numero de tentativas do usuario.

O limite de tentativas é 3. O que acontece é que se o usuario acerta na primeira ou na segunda tentativa, funciona perfeitamente. Mas se o usuario acerta na terceira tentativa, a resposta que ele recebe é a de que errou.

Aqui tem um exemplo simples, onde o numeroPensado é 5. Se o usuario acertar na terceira tentativa, o correto seria aparecer Acerou! mas ao inves disso, é mostrado que ele Errou!

Nao consegui identificar o erro do codigo.

http://codepen.io/brunodd/pen/dpbywB

var button = document.querySelector('button'),
    input = document.querySelector('input'),
    mensagem = document.getElementById('resposta');

input.focus();

function mostra(frase) {
  mensagem.textContent = frase;
  pulaLinha();
}

function pulaLinha() {
  mensagem.innerHTML += "<br>";
}

function sorteia(n) {
  return Math.round(Math.random() * n);
}

var numeroPensado = 5;

var tentativas = 0;

function verifica() {
  var chute = input.value;
  tentativas++;

  if(tentativas <= 3) {
    if(chute !== numeroPensado) {
      mostra("Errou!");
      input.focus();
      input.value = '';
      tentativas++;
    } else {
      mostra("Acertou!");
    }
  } else {
    mostra("Errou todas. O numero pensado foi " + numeroPensado + " GAME OVER!!!");
    input.value = '';
    input.disabled = true;
    button.disabled = true;
  }
}

button.onclick = verifica;
6 respostas
solução!

Oi Bruno, tudo bem? Na verdade o que está acontecendo é que a terceira vez não está sendo considerada. Veja que ao incrementar no inicio da funcção verifica, você conta a chance do usuário mesmo sem ter verificado se ele acertou ou não. Quando chegar na tentativa 0, o contador já está com 1 e na tentativa 2, o contador já está em 3 e não considera a chance.

Para resolver existem duas soluções: 1. Você contabiliza a chance somente ao final da função verifica ou... 2. Muda o operador de comparação nas chances para <= 3 ou < 4.

Fiz os testes no seu codepen e funcionou, esperimente também. Exiba uma mensagem a cada tentativa para ver o que acontece. Talvez fique mais vísivel de entender o que estou te explicando.

Como sempre, bons estudos =)

Oi Bruno

O problema é isso que o Wanderson falou e mais um pouco. Você está fazendo duas vezes o tentativas++. Tanto fora quanto dentro do if.

Precisa fazer uma vez só. Pois a primeira ele ta valendo 1 e 2. Na segunda 3 (e passa o primeiro if) e 4. Na terceira ele já estará valendo 5, aí vai para a frase do GameOver.

Remova o segundo tentativas++ e faça < 3 no if.

Que isso gente! Nem de deram a chance de eu responder para meu aluno! Fiquei com ciúmes! :)

Tudo certo Bruno? Não deixe de marcar a resposta dos nossos amigos como solução!

Como sempre, se pintar uma nova dúvida com outro contexto, abra um novo post que vai nos ajudar bastante a ajudá-lo!

Sucesso e bom estudo!

Valeu pessoal! Agora ja faz mais sentido onde eu estava errando.

Seguindo o conselho de feedback de voces eu refactorei a funcao verifica() e agora esta funcionando conforme esperado.

No final ficou dessa forma:

var tentativas = 0;

function verifica() {
  var chute = parseInt(input.value);

  if(tentativas < 2 && chute !== numeroPensado) {
    mostra("Errou!");
    input.focus();
    input.value = '';
  } else if(chute === numeroPensado) {
    mostra("Acertou!");
    input.disabled = true;
    button.disabled = true;
  } else {
    mostra("Errou todas. O numero pensado foi " + numeroPensado + " GAME OVER!!!");
    input.value = '';
    input.disabled = true;
    button.disabled = true;
  }

  tentativas++;
}

Alias Flavio, aproveito tb para deixar um feedback do curso. Apesar de nao ser totalmente voltado para logica de programacao, o curso tem me ajudado muito pois eu estava muito "cru" ainda com relacao ao JavaScript.

A sua metodologia é fantastica. Funcionou com o Angular e agora está funcionando tb com o JavaScript. Finalmente estou compreendendo a linguagem de forma descente.

Que boa notícia! Não deixe de conferir

https://cursos.alura.com.br/careers

Lá você pode ver aquela que o torna ainda mais próximo dessa fantástica linguagem.

Sucesso e bom estudo Bruno!