Como sugestão da atividade 6 da aula editando placar e sons fiz uma forma diferente de possibilitar os pontos do oponente.
//variáveis de mudança de posição da raquete do computador, modificada a cada 3 segundos
let variacaoPosicaoRaqueteComputador = 0;
let variacao = setInterval(variacaoPosicao, 3000);
//função que gera aleatoriamente a variação da posição da raquete do computador
function variacaoPosicao() {
variacaoPosicaoRaqueteComputador = Math.random() * 100;
}
//função para desenhar e mover raquete do computador
function raqueteComputador() {
rect(xRaqueteComputador, yRaqueteComputador, larguraRaquete, alturaRaquete);
yRaqueteComputador = yBola - alturaRaquete / 2 + variacaoPosicaoRaqueteComputador;
}
Nos meus testes esse modelo se integra bem à função da atividade 6. Segue meu código completo.
/*
Pong em p5*
Estrutura:
Variáveis
Fuunções
*/
//Variáveis da bola
let xBola = 300;
let yBola = 200;
let diametroBola = 20;
let velocidadeXDaBola = 5;
let velocidadeYDaBola = 5;
//Variáveis das raquetes
let larguraRaquete = 10;
let alturaRaquete = 100;
let xRaqueteJogador = 10;
let yRaqueteJogador = 150;
let xRaqueteComputador = 580;
let yRaqueteComputador = 150;
let variacaoPosicaoRaqueteComputador = 0;
let variacao = setInterval(variacaoPosicao, 3000);
//Variáveis da pontuação do jogo
let pontoJogador = 0;
let pontoComputador = 0;
let chanceDeErrar = 0;
//biblioteca de colisão
let colisao = false;
//sons do jogo
let raquetada;
let ponto;
let trilha;
//Funções
function preload() {
raquetada = loadSound("raquetada.mp3");
ponto = loadSound("ponto.mp3");
trilha = loadSound("trilha.mp3");
}
function setup() {
createCanvas(600, 400);
trilha.loop();
}
function colisaoRaqueteJogador() {
colisao = collideRectCircle(xRaqueteJogador, yRaqueteJogador, larguraRaquete, alturaRaquete, xBola, yBola, diametroBola / 2);
if(colisao) {
velocidadeXDaBola *= -1;
raquetada.play();
}
colisao = false;
}
function colisaoRaqueteComputador() {
colisao = collideRectCircle(xRaqueteComputador, yRaqueteComputador, larguraRaquete, alturaRaquete, xBola, yBola, diametroBola / 2);
if(colisao) {
velocidadeXDaBola *= -1;
raquetada.play();
}
colisao = false;
}
function draw() {
background(0);
desenhaRede();
desenhaCirculo();
moveCírculo();
limiteTela();
raqueteJogador();
raqueteComputador();
colisaoRaqueteJogador();
colisaoRaqueteComputador();
pontuacao();
}
function desenhaCirculo() {
circle(xBola,yBola, diametroBola);
}
function moveCírculo() {
xBola += velocidadeXDaBola;
yBola += velocidadeYDaBola;
}
function limiteTela() {
if(xBola + diametroBola / 2 > width || xBola - diametroBola / 2 < 0) {
velocidadeXDaBola *= -1;
}
if(yBola + diametroBola / 2 > height || yBola - diametroBola / 2 < 0) {
velocidadeYDaBola *= -1;
}
}
function raqueteJogador() {
rect(xRaqueteJogador, yRaqueteJogador, larguraRaquete, alturaRaquete);
if(keyIsDown(UP_ARROW) && yRaqueteJogador > 0) {
yRaqueteJogador -= 10;
}
if(keyIsDown(DOWN_ARROW) && yRaqueteJogador + alturaRaquete < height) {
yRaqueteJogador += 10;
}
}
function raqueteComputador() {
rect(xRaqueteComputador, yRaqueteComputador, larguraRaquete, alturaRaquete);
yRaqueteComputador = yBola - alturaRaquete / 2 + chanceDeErrar + variacaoPosicaoRaqueteComputador;
calculaChanceDeErrar();
}
function variacaoPosicao() {
variacaoPosicaoRaqueteComputador = Math.random() * 100;
}
function calculaChanceDeErrar() {
if (pontoComputador >= pontoJogador) {
chanceDeErrar += 1
if (chanceDeErrar >= 19){
chanceDeErrar = 20
}
} else {
chanceDeErrar -= 1
if (chanceDeErrar <= -19){
chanceDeErrar = -20
}
}
console.log(chanceDeErrar);
}
function desenhaRede() {
let espaco = 10;
for(var i = 1; i <= 10; i++) {
rect(295, 0 + espaco, 10, 20);
espaco += 40;
}
}
function pontuacao() {
if(xBola + diametroBola / 2 > width) {
pontoJogador++;
ponto.play();
}
if(xBola - diametroBola / 2 < 0) {
pontoComputador++;
ponto.play();
}
stroke(255);
textAlign(CENTER);
textSize(20);
fill(255, 140, 0);
rect(width * 1 / 4 - 25, 10, 50, 25, 5);
rect(width * 3 / 4 - 25, 10, 50, 25, 5);
fill(255);
text(pontoJogador, width * 1 / 4, 30);
text(pontoComputador, width * 3 / 4, 30);
}