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

Qual o problema na repetição?

Pq a minha construção não funciona? Só funciona se os valores forem [ 0, 0]. Nos outros casos aparece false na segunda posição. ?????¿¿¿¿¿¿ . . A MINHA CONSTRUÇÃO DO ARRAY:

var zero = Math.round(Math.random() * 10);
    var um = Math.round(Math.random() * 10);
    if (um = zero && zero < 10) {

        um = um + 1;

    }
    if (um = zero && zero == 10 ) {

        um = um - 1;

    }
    var segredos = [zero, um];

. . . . . O PROGRAMA INTEIRO:

<meta charset="UTF-8">
<h1> Jogo da Adivinhação</h1>
<hr>
<h2> Tente acertar os 2 números que estou pensando de 1 a 10 em 3 chances</h2>
<br>
<!-- abre um campo de entrada de dados -->
<input />
<!-- abre um campo de entrada de dados -->

<!-- cria um botao com a mensagem escrita-->
<button>Descubra se você acertou</button>
<!-- cria um botao com a mensagem escrita-->
<br>

<script>

    //variaveis: numeros a serem adivinhados, tentativas limitantes e erros restantes
    var zero = Math.round(Math.random() * 10);
    var um = Math.round(Math.random() * 10);
    if (um = zero && zero < 10) {

        um = um + 1;

    }
    if (um = zero && zero == 10 ) {

        um = um - 1;

    }
    var segredos = [zero, um];
    var tentativas = 1;
    var erros = 3;

    //seleciona uma tag do html transformando ela numa varíavel pra ser usada no JS       
    var entrada = document.querySelector("input");
    var botao = document.querySelector("button");

    //funcoes
    function verifica() {

        if (tentativas <= 3 && erros > 1) {
            var achou = false;

            for (var posição = 0; posição < segredos.length; posição++) {
                if (entrada.value == segredos[posição]) {

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

            if (achou == false) {
                erros = erros - 1
                alert("Você errou!")
            }
            tentativas++
        } if (erros == 3 && tentativas == 3) {

            alert("Parabéns! Você acertou " + zero + " e " + um + " de cara! Recarregue a página se quiser jogar de novo!");

        } if (tentativas >= 3 && erros == 1) {

            alert("Acabaram suas chances! Os numeros eram: " + zero + " e " + um + ". Recarregue a página para receber outros números!");

        } if (tentativas > 3 && erros > 1) {

            alert("Parabéns, " + zero + " e " + um + " eram os números! Recarregue a página se quiser jogar de novo!");

        }
        entrada.value = " ";
    }

    //property
    entrada.focus();
    botao.onclick = verifica;

    // lógica
    console.log(segredos)

</script>

<!-- Ideias:
    1) criar um mínimo de acertos para exibir a mensagem de acerto;
    2) exibir os acertos na tela e os erros marcados de forma diferente;
-->

. . . A CONSTRUÇÃO DO PROF

function sorteia() {

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

    }

    function sorteiaNumeros(quantidade) {

        var segredos = [];

        var numero = 1;

        while(numero <= quantidade) {

              var numeroAleatorio = sorteia();
              var achou = false;

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

                     if(segredos[posicao] == numeroAleatorio){
                           achou = true;
                           break;
                     }

              }

              if (achou == false) {
                     segredos.push(numeroAleatorio);
                     numero++;
              }

        }

        return segredos;

    }

    var segredos = sorteiaNumeros(4);
2 respostas
solução!

Olá Robson, tudo bem com você?

Pelo que eu entendi essa sua lógica é para caso seja repetido incrementar o valor um, ou diminuir, correto?

Então a única questão foi que ao invés de comparar valores, você estava na verdade dizendo que:

um = zero && zero < 10

E essa atribuição pode dar false em qualquer valor que não seja o 0 e o 10, quando temos esses dois valores temos:

um = zero && zero < 10
um = true && true
um = true
`

Quando temos outro valores o que acontece é:

um = zero && zero < 10
um = true && false
um = false

E dessa forma não entramos no if e a segunda posição do array realmente fica false

Para corrigir isso basta que tenhamos de fato uma comparação com o duiplo igual no começo:

    if (um == zero && zero < 10) {
        um = um + 1;
    }
    if (um == zero && zero == 10 ) {

        um = um - 1;
    }

Dessa maneira não teremos valores repetidos :)

Apenas um comentário, é muito incomum em programação utilizar acentos e letras especiais como ç, então é mais comum vermos: var posicao ao invés de var posição!

Abraços e Bons Estudos :)

OBRIGADO!!