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

Desafio final.

Alguém poderia me informar onde eu estou errando?

<meta charset="UTF-8">

<input type="text" id="numero"/>
<input type="submit" value="adicione e verifique no bingo!" id="adivinhar"/>

<script> 
 var numerosSorteados= function(){
 var n1=math.floor(math.random() * 60);
 var n2=math.floor(math.random() * 60);
 var n3= math.floor(math.random() * 60);
 var n4= math.floor(math.random() * 60);
 var n5= math.floor(math.random() * 60);
 var n6= math.floor(math.random() * 60);
 var sorteados=[n1,n2,n3,n4,n5,n6];
 };

 var botaoClicado = function(){
    var numeroUsuario= document.getElementById("numero");
    for(var i=0; i < numerosSorteados().length; i=i+1)
    if(numeroUsuario.value == numerosSorteados()){
    break;
    alert("Os parabéns você acertou os numeros do bingo");
    }else{
     alert("você não ganhou no bingo");
    numeroUsuario.push(numero);
    console.log(numerosSorteados());
     }
     }
  var botaoadivinhar = document.getElementById("adivinhar");
  botaoadivinhar.onclick = botaoClicado;
 </script>
enter code here
11 respostas

I ae Rodrigo

Onde está:

if(numeroUsuario.value == numerosSorteados()){
    break;
    alert("Os parabéns você acertou os numeros do bingo");

Troca por:

if(numeroUsuario.value == numerosSorteados()){
    alert("Os parabéns você acertou os numeros do bingo");
    break;

Você tem que dar break, depois de mostrar a mensagem na tela, senão ele vai sair do for ignorando tudo o que vem depois dele.

Então martin da erro exatamente neste ponto. "var n1= math.floor(math.random() * 60);".

Cola aqui mensagem de erro que aparece pra você.

martin vc tem skyp ? pra nois comversa sobre esses curso um ajudando o outro etc.

Além do break, você está usando math ao invés de Math, precisa colocar em maiúsculo.

Martin, Cara você pode criar o código como fez, mas imagine que fossem 900 números sorteados! A ideia aqui é lógica, então aproveita os loops e ifs!

var sorteados = []; for( var i = 0; i < 6; i++ ){ var numero = Math.round(Math.random() * 59 + 1) if( sorteados[i] == numero ) { console.log( numero + ' já sorteado!'); } else { sorteados[i] = numero; } }

Putz, ele não deixou a indentação eheheh

solução!

Além do que comentaram acima, existem alguns problemas adicionais, como um erro clássico de comparação de valor com array diretamente e diversas invocações do método de sorteio desnecessariamente e que desconfiguram o jogo. Eu fiz uma resposta bem detalhada a respeito desse desafio final em outra discussão, e colarei aqui com algumas modificações para lhe ajudar:

Devemos criar o array de números inteiros sorteados, utilizando a função Math.random() em conjunto com a função Math.round() aprendidas durante o curso. Então para facilitar podemos criar uma função que sorteie os seis número aleatórios e nos retorne o array, ficando assim:

  var sorteiaNumeros = function() {
    var loteria = [];
    // adicionei uma condicao para garantir numeros nao repetidos
    while (loteria.length < 6) {
      var sorteado = Math.round(Math.random() * 60);
      var repetido = false;
      for (var i = 0; i < loteria.length; i++) {
        if (loteria[i] == sorteado) {
          repetido = true;
        }
      }
      if (!repetido) { //se nao for repetido adiciona
        loteria.push(sorteado);
      }
    }
    return loteria;
  }

Sua função do botão sorteia novos números toda vez que é invocada, além disso, a comparação de número com array diretamente nunca dará certo, portanto, separando responsabilidades, apenas pergunte ao usuário 6 vezes pelos números e retorne eles, em uma função assim:

  var perguntaNumeros = function() {
    var palpites = [];
    // adicionei condicao para garantir numeros distintos do usuario
    var i = 1;
    while (palpites.length < 6) {
      // lembre-se que o prompt retorna string por isso transformamos em int
      var numero = parseInt(prompt("Digite o seu palpite numero " + i + ":"));
      var repetido = false;
      for (var j = 0; j < palpites.length; j++) {
        if (palpites[j] == numero) {
          repetido = true;
        }
      }
      if (!repetido) { //se nao for repetido adiciona
        palpites.push(numero);
        i++;
      } else {
        alert("Numero repetido!");
      }
    }
    return palpites;
  }

Agora, precisamos validar se o usuário acertou, portanto fazemos uma função que retorna o numero de acertos, porém de maneira parametrizada, afim de poder ser reutilizada para diversas combinações:

  var verificarResultado = function(loteria, palpites) {
    var acertos = 0;
    for (var i = 0; i < loteria.length; i++) {
      for (var j = 0; j < palpites.length; j++) {
        if (palpites[j] == loteria[i]) {
          acertos++;
        }        
      }
    }
    return acertos;
  }

Agora criamos uma função que utiliza as demais para executar o jogo e associamos ao botão:

  var jogar = function() {
    var loteria = sorteiaNumeros();
    var palpites = perguntaNumeros();
    console.log("sorteados: " + loteria);
    console.log("palpites: " + palpites);
    var acertos = verificarResultado(loteria, palpites);
    if (acertos == 6) {
      alert("Parabens, voce ganhou!");
    } else {
      alert("Que pena, você acertou " + acertos + " numeros. tente de novo!");
    }
  }
  var botaoJogar = document.getElementById("jogar");
  botaoJogar.onclick = jogar;

Colocando tudo em um bloco só para facilitar a cópia temos como resultado:

<input id="jogar" type="submit" value="Jogar!" />
<script>
  var sorteiaNumeros = function() {
    var loteria = [];
    // adicionei uma condicao para garantir numeros nao repetidos
    while (loteria.length < 6) {
      var sorteado = Math.round(Math.random() * 60);
      var repetido = false;
      for (var i = 0; i < loteria.length; i++) {
        if (loteria[i] == sorteado) {
          repetido = true;
        }
      }
      if (!repetido) { //se nao for repetido adiciona
        loteria.push(sorteado);
      }
    }
    return loteria;
  }
  var perguntaNumeros = function() {
    var palpites = [];
    // adicionei condicao para garantir numeros distintos do usuario
    var i = 1;
    while (palpites.length < 6) {
      // lembre-se que o prompt retorna string por isso transformamos em int
      var numero = parseInt(prompt("Digite o seu palpite numero " + i + ":"));
      var repetido = false;
      for (var j = 0; j < palpites.length; j++) {
        if (palpites[j] == numero) {
          repetido = true;
        }
      }
      if (!repetido) { //se nao for repetido adiciona
        palpites.push(numero);
        i++;
      } else {
        alert("Numero repetido!");
      }
    }
    return palpites;
  }
  var verificarResultado = function(loteria, palpites) {
    var acertos = 0;
    for (var i = 0; i < loteria.length; i++) {
      for (var j = 0; j < palpites.length; j++) {
        if (palpites[j] == loteria[i]) {
          acertos++;
        }        
      }
    }
    return acertos;
  }
  var jogar = function() {
    var loteria = sorteiaNumeros();
    var palpites = perguntaNumeros();
    console.log("sorteados: " + loteria);
    console.log("palpites: " + palpites);
    var acertos = verificarResultado(loteria, palpites);
    if (acertos == 6) {
      alert("Parabens, voce ganhou!");
    } else {
      alert("Que pena, você acertou " + acertos + " numeros. tente de novo!");
    }
  }
  var botaoJogar = document.getElementById("jogar");
  botaoJogar.onclick = jogar;
</script>

O legal é ir separando as necessidades do seu programa e modularizando em funções. Caso suas dúvidas tenham sido esclarecidas, peço que selecione a resposta que melhor lhe ajudou e marque como resolvido, a fim de evitar postagens a mais desnessárias. Obrigado!

Meu programa tem dado erro nao sei pq...

no developer tool do chrome aparece isso...

VM197:63 GET https://nikkomsgchannel/e?001c0025005900200046004b001d0055005c0057005b00260…21005b002a0047001e002400590046005b0008002f005a0028005d002c005d0051002e005a bingo.html:63 sorteados: 15,31,53,57,14,35 bingo.html:64 palpites: NaN,NaN,NaN,NaN,NaN,NaN VM197:50 GET https://nikkomsgchannel/e?001c0025005900200046004b001d0055005c0057005b00260…54002e005a004c00640050005b00440058007c005d002a005d0028005c0056002b005a0058

var jogar = function() { var loteria = sorteiaNumeros(); var palpites = perguntaNumeros(); console.log("sorteados: " + loteria); console.log("palpites: " + palpites); var acertos = verificarResultado(loteria,palpites); if (acertos == 6) { alert("Parebens, voce ganhou!"); }else{ alert("Que pena, você acertou " + acertos + "numeros. Tente de novo!"); } }

Cola o conteudo inteiro do arquivo entre ``` (aspas triplas) para termos idéia melhor do que está acontecendo.