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

Finalizado e Sugestão de Erros do Oponente

Observei em outros tópicos a dificuldade de fazer o oponente errar, a raquete saindo pra fora da tela, e alguns outros problemas, juntei algumas ideias e fiz uma própria: Basicamente, quando o oponente faz um ponto, a chance de ele errar zera, quando você faz um ponto também zera, porém, quando você rebate, essa chance aumenta drasticamente. Aqui está meu projeto (Algumas variáveis contém nomes diferentes e também estilizei um pouco) https://editor.p5js.org/GabrielFMontoni/sketches/dSMfZG3g4

Projeto Final - https://editor.p5js.org/GabrielFMontoni/full/dSMfZG3g4 Se você procura saber como fiz para as chances do oponente ficarem assim, olhem as seguintes linhas:

let chanceDeErrar=38;
function colisaoBiblioteca(){
  colidiu = collideRectCircle(xRaqueteE, yRaqueteE, comprimentoRaquete, alturaRaquete, xBolinha, yBolinha, centroBolinha);
  if (colidiu){
    velocidadeXBolinha *= -1;
    raquetada.play();
    chanceDeErrar+=2;
  }

function bolinhaNaoFicaPresa(){
  if(xBolinha - centroBolinha < 0 ){
  xBolinha=23;
     chanceDeErrar+=1;
  }
  if(xBolinha + centroBolinha > 600){
    xBolinha=570;
     chanceDeErrar-=1;
  }
}

//variaveis Bolinha
let xBolinha = 305;
let yBolinha = 200;
let diametro = 15;
let centroBolinha = diametro/2;

//variaveis velocidade raquete
let yRaqueteD = 160;
let yRaqueteE = 160;
let xRaqueteD = 580;
let xRaqueteE = 10;
let alturaRaquete = 70;
let comprimentoRaquete = 10;

let colidiu = false;
let colidiuOponente = false;

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


let velocidadeYOponente =0;

let meusPontos = 0;
let pontosOponente = 0;

let raquetada;
let ponto;
let trilha;

let chanceDeErrar=35;

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

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

function draw() {
  background(22, 222, 75);
  rect(290,0,10,400);
  mostraBolinha();
  raquetes(xRaqueteE,yRaqueteE);
  raquetes(xRaqueteD,yRaqueteD);
  movimentarBolinha();
  baterBordas();
  movimentarRaquetes();
  //verificarColisao();
  colisaoBiblioteca();
  placar();
  mostrarPlacar();
  bolinhaNaoFicaPresa();
}

function mostraBolinha(){
    circle(xBolinha,yBolinha,diametro);

}

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

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

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


}

function raquetes(x,y){
  rect(x,y,comprimentoRaquete,alturaRaquete);

}

function movimentarRaquetes(){
  if(keyIsDown(DOWN_ARROW) && yRaqueteE <=(height - alturaRaquete)){
    yRaqueteE += 10;
  }
  if(keyIsDown(UP_ARROW) && yRaqueteE >=0){
    yRaqueteE -= 10;
  }
   velocidadeYOponente = yBolinha - yRaqueteD - comprimentoRaquete/2 -30 ;
yRaqueteD += velocidadeYOponente - chanceDeErrar;
  if(keyIsDown(83)&& yRaqueteD <=(height - alturaRaquete)){
    yRaqueteD+=10;
  }
  if(keyIsDown(87)&& yRaqueteD >=0){
    yRaqueteD-=10;
  }
}

function verificarColisao(){
   if(xBolinha - centroBolinha < xRaqueteE + comprimentoRaquete && yBolinha - centroBolinha <= yRaqueteE + alturaRaquete && yBolinha  >= yRaqueteE){
     velocidadeXBolinha *= -1;
  }
}

function colisaoBiblioteca(){
  colidiu = collideRectCircle(xRaqueteE, yRaqueteE, comprimentoRaquete, alturaRaquete, xBolinha, yBolinha, centroBolinha);
  if (colidiu){
    velocidadeXBolinha *= -1;
    raquetada.play();
    chanceDeErrar+=2;
  }
  colidiuOponente = collideRectCircle(xRaqueteD, yRaqueteD, comprimentoRaquete, alturaRaquete, xBolinha, yBolinha, centroBolinha);
  if(colidiuOponente){
    velocidadeXBolinha *= -1;
    raquetada.play();
  }
}

function placar(){
  if(xBolinha> 590){
    meusPontos += 1;
    ponto.play();
    chanceDeErrar=35;
  }
  if(xBolinha < 10  ){
    pontosOponente += 1;   
    ponto.play();
    chanceDeErrar=35;
  }
}

function mostrarPlacar(){
  fill(255);
  textAlign(CENTER);
  textSize(25);
  fill(255,165,0);
  rect(200,20,60,40,10);
  fill(255);
  text(meusPontos, 230,50);
  fill(255,165,0);
  stroke(255);
  rect(340,20,60,40,10);
  fill(255);
  text(pontosOponente,370,50);
}

function bolinhaNaoFicaPresa(){
  if(xBolinha - centroBolinha < 0 ){
  xBolinha=23;
     chanceDeErrar+=1;
  }
  if(xBolinha + centroBolinha > 600){
    xBolinha=570;
     chanceDeErrar-=1;
  }
}

1 resposta
solução!

Olá Gabriel, tudo bem?

Agradeço por compartilhar sua solução para o problema de fazer o oponente errar no jogo Pong. É muito legal ver a comunidade colaborando e compartilhando conhecimento.

Sua solução é interessante, aumentando a chance de erro do oponente quando o jogador rebate a bola. Além disso, é legal ver que você também resolveu outros problemas, como a raquete saindo da tela.

Obrigado por compartilhar seu projeto e também por explicar como fez para as chances do oponente ficarem assim. Tenho certeza que isso será útil para muitas pessoas que estão com dificuldades nesse jogo.

Grande abraço e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software