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

Ainda não consegui fazer o oponente errar mesmo usando o código novo

mesmo usando o código "extra" o meu oponente não erra

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

//velocidade da bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;

// variáveis da raquete
let xRaquete = 5;
let yRaquete = 150
let raqueteComprimento = 10;
let raqueteAltura = 90;

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

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

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

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();
  mostrarRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  //verificaColisaoRaquete();
  verificaColisaoRaquete(xRaquete, yRaquete);
  mostrarRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente);
  incluiPlacar();
  marcaPonto();

}

  function mostraBolinha() {

    circle(xBolinha, yBolinha, diametro);
  }

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 mostrarRaquete(x, y) {

  rect(x, y, raqueteComprimento,
       raqueteAltura);
}

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

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

function verificaColisaoRaquete(x,y) {
  colidiu = 
  collideRectCircle(x, y, raqueteComprimento + 6, raqueteAltura, xBolinha, yBolinha, raio);
  if (colidiu){
    velocidadeXBolinha *= -1;
    raquetada.play();
  }
}


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


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

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(pontosDoOponentes, 470, 26);
}

function marcaPonto() {
  if(xBolinha > 585) {
    meusPontos += 1;
    ponto.play();
  }
  if(xBolinha < 15) {
    pontosDoOponentes += 1;
    ponto.play();
  }
}
4 respostas
solução!

Olá, João! Tudo bem com você?

Verifiquei seu código e fiz apenas uma pequena alteração no valor na function calculaChanceDeErrar()

function calculaChanceDeErrar() {
  if (pontosDoOponentes >= meusPontos) {
    chanceDeErrar += 1
    if (chanceDeErrar >= 39){
    chanceDeErrar = 45 //apenas aumentei o valor
    }
  } else {
    chanceDeErrar -= 1
    if (chanceDeErrar <= 35){
    chanceDeErrar = 35
    }
  }
}

Com essa alteração, o cálculo para o erro da raquete do Oponente fica mais aparente.

Você poderia testar no seu projeto para ver o funcionamento?

Espero que tenha ajudado!

Um abraço e estamos à disposição :)

Obrigado Camila!

Acabei de fazer no meu e estou com o mesmo problema: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

// About the ball
let xBall = 300
let yBall = 200
let BallDiameter = 25
let BallRatio = BallDiameter / 2

// About the ball speed
let xBallSpeed = 20
let yBallSpeed = 20

// About the paddle
let xPaddle = 5;
let yPaddle = 150;
let PaddleWidth = 9;
let PaddleHeight = 90;

// About the opponnent's paddle
let xOpponnent = 586;
let yOpponnent = 150;
let OpponnentSpeed;
let Miss = 0

// About score
let PlayerScore = 0
let OpponnentScore = 0

//About P5 Collide 2D
let hit = false

// Sounds
let Background
let Touch
let Point

function preload(){

  Background = loadSound("Chumchum.mp3")
  Touch = loadSound("Gemido.mp3")
  Point = loadSound("Yamete_Kudasai.mp3")
}


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

function draw() {
  background(0);
  Ball();
  BallMovement();
  EdgeColision();
  Paddle(xPaddle, yPaddle);
  Paddle (xOpponnent, yOpponnent);
  PaddleMovement();
  OpponnentMovement();
  //PaddleColision();
  PaddleEdge();
  OpponnentEdge();
  p5collide2d(xPaddle, yPaddle);
  p5collide2d(xOpponnent, yOpponnent);
  MissChance();
  ScoreCount();
  Score ();
}

function Ball(){
   circle (xBall, yBall, BallDiameter);

}

function BallMovement(){
  xBall += xBallSpeed;
  yBall += yBallSpeed;

}

function EdgeColision(){
  if(xBall + BallRatio > width || xBall - BallRatio < 0){
    xBallSpeed *= -1;

  }
  if (yBall + BallRatio > height || yBall - BallRatio < 0){
    yBallSpeed *= -1;

  }
}

function Paddle (x, y){
  rect(x, y, PaddleWidth, PaddleHeight);

}

function PaddleMovement () {
  if (keyIsDown(UP_ARROW)) {yPaddle -= 10}
  if (keyIsDown(DOWN_ARROW)) {yPaddle +=10}
}

function PaddleColision (){
   if(xBall - BallRatio < xPaddle + PaddleWidth && yBall - BallRatio < yPaddle + PaddleHeight && yBall + BallRatio > yPaddle ) {xBallSpeed *= -1;}

}

function PaddleEdge (){

  if (yPaddle < 0) {yPaddle = 0}
  if (yPaddle + PaddleHeight > height) {yPaddle = height - PaddleHeight}
}
function OpponnentEdge(){
  if (yOpponnent < 0) {yOpponnent = 0}
  if (yOpponnent + PaddleHeight > height) {yOpponnent = height - PaddleHeight}
}

function p5collide2d(x, y){

  hit = collideRectCircle(x, y, PaddleWidth, PaddleHeight, xBall, yBall, BallRatio);
  if (hit){xBallSpeed *= -1; Touch.play();}
}

function OpponnentMovement (){
  OpponnentSpeed = yBall - yOpponnent - PaddleHeight /2 - 30
  yOpponnent += OpponnentSpeed + Miss
  MissChance();
}

function MissChance() {
  if (OpponnentScore >= PlayerScore) {
    Miss += 1
    if (Miss >= 39){
    Miss = 45
    }
  } else {
    Miss -= 1
    if (Miss <= 35){
    Miss = 35
    }
  }
}


function ScoreCount (){
  textAlign (CENTER)
  textSize (18)
  stroke (255)
  fill (color(255, 55, 202))
  rect (150, 7, 40, 25)
  rect (450,7, 40, 25)
  fill (255)
  text (PlayerScore, 170,26)
  text (OpponnentScore, 470, 26)

}

function Score (){
  if (xBall - BallRatio < 5) {OpponnentScore += 1; Point.play();}
  if (xBall + BallRatio > 595) {PlayerScore += 1; Point.play();}

}

Olá, João! Fico muito feliz que tenha solucionado o problema, continue compartilhando seus projetos e dúvidas conosco! Um abraço!

Liesel, você conseguiu solucionar?