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

Gostaria de colocar um placar, me ajudem por favor

Terminei a parte do joguinho porem gostaria de colocar um placar e que ele fosse incrementado todo vez que eu acertasse no meio do alvo, porem não estou conseguindo chegar nesse ponto, alguma dica?

<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 xAleatorio;
    var yAleatorio;
    //var meusPontos = 0;

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

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

    function limpaTela() {

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

    function desenhaAlvo(x, y) {  

    desenhaCirculo(x, y, raio + 20, 'red');
    desenhaCirculo(x, y, raio + 10, 'white');
    desenhaCirculo(x, y, raio, 'red');

    }

    function sorteiaPosicao(maximo) {

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

    function atualizaTela() {  

    limpaTela();
    xAleatorio = sorteiaPosicao(600);
    yAleatorio = sorteiaPosicao(400);

    desenhaAlvo(xAleatorio, yAleatorio);

    }

    function aumentaPlacar(pontosGanhos) {

        meusPontos = parseInt(placar.value);
        placar.value = meusPontos;
    }

    function dispara(evento) {

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;

        if((x > xAleatorio - raio)
            && (x < xAleatorio + raio)
            && (y > yAleatorio - raio)
            && (y < yAleatorio + raio)) {  

            meusPontos++;
    }

}

    setInterval(atualizaTela, 10000)
    aumentaPlacar(meusPontos);

    tela.onclick = dispara;

</script>
2 respostas
solução!

Oi Gabriel! Como vai ?

Apenas três mudanças são necessárias em seu código, a primeira é chamar função aumentarPlacar apenas quando o alvo é acertado, ou seja, dentro da função dispara. Desta forma:

    function dispara(evento) {

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;

        if((x > xAleatorio - raio)
            && (x < xAleatorio + raio)
            && (y > yAleatorio - raio)
            && (y < yAleatorio + raio)) {  

            meusPontos++;
            aumentaPlacar(meusPontos);
    }

}

A segunda mudança é retirar a linha que diz: meusPontos = parseInt(placar.value);, isto, porque placar.value inicialmente possui um valor de 0, então, ele sempre pegará este valor. Fica da seguinte forma:

    function aumentaPlacar(pontosGanhos) {
        placar.value = pontosGanhos;
    }

A terceira é descomentar a linha da declaração da variável meusPontos.

Segue abaixo o código completo:

<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 xAleatorio;
    var yAleatorio;
    var meusPontos = 0;

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

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

    function limpaTela() {

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

    function desenhaAlvo(x, y) {  

    desenhaCirculo(x, y, raio + 20, 'red');
    desenhaCirculo(x, y, raio + 10, 'white');
    desenhaCirculo(x, y, raio, 'red');

    }

    function sorteiaPosicao(maximo) {

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

    function atualizaTela() {  

    limpaTela();
    xAleatorio = sorteiaPosicao(600);
    yAleatorio = sorteiaPosicao(400);

    desenhaAlvo(xAleatorio, yAleatorio);

    }

    function aumentaPlacar(pontosGanhos) {
        placar.value = pontosGanhos;
    }

    function dispara(evento) {

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;

        if((x > xAleatorio - raio)
            && (x < xAleatorio + raio)
            && (y > yAleatorio - raio)
            && (y < yAleatorio + raio)) {  

            meusPontos++;
            aumentaPlacar(meusPontos);
    }

}

    setInterval(atualizaTela, 1000)


    tela.onclick = dispara;

</script>

Lembrando que qualquer dúvida estou a disposição =) Espero ter ajudado. Bons estudos!!!

Muito obrigado pela ajuda, funcionou certinho!!