2
respostas

Oponente nunca erra e a bolinha sempre colide no mesmo ponto da raquete

Fiz meu código um pouco diferente do original, mas tentando seguir a mesma lógica, porém seguindo o proposto, não consigo fazer a bolinha variar o ponto de colisão na raquete do oponente, impossibilitando marcar pontos independente do tempo jogado.

Mesmo aumentando a diferença do y da Bolinha pro y da raquete do oponente, continua colidindo no mesmo ponto.

Segue o código:

//variáveis da bolinha
let xBolinha = 350;
let yBolinha = 250;
let sizeBolinha = 20;
let raio = sizeBolinha / 2;


//velocidade da bolinha
let speedXBolinha = 8;
let speedYBolinha = 8;


//variáveis da raquete
let xRaquete = 2;
let yRaquete = 200;
let widthRaquete = 10;
let heightRaquete = 90;


//variáveis da raquete oponente
let xEnemyRaquete = 688;
let yEnemyRaquete = 200;
let speedEnemyRaquete;


//variáveis do placar
let myPoints = 0;
let enemyPoints = 0;


function setup() {
  createCanvas(700, 500);
}

function draw() {
  background(0);
  showBolinha();
  speedBolinha();
  rebateBolinha();
  showRaquete(xRaquete, yRaquete);
  showRaquete(xEnemyRaquete, yEnemyRaquete);
  moveRaquete();
  collisionRaquete();
  moveEnemyRaquete();
  collisionEnemyRaquete();
  showScore();
  pointsDone();
}

function showBolinha() {
  circle(xBolinha, yBolinha, sizeBolinha);
}

function speedBolinha() {
  xBolinha += speedXBolinha;
  yBolinha += speedYBolinha;
}

function rebateBolinha() {
    if (xBolinha+raio > width || xBolinha-raio < 0) {
    speedXBolinha *= -1
  }
  if (yBolinha+raio > height || yBolinha-raio < 0) {
    speedYBolinha *= -1
  }
}

function showRaquete(x,y) {
  rect(x , y, widthRaquete, heightRaquete);
}

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

function collisionRaquete() {
    if (xBolinha - raio < xRaquete + widthRaquete &&
        yBolinha - raio < yRaquete + heightRaquete &&
        yBolinha + raio > yRaquete) {
    speedXBolinha *= -1
  }
}

function collisionEnemyRaquete() {
    if (xBolinha + raio > xEnemyRaquete &&
        yBolinha + raio > yEnemyRaquete &&
        yBolinha - raio < yEnemyRaquete + heightRaquete) {
    speedXBolinha *= -1
  }
}

function  moveEnemyRaquete() {
  speedEnemyRaquete = yBolinha - yEnemyRaquete - heightRaquete / 2 - 40;
  yEnemyRaquete += speedEnemyRaquete
}

function showScore() {
  fill (255)
  text (myPoints, 320, 20)
  text (enemyPoints, 360, 20)
}

function pointsDone () {
  if (xBolinha < 10) {
    enemyPoints += 1
  }
  if (xBolinha > 690) {
    myPoints += 1
  }
}

https://editor.p5js.org/felipesial/sketches/1MMHLyVKL

2 respostas

Também percebi isso no meu código, se a diferença para a velocidade do oponente for até 85 ele sempre acerta e se for acima de 90 ele sempre erra, ou seja, não há variação igual e eu copiei exatamente o código do exercício e acontece o mesmo

Percebi o mesmo, comentando para acompanhar.