1
resposta

Fator de dificuldade

Gente, resolvi escrever o código do jogo do pong no VSCode e até que consegui fazer funcionar como nas aulas, mas estou tendo um pouco de dificuldade com uma implementação de um fator de dificuldade. Do jeito que escrevi o código, o adversário sempre ganha, alguém poderia me dar uma ideia de como fazer com que a raquete do adversário se movimente de acordo com um fator de dificuldade? Do tipo, quanto mais difícil o jogo, mais próximo do yBolinha? quanto mais fácil, mais distante ela se movimenta... Também se puderem me dar dicas de como melhorar o código, agradeço...

Segue o códgio:

<meta charset="UTF-8">

<body>
    <canvas width="600" height="400"></canvas>
</body>
<script>
    let sentidoX = 1;
    let sentidoY = 1;
    let xBolinha = 300;
    let yBolinha = 200;
    let raioBolinha = 10;
    let velocidade = 1;
    var yRaquete = 200;
    let xRaquete = 20;
    let larguraRaquete = 10;
    let alturaRaquete = 80;
    var meusPontos = 0;
    var pontosAdversario = 0;
    var xRaqueteAdversario = xRaquete + 550;

    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    pincel.fillStyle = 'lightgray';
    pincel.fillRect(0, 0, 600, 400);

    function desenhaCirculo(x, y, raio) {

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

    }

    function desenhaQuadrado(x, y, tamanhoX, tamanhoY, cor) {

        pincel.fillStyle = cor;
        pincel.fillRect(x, y, tamanhoX, tamanhoY)
        pincel.fill();
    }

    function desenhaPontos(texto, xPontos) {
        pincel.font = "30px Comic Sans MS";
        pincel.fillStyle = "white";
        pincel.textAlign = "center";
        pincel.fillText(texto, xPontos, 50);
    }

    function limpaTela() {

        pincel.clearRect(0, 0, 600, 400);
        pincel.fillStyle = 'black';
        pincel.fillRect(0, 0, 600, 400)
    }

    function movimentaRaquete() {

        document.querySelector('body').addEventListener('keydown', function (evento) {
            var tecla = evento.keyCode;
            if (tecla == 38) {
                yRaquete -= 10;
            }
            if (tecla == 40) {
                yRaquete += 10;
            }
        })

    }

    function pontos() {
        if (xBolinha === tela.offsetWidth) {
            meusPontos++;
        } else if (xBolinha === tela.offsetLeft) {
            pontosAdversario++;
        }
    }

    function atualizaTela() {

        limpaTela();

        if (yBolinha === tela.offsetHeight) {
            sentidoY = -1;
        } else if (xBolinha === tela.offsetWidth) {
            sentidoX = -1;
        } else if (yBolinha === tela.offsetTop) {
            sentidoY = 1;
        } else if (xBolinha === tela.offsetLeft) {
            sentidoX = 1;
        }
        var yRaqueteAdversario = yBolinha - 40;
        if (((xBolinha + raioBolinha) > xRaqueteAdversario) &&
            (yBolinha > yRaqueteAdversario) &&
            (yBolinha < (yRaqueteAdversario + alturaRaquete))) {
            sentidoX = -1;
        }
        if (((xBolinha - raioBolinha) < (xRaquete + larguraRaquete)) &&
            (yBolinha > yRaquete) &&
            (yBolinha < (yRaquete + alturaRaquete))) {
            sentidoX = 1;
        }

        desenhaCirculo(xBolinha, yBolinha, raioBolinha);
        xBolinha += sentidoX;
        yBolinha += sentidoY;
        desenhaQuadrado(xRaqueteAdversario, yRaqueteAdversario, larguraRaquete, alturaRaquete, 'white');
        desenhaQuadrado(xRaquete, yRaquete, larguraRaquete, alturaRaquete, 'white');
        pontos();
        desenhaPontos(meusPontos, 400);
        desenhaPontos(pontosAdversario, 200);


    }

    movimentaRaquete();

    setInterval(atualizaTela, velocidade);
</script>
1 resposta

Fala, Luis! Tudo bem contigo?

Desculpe a demora em dar um retorno!

Parabéns pelo projeto e obrigado por compartilhar conosco!

Ficou muito bacana!

Dê uma olhada nesse projeto do Raphael Aracelli.

Acredito que vai te dar uma ideia de como fazer com que a raquete cometa erros.

Não esqueça de nos dar um retorno!

Qualquer dúvida nos retorne, Luis!

Um 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