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

Minha versão do código.

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

<script>

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

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

    var raio = 10;
    var xAleatorio = 300;
    var yAleatorio = 200;

    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 sorteiaPosicao(maximo) {
        return Math.floor(Math.random() * maximo);
    }

    function atualizaTela() {
        xAleatorio = sorteiaPosicao(550);
        yAleatorio = sorteiaPosicao(350);

        if (xAleatorio < 50) {
            while(xAleatorio < 50) {
                xAleatorio = sorteiaPosicao(550);
            }
        }

        if (yAleatorio < 50) {
            while(yAleatorio < 50) {
                yAleatorio = sorteiaPosicao(350);
            }
        }

        limpaTela();

        desenhaCirculo(xAleatorio, yAleatorio, raio + 20, 'red'); // maior círculo
        desenhaCirculo(xAleatorio, yAleatorio, raio + 10, 'white');
        desenhaCirculo(xAleatorio, yAleatorio, raio, 'red'); // menor circulo


    }

    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)) {

            alert("Acertou!");
        }
    }

    limpaTela();
    desenhaCirculo(xAleatorio, yAleatorio, raio + 20, "red");
    desenhaCirculo(xAleatorio, yAleatorio, raio + 10, "white");
    desenhaCirculo(xAleatorio, yAleatorio, raio, "red");

    setInterval(atualizaTela, 1000);

    tela.onclick = dispara;



</script>

Desta forma, assim que a página é carregada o alvo já é exibido e existe um limite de campo de onde ele pode nascer, fazendo assim, com que ele não fique cortado pelas bordas.

1 resposta
solução!

Acabei de testar, mt bom. Bons estudos