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

Movimenta Raquete do Oponente (Jogo Pong em Java)

O meu código não ficou muito diferente da resolução, mas gostaria de saber se a função movimentaRaqueteOponente está razoável:

function movimentaRaqueteOponente() {

  yRaqueteOponente = yBolinha -30 - alturaRaquete/2 - chanceDeErrar;

  calculaChanceDeErrar();
}

Segue abaixo, o código inteiro:

let chanceDeErrar = 0;

//parametros da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 30;
let raio = diametro / 2;
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;

//parametros da raquete
let xRaquete = 10;
let yRaquete = 145;
let xRaqueteOponente = 580;
let yRaqueteOponente = 145;
let comprimentoRaquete = 90;
let alturaRaquete = 10;
let velocidadeYRaquete = 10;

//parametros do placar
let meusPontos = 0;
let pontosOponente = 0;

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

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

function draw() {
  background(0);

  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaquete();
  verificaColisaoRaquete();
  movimentaRaqueteOponente();
  verificaColisaoRaqueteOponente(); 
  placar();
  marcaPonto();
}

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

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

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

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

function movimentaRaquete() {
  if(keyIsDown(UP_ARROW) && yRaquete > 0) {
    yRaquete -= velocidadeYRaquete;
  } 
    if(keyIsDown(DOWN_ARROW) && yRaquete + comprimentoRaquete < 400) {
    yRaquete += velocidadeYRaquete;
  }
}

function verificaColisaoRaquete() {
  if(xBolinha - raio < xRaquete + alturaRaquete &&
    yBolinha + raio > yRaquete &&
    yBolinha - raio < yRaquete + comprimentoRaquete) {
    velocidadeXBolinha *= -1;
    raquetada.play();
     } 
}

function movimentaRaqueteOponente() {

  yRaqueteOponente = yBolinha -30 - alturaRaquete/2 - chanceDeErrar;

  calculaChanceDeErrar();
}

function calculaChanceDeErrar() {
  if(pontosOponente >= meusPontos) {
    chanceDeErrar += 1;
    if(chanceDeErrar >= 19) {
      chanceDeErrar = 20;
    }
  } else {
    chanceDeErrar -= 1;
  }
}

function verificaColisaoRaqueteOponente() {
  if(xBolinha + raio > xRaqueteOponente &&
    yBolinha + raio > yRaqueteOponente &&
    yBolinha - raio < yRaqueteOponente + comprimentoRaquete) {
     velocidadeXBolinha *= -1;
    raquetada.play();
     } 
}

function placar() {
  fill(color(58, 247, 0));
  rect(190, 10, 40, 20);
  fill(color(58, 247, 0));
  rect(370, 10, 40, 20);

  textAlign(CENTER);
  textSize(16);
  fill(0);
  text(meusPontos, 210, 26);
  text(pontosOponente, 390, 26);

}

function marcaPonto() {
  if(xBolinha > width - raio) {
    meusPontos += 1;
    ponto.play();
  }

  if(xBolinha < raio) {
    pontosOponente += 1;
    ponto.play();
  }

}

`

1 resposta
solução!

Olá, Lilian! Tudo bem contigo?

Ficou bacana sim!

Rodei seu código e teve o comportamento esperado ;-)

Ficou até mais enxuto!!!

Bacana!

Pratique sempre

Um abraço e bons estudos