1
resposta

Raquete do Oponente nunca erra a bolinha

Mesmo aplicando a função pra aumentar a margem de erro da raquete do oponente, o oponente nunca erra a bolinha https://editor.p5js.org/lucas.guyfawkes95/full/FKOtr9RlS

//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15;
let raio = diametro / 2;

//velocidade da bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;
let comprimentoRaquete = 10;
let alturaRaquete = 90;

//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;


//variáveis raquete do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;

let colidiu = false;

//pontos
let meusPontos = 0;
let pontosOponente = 0;

//sons do jogo
let trilha;
let raquetada;
let ponto;

let chanceDeErrar = 0;



function setup() 
{
  createCanvas(600,400);
  trilha.loop();
}

function draw() 
{
  background(0);
  mostraBolinha();
  velocidadeBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete,yRaquete);
  movimentaRaquete();
  verificaColisaoRaquete(xRaquete,yRaquete)
  mostraRaquete(xRaqueteOponente,yRaqueteOponente);
  movimentaRaqueteOponente();
  verificaColisaoRaquete(xRaqueteOponente,yRaqueteOponente);
  incluiPlacar();
  somaPontos();
}

function mostraBolinha()
{
  circle(xBolinha,yBolinha,diametro);
}

function velocidadeBolinha()
{
  xBolinha += velocidadeXBolinha;
  yBolinha += velocidadeYBolinha;
}

function verificaColisaoBorda()
{
  if(xBolinha > width || xBolinha < 0){velocidadeXBolinha *= -1}
  if(yBolinha > height || yBolinha < 0){velocidadeYBolinha *= -1}
}

function mostraRaquete(x,y)
{
  rect(x,y,comprimentoRaquete,alturaRaquete);
}

function movimentaRaquete()
{
  if(keyIsDown(UP_ARROW)){yRaquete -= 10}
  if(keyIsDown(DOWN_ARROW)){yRaquete += 10}
}

function colisaoRaquete()
{
  if(xBolinha - raio < xRaquete + comprimentoRaquete && yBolinha - raio < yRaquete + alturaRaquete && yBolinha + raio > yRaquete){velocidadeXBolinha *= -1}
}

function verificaColisaoRaquete(x,y)
{
  colidiu = collideRectCircle(x,y,comprimentoRaquete,alturaRaquete,xBolinha,yBolinha,diametro);
  if(colidiu){velocidadeXBolinha *= -1; raquetada.play();}
}

function movimentaRaqueteOponente()
{
  velocidadeYOponente = yBolinha - yRaqueteOponente - comprimentoRaquete / 2 - 30;
  yRaqueteOponente += velocidadeYOponente + chanceDeErrar
  calculaChanceDeErrar()
}

function calculaChanceDeErrar() 
{
  if (pontosOponente >= meusPontos) {
  chanceDeErrar += 1 
  if (chanceDeErrar >= 39)
  {chanceDeErrar=40
  }
  } else {chanceDeErrar -= 2
  if (chanceDeErrar <= 35){chanceDeErrar = 35}
  }
}

function incluiPlacar()
{
  stroke(255);
  textAlign(CENTER);
  textSize(20);
  fill(color(255,165,0));
  rect(170,5,29,29);
  fill(255)
  text(meusPontos, 184,26);
  fill(color(255,165,0));
  rect(370,5,29,29);
  fill(255);
  text(pontosOponente, 384,26);
}

function somaPontos()
{
  if(xBolinha > 600){meusPontos += 1;ponto.play();}
  if(xBolinha < 0){pontosOponente += 1;ponto.play();}  
}

function preload()
{
  trilha = loadSound("trilha.mp3");
  raquetada = loadSound("raquetada.mp3");
  ponto = loadSound("ponto.mp3");
}
1 resposta

Olá Lucas, tudo certo?

Peço desculpa pela demora em lhe responder.

Testei o projeto que você compartilhou e percebi que o problema da raquete do oponente que nunca errava foi solucionado, e caso queira, compartilhe conosco o seu código, pois se alguém tiver o mesmo problema que você teve, você pode estar ajudando outras pessoas.

Percebi também que o seu projeto tem outro problema, em alguns momentos a bolinha acaba ficando presa entre a raquete e a parede, fazendo com que pontue infinitamente.

E para resolver isso desenvolvi um código que pode estar fazendo com que esse erro não ocorra novamente.

function bolinhaNaoFicaPresa( ){
    if (xBolinha - raio <= 0){
    xBolinha = 20;

    } else {

      if (xBolinha - raio >= 588){
        xBolinha = 570;
      }
    }
}

Basicamente ele vai reposicionar a bolinha quando ela chegar nas posições requeridas nas condições.

Espero que eu tenha lhe ajudado de alguma forma, e caso ainda tenha dúvidas estarei a sua disposição. Abraços e bons estudos!