O final do meu projeto, infelizmente não consegui corrigir o bug de ficar preso na raquete, vez ou outra ele ainda acaba ficando preso, depois de um tempo. Além de não ter certeza se consegui aplicar o código de fazer o opoente errar.
https://editor.p5js.org/Byron_18/full/juzDHySO9 https://editor.p5js.org/Byron_18/sketches/juzDHySO9
//Bolinha
let xBolinha = 300
let yBolinha = 200
let diametro = 20
let raio = diametro / 2
let velocidadexBolinha = 5
let velocidadeyBolinha = 5
//Jogador
let xRaquete = 2
let yRaquete = 150
//Oponente
let xRaqueteOponente = 590
let yRaqueteOponente = 150
let velocidadeYOponente
let chanceDeErrar = 0;
let raqueteComprimento = 8
let raqueteAltura = 80
let colidiu = false;
//placar do jogo
let meusPontos = 0
let pontosDoOponente = 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()
}
function draw() {
background(1)
mostraBolinha()
movimentoBolinha()
verificaColisaoBorda()
mostraRaquete(xRaquete,yRaquete)
movimentoraquete()
//colisaoRaquete()
colisaoRaquetesBiblioteca(xRaquete, yRaquete)
mostraRaquete(xRaqueteOponente, yRaqueteOponente)
raqueteOponente()
colisaoRaquetesBiblioteca(xRaqueteOponente, yRaqueteOponente)
incluiPlacar()
marcaPonto()
loopRaqueteParede()
}
function mostraBolinha() {
circle(xBolinha, yBolinha, diametro)
}
function mostraRaqueteOponente() {
rect(xRaqueteOponente, yRaqueteOponente, raqueteComprimento, raqueteAltura)
}
function movimentoBolinha() {
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, raqueteComprimento, raqueteAltura)
}
function movimentoraquete(){
if (keyIsDown(UP_ARROW)) {
yRaquete -= 10
}
if (keyIsDown(DOWN_ARROW)) {
yRaquete += 10
}
}
function raqueteOponente() {
velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 3 - 50;
yRaqueteOponente += velocidadeYOponente + chanceDeErrar
calculaChanceDeErrar()
}
function colisaoRaquete() {
if (xBolinha - raio < xRaquete + raqueteComprimento
&& yBolinha - raio < yRaquete + raqueteAltura
&& yBolinha + raio > yRaquete) {
velocidadexBolinha *= -1
raquetada.play()
}
}
function colisaoRaquetesBiblioteca(x,y) {
colidiu = collideRectCircle(x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio);
if (colidiu){
velocidadexBolinha *= -1;
raquetada.play()
}
}
function incluiPlacar(){
stroke(255);
textAlign(CENTER);
textSize(16);
fill(color(255, 140, 0));
rect(180, 10, 40, 20);
fill(255);
text(meusPontos, 200, 26);
fill(color(255, 140, 0));
rect(380, 10, 40, 20);
fill(255);
text(pontosDoOponente, 400, 26);
}
function marcaPonto(){
if (xBolinha > 590){
meusPontos += 1;
ponto.play()
}
if (xBolinha < 10){
pontosDoOponente += 1;
ponto.play()
}
}
function calculaChanceDeErrar() {
if (pontosDoOponente >= meusPontos) {
chanceDeErrar += 1
if (chanceDeErrar >= 39){
chanceDeErrar = 40
}
}
else {
chanceDeErrar -= 1
if (chanceDeErrar <= 35){
chanceDeErrar = 35
}
}
}
function loopRaqueteParede(){
if(yRaquete > 400){
yRaquete = 0;
}
if(yRaquete < 0){
yRaquete = 400;
}
}
function bolinhaNaoFicaPresa(){
if (XBolinha - raio < 0){
XBolinha = 23
}
}