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

Meu pong com possibilidade de erro do oponente randomizada

Basicamente usei um Math.random() para gerar um numero aleatorio entre 0 e 1 após cada colisão com a raquete do jogador e joguei em um if para retornar TRUE sempre que o número aleatório fosse maior 0.5 e false quando o menor. Assim quando TRUE, a raquete vai certo na bolinha, quando FALSE ela vai errado.

Pra raquete não dar um salto muito repentino quando mudar de certa pra errada, fui incrementando o erro de forma devagar. Código Completo: https://github.com/AndersonPereira09025/Pong-com-erro-do-oponente-randomizado

[...]
    function detectaColisaoBorda (){

        if (yBolinha - raio < 0 || yBolinha + raio > tela.getAttribute("height")) {

            velocidadeY = velocidadeY*(-1);
        }

        if (xBolinha - raio < 0 || xBolinha + raio > tela.getAttribute("width")) {

            if (xBolinha - raio < 0){

                velocidadeX = velocidadeX*(-1);
                pontosAdversario += 1

            }

            if (xBolinha + raio > tela.getAttribute("width")){

                velocidadeX = velocidadeX*(-1);
                pontosJogador += 1

            }          
        }
    }

    function detectaColisaoRaqueteJogador() {

          if (xBolinha - raio < xRaqueteJogador + larguraRaquete
            && yBolinha - raio > yRaqueteJogador
            && yBolinha + raio < yRaqueteJogador + alturaRaquete){

            velocidadeX = velocidadeX*(-1);
            numeroAleatorio = Math.random();
            }
    }

    function detectaColisaoRaqueteAdversario() {

          if (xBolinha + raio > xRaqueteAdversario
            && yBolinha - raio > yRaqueteAdversario
            && yBolinha + raio < yRaqueteAdversario + alturaRaquete){

            velocidadeX = velocidadeX*(-1);        

            }
    }

    function moveBolinha() {

        xBolinha = xBolinha + velocidadeX;
        yBolinha = yBolinha + velocidadeY;
    }

    function moveRaqueteAdversario() {

        var velocidadeRaqueteAdversario = yBolinha - yRaqueteAdversario - alturaRaquete/2

        yRaqueteAdversario += velocidadeRaqueteAdversario - fatorDeErro

        if (numeroAleatorio > 0.5){

            if (fatorDeErro > 0) {

                fatorDeErro -= 0.05
            }

        } else {

            if (fatorDeErro <= 80) {

                fatorDeErro += 0.05
            }

        }

        if (yRaqueteAdversario < 0) {

            yRaqueteAdversario = 0

        }

        if (yRaqueteAdversario > (tela.getAttribute("height") - alturaRaquete)) {

            yRaqueteAdversario = tela.getAttribute("height") - alturaRaquete

        }    

    }

    function atualizaTela() {

        limpaTela();
        desenhaCirculo(xBolinha, yBolinha, raio)
        desenhaRaqueteJogador(xRaqueteJogador, yRaqueteJogador, larguraRaquete, alturaRaquete);
        desenhaRaqueteAdversario(xRaqueteAdversario, yRaqueteAdversario, larguraRaquete, alturaRaquete);
        desenhaPlacar(xPlacarJogador, yPlacarJogador, pontosJogador);
        desenhaPlacar(xPlacarAdversario, yPlacarAdversario, pontosAdversario); 
        moveBolinha();
        moveRaqueteAdversario();
        detectaColisaoBorda();
        detectaColisaoRaqueteJogador();
        detectaColisaoRaqueteAdversario();      

    }


    // Posição da raquete do jogador
    var xRaqueteJogador = 0;
    var yRaqueteJogador = 20;

    // Posição da raquete do adversário
    var xRaqueteAdversario = 590;
    var yRaqueteAdversario = 20;

    // Parametros para cálculo de erro 
    var numeroAleatorio = 0.6
    var fatorDeErro = 0

    // Dimensões das raquetes
    var larguraRaquete = 10
    var alturaRaquete = 80

    // Parametros da bolinha
    var raio = 10
    var velocidadeX = 2
    var velocidadeY = 2
    var xBolinha = 300
    var yBolinha = 200

    // Placar do Adversário
    var xPlacarAdversario = 400
    var yPlacarAdversario = 10
    var pontosAdversario = 0

     // Placar do Jogador
    var xPlacarJogador = 150
    var yPlacarJogador = 10
    var pontosJogador = 0  

    document.onkeydown = leDoTeclado
    setInterval(atualizaTela, 1);



// cima = 38, baixo = 40, esquerda = 37, direita = 39 
</script>
1 resposta
solução!

Olá, Anderson! Como você está?

Nossa, excelente solução! O projeto ficou maravilhoso e bem organizado também! Certamente irá auxiliar muitos alunos aqui no fórum!

Muito obrigada por compartilhar seu projeto e contribuir significativamente com o fórum!

Um grande abraço, conte conosco em caso de dúvidas!

Bons estudos!