1
resposta

Meu primeiro jogo com borda circular para validação

No exemplo mostrado na aula, a área limitada para verificar o acerto é quadrada, fiz uma implementação para que essa área seja circular!

<body>
    <canvas width="600" height="400"></canvas>

    <script>

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

        var posicaoXAleatoria = sorteiaCoordenada(540);
        var posicaoYAleatoria = sorteiaCoordenada(340);
        var raioDeAcerto = 10;
        var distanciaParaAcertar = 0;

        var raio = 10;

        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);
            pincel.strokeRect(0, 0, 600, 400)
        }

        function desenhaAlvo(coordenadaX, coordenadaY) {
            desenhaCirculo(coordenadaX, coordenadaY, raio + 20, 'red');
            desenhaCirculo(coordenadaX, coordenadaY, raio + 10, 'white');
            desenhaCirculo(coordenadaX, coordenadaY, 10, 'red');
        }

        function sorteiaCoordenada(coordenadaMaxima) {
            return Math.floor(30 + Math.random() * coordenadaMaxima);
        }

        function geraNovaPosicao() {
            posicaoXAleatoria = sorteiaCoordenada(540);
            posicaoYAleatoria = sorteiaCoordenada(340);

            limpaTela();
            desenhaAlvo(posicaoXAleatoria, posicaoYAleatoria);
        }

        function dispara(evento) {

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

            var diferencaEmX = posicaoXAleatoria - x;
            var diferencaEmy = posicaoYAleatoria - y;

            var distanciaParaAcertar = Math.sqrt(diferencaEmX ** 2 + diferencaEmy ** 2)

            if (distanciaParaAcertar <= raioDeAcerto) {
                alert('Acertou!');
            }

            console.log("posX: " + posicaoXAleatoria);
            console.log("posY: " + posicaoYAleatoria);
            console.log("raio: " + distanciaParaAcertar);
        }

        setInterval(geraNovaPosicao, 1000);
        tela.onclick = dispara;

    </script>
</body>
1 resposta

Muito legal essa alteração Victor, excelente observação!!!