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.
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