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

Jogo adivinha_mais.html

O código em questão é esse:

<meta charset="utf-8">

<input/>
<button>Compare com o meu segredo</button>

<script>

    function sorteia(){

        return Math.round(Math.random() * 10);
    }

    function sorteiaNumeros(quantidade){

        var segredos = [];
        var numero = 1;

        while(numero <= quantidade){

            var numeroAleatorio = sorteia();

            if(numeroAleatorio !== 0){

                var achou = false;

                for(var posicao = 0; posicao < segredos.length; posicao++){
                    console.log(segredos.length);

                    if(segredos[posicao] == numeroAleatorio){

                        achou = true;
                        break;
                    }
                }

                if(achou == false){

                    segredos.push(numeroAleatorio);
                    numero++;
                }
            }
        }

        return segredos;
    }


    var segredos = sorteiaNumeros(3);
    console.log(segredos);
    var input = document.querySelector("input");
    input.focus();

    function verifica(){

        var achou = false;

        for(var posicao = 0; posicao < segredos.length; posicao++){

            if(input.value == segredos[posicao]){

                alert("Você ACERTOU!");
                achou = true;
                break;
            }
        }

        if(achou == false){

            alert("Você ERROU!");
        }

        input.value = "";
        input.focus();
    }

    var button = document.querySelector("button");
    button.onclick = verifica;

</script>

Minhas dúvidas:

1- Eu entendi que o o número 3 é o parâmetro que a função sorteiaNumeros recebe e atribui à quantidade, mas como e quando que isso se torna o tamanho da minha array (array.length)?

2- As minhas tentativas são infinitas, ele não encerra o jogo nunca. Minha ideia era que ele encerrasse quando tentativas <= quantidade ou no primeiro acerto, mas como eu poderia fazer isso? (Não quero código pronto, queria apenas uma orientação lógica para eu criar o código). Pensei em criar uma função validaTentativas, mas aí ela teria de ser chamada dentro do sorteiaNumeros? Não consegui sair do lugar :(

3- Como desafio, o exercício pede para sortear outros números aleatórios que não podem se repetir na lista dos números aleatórios sorteados. Pensei em criar uma ou mais arrays. Mas aí pensei que para cada array eu teria de criar praticamente um sorteiaNumeros próprio e depois comparar as posições entre as arrays. Mas uma função para cada array, isso não me parece lógico, como eu poderia começar? Melhor criar números avulsos, ou seja, sem usar array?

Última pergunta, mas sobre o fórum, eu deveria colocar cada dúvida dessa em uma discussão diferente?

Obrigada!

2 respostas

Oi Bruna, tudo bem?

1- Repare que como quantidade=3, então segredos.push(numeroAleatorio); será chamado três vezes, logo o tamanho do seu array sempre será igual a quantidade.

2- Uma possível solução é quando o usuário errar o número você pode incrementar uma variável e quando ela atingir 3, você alerta ao usuário que o jogo acabou e desabilita o botão.

3- Uma ideia é sempre que você sortear um número novo, você pode percorrer seu array e verificar se ele está contido. Caso esteja, você não adiciona e sorteia outro número.

solução!

Daniel,

Boa tarde! Tudo bem e você? Entendi sobre a array, obrigada.

Eu consegui usar a tentativa para parar o jogo e parar também quando acertar o número.

Para o resto, tive bastante dificuldade em concluir, mas tive uma ajuda profissional, pois não conseguia sair do lugar. Caso alguém tenha curiosidade, deixo aqui o código:

<meta charset="utf-8">

<input/>
<button>Compare com o meu segredo</button>

<script>

    function sorteia(){

        return Math.round(Math.random() * 10);
    }

    function encontrouNumero(numero, listaNumero)
    {
        var achou = false;

        for (var i = 0; i < listaNumero.length; i++)
        {
            if (listaNumero[i] == numero)
            {
                achou = true;
                break;
            }
        }

        return achou;
    }

    function sorteiaNumeros(quantidade, segredosDescartados){

        var segredos = [];
        tentativas = 0;

        //Rodada 1

        while(segredos.length < quantidade){
            var numeroAleatorio = sorteia();

            if ((numeroAleatorio != 0) && !encontrouNumero(numeroAleatorio, segredos) && !encontrouNumero(numeroAleatorio, segredosDescartados)){
                segredos.push(numeroAleatorio);
            }
        }

        console.log(segredos);

        return segredos;
    }

    var segredos = sorteiaNumeros(3, []);
    //var segredosDescartados = segredos;
    var tentativas = 0;
    //var rodada = 1;
    var input = document.querySelector("input");
    input.focus();

    function verifica(){

        if(encontrouNumero(input.value, segredos)){

            alert("Você ACERTOU!");
            segredos = sorteiaNumeros(3, []);
        }else{

            alert("Você ERROU!");
            tentativas++;

                if(tentativas >= segredos.length){

                    alert("Suas chances acabaram, vamos recomeçar!");
                    //rodada++;
                    sorteiaNumeros(3, segredos);
                }
        }

        input.value = "";
        input.focus();

    }

    var button = document.querySelector("button");
    button.onclick = verifica;

</script>