Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

só marca ponto quando bate em baixo da raquete do oponente

só marca ponto quando a bolinha vai em baixo da raquete do oponente

8 respostas

Enzo, tudo bom?

Posta seu código ai pra gente conseguir dar uma olhada, por favor.

//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametroBolinha = 15;

//variáveis da velocidade da bolinha 
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;
let raio = diametroBolinha / 2;

//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let comprimentoRaquete = 10;
let alturaRaquete = 72;

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

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

function setup() {
  createCanvas(600, 400);
}

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  verificaColisaoRaquete();
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
 // movimentaRaqueteOpnonente();
  verificaColisaoRaqueteOponente();
  incluiPlacar();
  marcaPonto();
}  

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

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

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

  if (yBolinha + raio > height || yBolinha - raio < 0){
    velocidadeYBolinha *= -1;
  }

}

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

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

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

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



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

function incluiPlacar(){
  fill(255)
  text(meusPontos, 278, 26)
  text(pontosOponente, 321, 26)
}

function marcaPonto(){
  if(xBolinha > 590){
    meusPontos += 1;
  }
  if(xBolinha < 10){
    pontosOponente += 1;
  }
}

Boa tarde, o erro está na função: verificaColisaoRaqueteOponente. Perceba que você está fazendo duas verificações iguais, além de não estar levando em consideração a altura da raquete do oponente, por isso está dando o erro. Lembre-se também de levar em consideração a posição Y da bolinha subtraindo o raio, pois assim ele verifica a borda da bolinha e não o centro.

E como fica essa parte do código? Vc pode me ajudar?

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

Agora ele não reconhece a colisão, ele bate na parede e atravessa a raquete do oponente e conta todos os pontos.

//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametroBolinha = 17;

//variáveis da velocidade da bolinha 
let velocidadeXBolinha = 2;
let velocidadeYBolinha = 2;
let raio = diametroBolinha / 2;

//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let comprimentoRaquete = 10;
let alturaRaquete = 72;

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

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

function setup() {
  createCanvas(600, 400);
}

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  verificaColisaoRaquete();
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOpnonente();
  verificaColisaoRaqueteOponente();
  incluiPlacar();
  marcaPonto();
}  

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

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

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

  if (yBolinha + raio > height || yBolinha - raio < 0){
    velocidadeYBolinha *= -1;
  }

}

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

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

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

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

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

function incluiPlacar() {
    stroke(255);
    textAlign(CENTER);
    textSize(16);
    fill(color(255, 140, 0));
    rect(150, 10, 40, 20);
    fill(255);
    text(meusPontos, 170, 26);
    fill(color(255, 140, 0));
    rect(450, 10, 40, 20);
    fill(255);
    text(pontosOponente, 470, 26);
}

function marcaPonto() {
    if (xBolinha > 590) {
        meusPontos += 1;
    }
    if (xBolinha < 10) {
        pontosOponente += 1;
    }
}
solução!

Na segunda verificação, ao invés de comprimentoRaquete tem que ser alturaRaquete.

Deu certo! Muito obrigado pela atenção!