Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

jogo de dados

estou tentado fazer um jogo de dados que gera um dado para o jogador 1 e outro para o jogador 2, depois confere qual foi o maior e diminui dos pontos de vida do jogador que perdeu a diferença entre o dado maior e menor até que uma das vidas chegue a 0 porém ele apena pede os nomes e imprime a pontuação de vida dos dois jogadores

<meta charset="UTF-8">
<script>
function pulaLinha() {

        document.write("<br>");
    }
function envia(msg){
        document.write(msg);
        pulaLinha();
    };
 function calculaImc(altura,peso){
        return peso / (altura * altura);
    };
    var jogador1 = prompt("digite seu nome");
    var jogador2 = prompt("digite seu nome");
    var vida1 = 20;
    var vida2 = 20;

    while(vida1 > 0 && vida2 > 0){
        var seudado = Math.round(Math.random() *6 );
        var dadoadversario = Math.round(Math.random() *6 );
        envia("vida " + jogador1 + " = " + vida1);
        envia("vida " + jogador2 + " = " + vida2);

    if (seudado > dadoadversario) {
        envia("você venceu"); 
        envia("dado adversario = " + dadoadversario);
        envia ("seu dado = " + seudado);
        vida2 = vida2 - (dadoadversario - seudado);
    } else {
        envia("perdeste");
        envia("dado adversario = " + dadoadversario);
        envia ("seu dado = " + seudado);
        vida1 = vida1 - (seudado - dadoadversario);
    };
    };
    </script>
1 resposta
solução!

Boa tarde, Nicolas! Como vai?

O seu código está em loop infinito dentro do laço while. Isso está acontecendo pq vc está fazendo o cálculo da vida incorretamente. Vc faz assim:

if (seudado > dadoadversario) {
     envia("você venceu"); 
     envia("dado adversario = " + dadoadversario);
     envia ("seu dado = " + seudado);
     vida2 = vida2 - (dadoadversario - seudado);
} else {
     envia("perdeste");
     envia("dado adversario = " + dadoadversario);
     envia ("seu dado = " + seudado);
     vida1 = vida1 - (seudado - dadoadversario);
}

No entanto, o correto seria fazer assim:

if (seudado > dadoadversario) {
     envia("você venceu"); 
     envia("dado adversario = " + dadoadversario);
     envia ("seu dado = " + seudado);

     // seudado > dadoadversario, então o correto é fazer
     // seudado - dadoadversario.
     vida2 = vida2 - (seudado - dadoadversario);
} else if (seudado < dadoadversario) {
     envia("perdeste");
     envia("dado adversario = " + dadoadversario);
     envia ("seu dado = " + seudado);

     // seudado < dadoadversario, então o correto é fazer
     // dadoadversario - seudado.
     vida1 = vida1 - (dadoadversario - seudado);
}

Repare tbm que eu utilizei um else if afinal de contas no caso seudado == dadoadversario não queremos fazer nada.

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software