Nos extremos da minha raquete a bolinha ultrapassa a borda e faz contagem de 98 pontos para o oponente e retornar. Não consigo visualizar o erro.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Nos extremos da minha raquete a bolinha ultrapassa a borda e faz contagem de 98 pontos para o oponente e retornar. Não consigo visualizar o erro.
Olá, Peres! Tudo bem contigo?
Poste seu link editor para que possamos dar uma olhada!
Ficamos no aguardo!
segue código como solicitado
// variaveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 20;
let raio = diametro / 2;
// velocidade da bolinha
let velocidadeXBolinha = 5;
let velocidadeYBolinha = 5;
// variavéis da raquete
let xRaquete = 5;
let yRaquete = 150;
let larguraRaquete = 10;
let comprimentoRaquete = 90;
let deslocamentoDaRaquete = 6;
//variaveis da raquete oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYRaqueteOponente;
//variavéis para marcar pontos
let meusPontos = 0;
let pontosOponente = 0;
let chanceErrar = 0;
function setup() {
createCanvas(600, 400);
}
function draw() {
background(0);
mostraBolinha();
movimentaBolinha();
tocarBorda();
mostraRaquete(xRaquete, yRaquete);
movimentaMinhaRaquete();
mostraRaquete(xRaqueteOponente, yRaqueteOponente);
colisaoComRaquete();
movimentaRaqueteOponente();
colisaoComRaqueteOponente();
incluiPlacar();
marcaPontos();
}
function mostraBolinha(){
circle(xBolinha,yBolinha,diametro);
}
function movimentaBolinha(){
xBolinha+= velocidadeXBolinha;
yBolinha+= velocidadeYBolinha;
}
function tocarBorda(){
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, larguraRaquete, comprimentoRaquete);
}
function movimentaMinhaRaquete(){
if(keyIsDown(DOWN_ARROW)){
yRaquete+= 6;}
if (keyIsDown(UP_ARROW)){
yRaquete-= 6;
}
}
function colisaoComRaquete(){
if(xBolinha - raio < xRaquete + larguraRaquete &&yBolinha + raio > yRaquete &&yBolinha - raio < yRaquete + comprimentoRaquete
){
velocidadeXBolinha *= -1;
}
}
function movimentaRaqueteOponente(){
velocidadeYRaqueteOponente = yBolinha -yRaqueteOponente - comprimentoRaquete/2 - 30;
yRaqueteOponente += velocidadeYRaqueteOponente + chanceErrar;
calculaChanceErrar();
}
function colisaoComRaqueteOponente(){
if (xBolinha + raio > xRaqueteOponente && yBolinha + raio > yRaqueteOponente && yBolinha - raio < yRaqueteOponente + comprimentoRaquete){
velocidadeXBolinha *= -1;
}
}
function incluiPlacar(){
stroke(255);
textAlign(CENTER);
textSize(20);
fill(color(255,140,0));
rect(130,10,40,25);
rect(430,10,40,25);
fill(255);
text(meusPontos,150,30);
fill(255);
text(pontosOponente,450,30);
}
function marcaPontos(){
if(xBolinha > 590){
meusPontos += 1;
}
if(xBolinha < 10){
pontosOponente += 1;
}
}
function calculaChanceErrar(){
if(pontosOponente >= meusPontos){
chanceErrar += 1;
}if(chanceErrar >= 39){
chanceErrar = 40;
}else{
chanceErrar -= 1;
if(chanceErrar<=35){
chanceErrar = 35
}
}
}
Fala, Peres! Tudo bem?
Eu rodei seu código e não consegui encontrar o erro.
Está rodando como esperado.
Se quiser mandar seu link editor do projeto, ficará mais fácil de ver rodando e aplicar alguns testes. Mas joguei seu código no meu projeto e teve o comportamento normal, Peres!!!
Peres, talvez sua raquete esteja muito grossa, o que faria a bola ficar rebatendo nos interiores da raquete, pois a orientação que ela recebe é mudar a direção quando toca a raquete. Se a raquete for muito longa, o computador demora um milésimo a mais para responder, o suficiente para a bolinha entrar em loop e ficar se rebatendo dentro da raquete até que o computador consiga responder. Tente diminuir e me diga se deu certo :)
vou fazer o teste e envio o retorno