Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Para o oponente Errar

A alteração que fiz no código para que o oponente erre foi a seguinte:

function movimentaRaqueteOponente(){ velocidadeYOponente = yBolinha/1.3 - yRaqueteOponente - raqueteComprimento -10; yRaqueteOponente += velocidadeYOponente }

eu dividi o yBolinha por 1.3 (cheguei nesse valor na base do tentativa e erro) e subtrai 10 no final da equação.

3 respostas

O codigo completo (e o link): https://editor.p5js.org/Sonserina-Vader/sketches/2Xga1dFmL

//variáveis da bolinha let xBolinha = 300; let yBolinha = 200; let diametro = 13; let raio = diametro/2;

//variáveis da raquete let xRaquete = 10; let yRaquete = 150; let raqueteComprimento = 10; let raqueteAltura = 90;

//variáveis do oponente let xRaqueteOponente = 585; let yRaqueteOponente = 150; let velocidadeYOponente;

//variáveis da velocidade da bolinha let velocidadeXBolinha = 6; let velocidadeYBolinha = 6;

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(0); mostraBolinha(); movimentaBolinha(); verificaColisaoBorda(); mostraRaquete(xRaquete, yRaquete); movimentaMinhaRaquete(); //verificaColisaoRaquete(); verificaColisãoRaquete(xRaquete, yRaquete); mostraRaquete(xRaqueteOponente, yRaqueteOponente); movimentaRaqueteOponente(); verificaColisãoRaquete(xRaqueteOponente, yRaqueteOponente); incluiPlacar(); marcaPonto(); }

function mostraBolinha(){ circle(xBolinha, yBolinha, diametro); }

function movimentaBolinha(){ 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 movimentaMinhaRaquete(){ if (keyIsDown(UP_ARROW)){ yRaquete -= 10; }

if (keyIsDown(DOWN_ARROW)){ yRaquete += 10; } }

function verificaColisaoRaquete(){ if (xBolinha - raio < xRaquete + raqueteComprimento && yBolinha - raio < yRaquete + raqueteAltura && yBolinha + raio > yRaquete){ velocidadeXBolinha *=-1 raquetada.play(); } }

function verificaColisãoRaquete(x, y){ colidiu = collideRectCircle(x,y,raqueteComprimento, raqueteAltura,xBolinha,yBolinha,raio); if (colidiu){ velocidadeXBolinha *=-1; raquetada.play(); } }

function movimentaRaqueteOponente(){ velocidadeYOponente = yBolinha/1.3 - yRaqueteOponente - raqueteComprimento -10; yRaqueteOponente += velocidadeYOponente }

function incluiPlacar(){ stroke(255); textAlign(CENTER); textSize(16); fill (color(255, 140, 0)); rect(150, 10, 40,20); fill (255); text(meusPontos, 170, 26); fill (color(255, 140, 0)); rect(450, 10, 40, 20); fill (255); text(pontosDoOponente, 470, 26); }

function marcaPonto(){ if(xBolinha > 590){ meusPontos += 1; ponto.play(); } if(xBolinha < 10){ pontosDoOponente += 1; ponto.play(); } }

solução!

Olá, Bruno! Como você está?

Que sugestão interessante, se pensarmos que as variáveis utilizam valores, basta realizarmos o cálculo correto para que o jogo funcione adequadamente! Parabéns pela iniciativa!

Um outro ponto surgiu aqui no fórum relacionado ao erro do oponente, que é conferir aleatoriedade ao erro. Essa implementação de aleatoriedade deixa o jogo mais dinâmico mesmo. Nós podemos utilizar os métodos Math.floor() e Math.random() para trabalhar em cima da raquete do oponente, pois vão fornecer a aleatoriedade no divisor e também da posição da raquete.

O post completo está nesse tópico aqui https://cursos.alura.com.br/forum/topico-a-bolinha-ou-acerta-ou-erra-158142

Você pode testar no seu projeto a mesma lógica e compartilhar conosco o resultado :)

Um abraço e bons estudos!!!

Por fim, gostaria de deixar uma sugestão para o melhor aproveitamento da plataforma. Você pode utilizar o botão "inserir bloco de código" para colar seu código aqui no fórum e ele ficar bem formatado, é o ícone </>. :D

Olá, Camila, estou bem e você?

Muito obrigado pelas sugestões ☺.