3
respostas

não consigo fazer o oponente errar

https://editor.p5js.org/luiza7/sketches/kBKolGTPc

//variaveis da bolinha let xBolinha = 300; let yBolinha = 200; let diametro = 20 let raio = diametro / 2;

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

//variaveis da raquete let xRaquete = 5; let yRaquete = 150; let comprimentoRaquete = 10; let alturaRaquete = 90;

//variaveis raquete oponente let xRaqueteOponente = 585; let YRaqueteOponente = 150; let velocidadeYOponente;

let colidiu = false;

//placar do jogo let meuspontos = 0; let pontosOponente = 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(); }

let chanceDeErrar = 0

function draw() { background(0); mostraBolinha(); movimentaBolinha(); verificaColisaoBorda(); mostraRaquete(xRaquete,yRaquete); movimentaRaquete(); //verificaColisaoRaquete(); verificaColisaoRaquete(xRaquete,yRaquete); mostraRaquete(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 mostraRaquete(x,y){ rect (x, y,comprimentoRaquete, alturaRaquete) }

function movimentaRaquete(){ 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; raquetada.play(); } }

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

function movimentaRaqueteOponente(){ velocidadeYOponente = yBolinha - YRaqueteOponente - comprimentoRaquete / 2 - 30; YRaqueteOponente += velocidadeYOponente calculaChanceDeErrar(); }

function incluiPlacar(){ stroke(255); textAlign(CENTER); textSize (18); fill(color(255, 140, 0)); rect(200, 10, 40, 20); fill(255); text(meuspontos, 220, 26); fill(color(255, 140, 0)); rect(400, 10, 40, 20); fill(255); text(pontosOponente, 420, 26); }

function marcaPonto(){ if (xBolinha > 590){ meuspontos += 1; ponto.play(); } if (xBolinha < 10){ pontosOponente += 1; ponto.play(); } }

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

3 respostas

Afaste um pouco mais o oponente da parede, alterando a posição x, o bug o meu parou assim

Mas para fazer o oponente errar acho que tem que mexer no Y. A solução do professor é um erro baseado na diferença de pontuação.

Eu fiz um sistema usando um desvio aleatório, que pode ir aumentando de acordo com o número de raquetadas (ou seja, quanto mais prolongar, maior a chance do oponente cometer um erro). Primeiro eu fiz uma variável (let) para contar as colisões. Depois uma desvio (let) para gerar um número aleatório, aumentando o parâmetro de acordo com o aumento das raquetadas/colisões.

function colisaoRaquete(x,y){
  colidiu = collideRectCircle(x, y, eRaquete, aRaquete, xBolinha, yBolinha, raio);
    if (colidiu) {
      velocidadexBolinha *= -1;
      raquetada.play();
      contadorColisao += 1;
      desvio = random(-10,10)*contadorColisao;
    }  
}

Assim, eu adicionei o desvio no movimento do oponente:

function movimentoOponente(){
  velocidadeOponente = yBolinha -yOponente - aRaquete/2;
  yOponente += velocidadeOponente + desvio;
}

E se alguém fizer ponto, o desvio volta a zero:

function marcaPonto(){
  if(xBolinha < 8){
    pontosOponente += 1;
    ponto.play();
    contadorColisao = 0;
  }
  if(xBolinha > 592){
    pontosPJ += 1;
    ponto.play();
    contadorColisao = 0;
  }  
}

Yuri, achei a tua ideia sensacional!!! A única coisa que reparei quando apliquei no meu projeto é que quando alguém marcar ponto, é o desvio que deve voltar a zero, não o contador. Você disse isso na explicação, mas escreveu errado no código askksaksaksaksak