Estou fazendo os mesmos prompts para o chatGPT, mas o código não é o mesmo das aulas, percebi que já houveram algumas atualizações e mesmo na versão gratuita o código está mais bem feito e limpo, quase não há linhas de código inúteis, mas temos que pedir com carinho pq tem hora que ele se revolta e começa a ter muitos bugs. Não é uma dúvida, só uma observação pra deixar registrado. Bom curso pra vcs! <3
Até agora o código está assim:
// Variáveis da bola
let bolaX, bolaY, bolaVelX, bolaVelY, bolaRaio = 10;
// Variáveis da raquete do jogador
let raqueteJogadorY;
const raqueteLargura = 10;
const raqueteAltura = 80;
const jogadorX = 20;
// Variáveis da raquete do computador
let raqueteComputadorY;
const computadorX = 690;
// Tamanho da tela e das barras
const larguraTela = 720;
const alturaTela = 480;
const alturaBarra = 5; // Altura das barras horizontais
function setup() {
createCanvas(larguraTela, alturaTela);
iniciarJogo();
}
function iniciarJogo() {
// Posiciona a bola no centro e define velocidade inicial
bolaX = larguraTela / 2;
bolaY = alturaTela / 2;
bolaVelX = random(3, 4) * (random() > 0.5 ? 1 : -1);
bolaVelY = random(2, 3) * (random() > 0.5 ? 1 : -1);
// Posiciona as raquetes
raqueteJogadorY = alturaTela / 2 - raqueteAltura / 2;
raqueteComputadorY = alturaTela / 2 - raqueteAltura / 2;
}
function draw() {
background(0);
desenharBarras();
desenharBola();
moverBola();
desenharRaquete(jogadorX, raqueteJogadorY);
desenharRaquete(computadorX, raqueteComputadorY);
moverRaqueteJogador();
moverRaqueteComputador();
verificarColisoes();
}
function desenharBarras() {
fill(255, 0, 0); //cor da barra
// Barra superior
rect(0, 0, larguraTela, alturaBarra);
// Barra inferior
rect(0, alturaTela - alturaBarra, larguraTela, alturaBarra);
fill(255);
}
function desenharBola() {
fill(0, 0, 255)
ellipse(bolaX, bolaY, bolaRaio * 2, bolaRaio * 2);
fill(255)
}
function moverBola() {
bolaX += bolaVelX;
bolaY += bolaVelY;
// Rebote nas barras superior e inferior
if (bolaY < alturaBarra + bolaRaio || bolaY > alturaTela - alturaBarra - bolaRaio) {
bolaVelY *= -1;
}
// Verifica se houve gol e reposiciona a bola no centro
if (bolaX < 0 || bolaX > larguraTela) {
iniciarJogo();
}
}
function desenharRaquete(x, y) {
rect(x, y, raqueteLargura, raqueteAltura);
}
function moverRaqueteJogador() {
// Controla a raquete do jogador com o mouse
raqueteJogadorY = constrain(mouseY - raqueteAltura / 2, alturaBarra, alturaTela - alturaBarra - raqueteAltura);
}
function moverRaqueteComputador() {
// Move a raquete do computador para uma posição aleatória após o jogador tocar na bola
if (bolaX - bolaRaio <= jogadorX + raqueteLargura && bolaY >= raqueteJogadorY && bolaY <= raqueteJogadorY + raqueteAltura) {
raqueteComputadorY = random(alturaBarra, alturaTela - alturaBarra - raqueteAltura);
}
// A raquete do computador se move lentamente em direção à posição aleatória
raqueteComputadorY += (raqueteComputadorY - bolaY) * -0.05;
raqueteComputadorY = constrain(raqueteComputadorY, alturaBarra, alturaTela - alturaBarra - raqueteAltura);
}
function verificarColisoes() {
// Colisão com a raquete do jogador
if (bolaX - bolaRaio <= jogadorX + raqueteLargura && bolaY >= raqueteJogadorY && bolaY <= raqueteJogadorY + raqueteAltura) {
bolaVelX *= -1; // Inverte a direção horizontal
// Calcula a posição de impacto na raquete do jogador (de -1 na borda superior a +1 na borda inferior)
let impacto = (bolaY - raqueteJogadorY - raqueteAltura / 2) / (raqueteAltura / 2);
// Ajusta o ângulo da bola com base na posição de impacto
bolaVelY = impacto * 3; // Define um fator de ajuste para o ângulo vertical
// Aumenta a velocidade da bola após colisão
bolaVelX *= 1.5;
bolaVelY *= 1.5;
}
// Colisão com a raquete do computador
if (bolaX + bolaRaio >= computadorX && bolaY >= raqueteComputadorY && bolaY <= raqueteComputadorY + raqueteAltura) {
bolaVelX *= -1; // Inverte a direção horizontal
// Calcula a posição de impacto na raquete do computador (de -1 na borda superior a +1 na borda inferior)
let impacto = (bolaY - raqueteComputadorY - raqueteAltura / 2) / (raqueteAltura / 2);
// Ajusta o ângulo da bola com base na posição de impacto
bolaVelY = impacto * 3; // Define um fator de ajuste para o ângulo vertical
// Aumenta a velocidade da bola após colisão
bolaVelX *= 1.1;
bolaVelY *= 1.1;
}
}