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

Sugestões? Implementando ao jogo (tentativas e pontuação)

Ao fim eu fui adicionando a ideia do alvo se mexer e eventualmente criar uma determinada pontuação para cada uma das camadas do alvo, a ideia funcionou, apesar disso estava tentando implementar um máximo de 3 tentativas e não consigo fazer que dê certo, além também de ter tentado incluir uma somatória de pontos, podem me dar sugestões? Segue o código abaixo!

Obs: Eu tentei usar while ou for para limitar as tentativas, incrementando a cada final de if, mas quando fiz isso o pop-up da resposta que fosse ao clique me aparecia 3 vezes seguidas.

EDIT: Quanto aos pontos, fui consultando duvidas gerais e implementei uma caixa com input que demostra os pontos, conforme abaixo.

<input type="text" value="0" disabled><br>
<canvas width="600" height="400"></canvas>

<script>

    var placar = document.querySelector('input')
    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');

    pincel.fillStyle = 'lightgray';
    pincel.fillRect(0, 0, 600, 400);

    var raio = 10;
    var raio2 = 20;
    var raio3 = 30;
    var xA;
    var yA;

    function limpaTela() {

        pincel.clearRect(0, 0, 600, 400);
    }

    function desenhaCirculo(x, y, raio, cor) {

        pincel.fillStyle = cor;
        pincel.beginPath();
        pincel.arc(x, y, raio, 0, 2 * Math.PI);
        pincel.fill();
    }

    function desenhaAlvo(x, y){

        desenhaCirculo(x,y, raio3, 'red'); // maior círculo
        desenhaCirculo(x,y, raio2, 'white');
        desenhaCirculo(x,y, raio, 'red'); // menor circulo
    }

    function sorteiaPosicao(maximo){

       return Math.floor(Math.random() * maximo);
    }

    function atualizaTela(){
        limpaTela();
        xA = sorteiaPosicao(560);
        yA = sorteiaPosicao(360);
        desenhaAlvo(xA, yA);
    }

    setInterval (atualizaTela, 5000);

    var pontosGanhos = 0;


    function aumentaPlacar(pontosGanhos){

        var valorPlacar = parseInt(placar.value);
        placar.value = valorPlacar + pontosGanhos;
    }

    function dispara (evento){
        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;

        if ((x > xA - raio) 
            && (x < xA + raio) 
            && (y > yA - raio) 
            && (y < yA + raio)) {
            pontosGanhos = pontosGanhos + 30;
            aumentaPlacar (pontosGanhos);
            alert ("Você acertô! 30 Pontos!");

        } else if ((x > xA - raio2) 
            && (x < xA + raio2) 
            && (y > yA - raio2) 
            && (y < yA + raio2)) {
            pontosGanhos = pontosGanhos + 20;
            aumentaPlacar (pontosGanhos);
            alert ("Você acertô! 20 Pontos!");

        } else if ((x > xA - raio3) 
            && (x < xA + raio3)
            && (y > yA - raio3) 
            && (y < yA + raio3)){
            pontosGanhos = pontosGanhos + 10;
            aumentaPlacar (pontosGanhos);
            alert ("Você acertô! 10 Pontos!");

        } else {
            pontosGanhos = 0;
            aumentaPlacar (pontosGanhos);
            alert ("Você errou! Tente novamente!");
        }
    }        


    tela.onclick = dispara;

</script>
2 respostas
solução!

Olá, Estevam! Tudo bem contigo?

Para que possamos ajustar a somatória de pontos, retirei pontosGanhos após a atribuição, pois ele estava somando pontosGanhos com pontosGanhos e mais os pontos adquiridos.

30 pontos

pontosGanhos = pontosGanhos + 30;
pontosGanhos = 30;

20 pontos

pontosGanhos = pontosGanhos + 20;
pontosGanhos = 20;

10 pontos

pontosGanhos = pontosGanhos + 10;
pontosGanhos = 10;

Para contabilizar as tentativas, coloquei uma variável fora da função dispara com valor inicial a 0

var tentativas = 0

E dentro de cada ifiniciei com uma condição para rodar caso a tentativa seja menor que três

if ((tentativas < 3) &&...

Após o aumentaPlacar(pontosGanhos); coloquei o incremento em cada iftambém

tentativas++;

No final eu acrescentei mais um if, caso o usuário erre e contabilize dentro das tentativas

else if (tentativas < 3) {
            pontosGanhos = 0;
            aumentaPlacar(pontosGanhos);
            tentativas++;
            alert("Você errou! Tente novamente!");

E para terminar, dois alertinformando o fim e o placar do jogo!

        } else {
            alert("Você já gastou suas 03 tentativas!!!");
            alert("Total de pontos foi = " + placar.value)
        }

Espero ter ajudado, Estevam!

Bons estudos e um abraço!

Perfeito! Muito obrigado pelo auxilio, Cássio!

Não tinha passado pela cabeça apenas inserir a condição no próprio if e agora parece bem óbvio! hehe