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

Possibilitando o erro da raquete do oponente

Como sugestão da atividade 6 da aula editando placar e sons fiz uma forma diferente de possibilitar os pontos do oponente.

//variáveis de mudança de posição da raquete do computador, modificada a cada 3 segundos
let variacaoPosicaoRaqueteComputador = 0;
let variacao = setInterval(variacaoPosicao, 3000);

//função que gera aleatoriamente a variação da posição da raquete do computador
function variacaoPosicao() {
  variacaoPosicaoRaqueteComputador = Math.random() * 100;
}

//função para desenhar e mover raquete do computador
function raqueteComputador() {
  rect(xRaqueteComputador, yRaqueteComputador, larguraRaquete, alturaRaquete);
    yRaqueteComputador = yBola - alturaRaquete / 2 + variacaoPosicaoRaqueteComputador; 
}

Nos meus testes esse modelo se integra bem à função da atividade 6. Segue meu código completo.

/*
Pong em p5*

Estrutura:
  Variáveis
  Fuunções
*/

//Variáveis da bola
let xBola = 300;
let yBola = 200;
let diametroBola = 20;
let velocidadeXDaBola = 5;
let velocidadeYDaBola = 5;

//Variáveis das raquetes
let larguraRaquete = 10;
let alturaRaquete = 100;
let xRaqueteJogador = 10;
let yRaqueteJogador = 150;
let xRaqueteComputador = 580;
let yRaqueteComputador = 150;
let variacaoPosicaoRaqueteComputador = 0;
let variacao = setInterval(variacaoPosicao, 3000);

//Variáveis da pontuação do jogo
let pontoJogador = 0;
let pontoComputador = 0;
let chanceDeErrar = 0;

//biblioteca de colisão
let colisao = false;

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

//Funções  
function preload() {
  raquetada = loadSound("raquetada.mp3");
  ponto = loadSound("ponto.mp3");
  trilha = loadSound("trilha.mp3");
}
function setup() {
  createCanvas(600, 400);
  trilha.loop();
}
function colisaoRaqueteJogador() {
  colisao = collideRectCircle(xRaqueteJogador, yRaqueteJogador, larguraRaquete, alturaRaquete, xBola, yBola, diametroBola / 2);
  if(colisao) {
    velocidadeXDaBola *= -1;
    raquetada.play();
  }
  colisao = false;
}
function colisaoRaqueteComputador() {
  colisao = collideRectCircle(xRaqueteComputador, yRaqueteComputador, larguraRaquete, alturaRaquete, xBola, yBola, diametroBola / 2);
  if(colisao) {
    velocidadeXDaBola *= -1;
    raquetada.play();
  }
  colisao = false;
}
function draw() {
  background(0);
  desenhaRede();
  desenhaCirculo();
  moveCírculo();
  limiteTela();
  raqueteJogador();
  raqueteComputador();
  colisaoRaqueteJogador();
  colisaoRaqueteComputador();
  pontuacao();
}
function desenhaCirculo() {
  circle(xBola,yBola, diametroBola);
}
function moveCírculo() {
  xBola += velocidadeXDaBola;
  yBola += velocidadeYDaBola;
}
function limiteTela() {
  if(xBola + diametroBola / 2 > width || xBola - diametroBola / 2 < 0) {
    velocidadeXDaBola *= -1;
  }
  if(yBola + diametroBola / 2 > height || yBola - diametroBola / 2 < 0) {
    velocidadeYDaBola *= -1;
  }
}
function raqueteJogador() {
  rect(xRaqueteJogador, yRaqueteJogador, larguraRaquete, alturaRaquete);
  if(keyIsDown(UP_ARROW) && yRaqueteJogador > 0) {
    yRaqueteJogador -= 10;
  }
  if(keyIsDown(DOWN_ARROW) && yRaqueteJogador + alturaRaquete < height) {
    yRaqueteJogador += 10;
  }
}
function raqueteComputador() {
  rect(xRaqueteComputador, yRaqueteComputador, larguraRaquete, alturaRaquete);
    yRaqueteComputador = yBola - alturaRaquete / 2 + chanceDeErrar + variacaoPosicaoRaqueteComputador; 
    calculaChanceDeErrar();
}
function variacaoPosicao() {
  variacaoPosicaoRaqueteComputador = Math.random() * 100;
}
function calculaChanceDeErrar() {
  if (pontoComputador >= pontoJogador) {
    chanceDeErrar += 1
    if (chanceDeErrar >= 19){
    chanceDeErrar = 20
    }
  } else {
    chanceDeErrar -= 1
    if (chanceDeErrar <= -19){
    chanceDeErrar = -20
    }
  }
  console.log(chanceDeErrar);
}
function desenhaRede() {
  let espaco = 10;
  for(var i = 1; i <= 10; i++) {
    rect(295, 0 + espaco, 10, 20);
    espaco += 40; 
  }
}
function pontuacao() {
  if(xBola + diametroBola / 2 > width) {
    pontoJogador++;
    ponto.play();
  }
  if(xBola - diametroBola / 2 < 0) {
    pontoComputador++;
    ponto.play();
  }
  stroke(255);
  textAlign(CENTER);
  textSize(20);
  fill(255, 140, 0);
  rect(width * 1 / 4 - 25, 10, 50, 25, 5);
  rect(width * 3 / 4 - 25, 10, 50, 25, 5);
  fill(255);
  text(pontoJogador, width * 1 / 4, 30);
  text(pontoComputador, width * 3 / 4, 30);
}

https://editor.p5js.org/fxclsmg/sketches/YODkmFIoG

1 resposta
solução!

Olá Felipe, Tudo Beleza ? =)

Muito Bem Felipe. Seu código ficou Muito Bom . Meus Parabéns !!!!!

Me diverti jogando a sua Versão de Pong, o seu programa rodou perfeitamente =) .

Muito Boa a sua Solução para o jogo. Nós recomendamos que você escreva os seus códigos da maneira que seja mais confortável pra Você <o/.

Se tiver qualquer dúvida, nessa ou em outras atividades, pode nos procurar aqui no Fórum, que vamos sempre te Ajudar =) .

Grande Abraço Felipe. Continue com os Bons Estudos, e tenha uma Ótima Semana e um Feliz Ano Novo =) .