1
resposta

Delimitação para raquete não ultrapassar a bordar. ERRO.

Estou tentando delimitar uma borda para a raquete oponente comandada pelo computador não conseguir ultrapassar as bordas do jogo para não ocorrer da raquete desaparecer, desenvolvendo no código consegui fazer um código que o primeiro IF e lido mas o segundo e ignorado, Qual método seria melhor para delimitar este limite e fazer o IF ser executado ?

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

//velocidade da bolinha let velocidadeXBolinha = 6; let velocidadeYBolinha = 6; let raqueteComprimento = 10; let raqueteAltura = 90;

//variáveis da raquete let xRaquete = 5; let yRaquete = 150;

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

//Colisão let colidiu = false;

//Chance de erro let chanceDeErrar = 0;

//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(); verificaColisaoRaquete(xRaquete, yRaquete); mostraRaquete(xRaqueteOponente, yRaqueteOponente); movimentaRaqueteOponente(); verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente); incluiPlacar(); marcaPonto(); calculaChanceDeErrar(); bolinhaNaoFicaPresa(); }

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

function mostraRaquete(x,y){ rect(x, y, raqueteComprimento, raqueteAltura); }

//Movimento function movimentaBolinha(){ xBolinha += velocidadeXBolinha; yBolinha += velocidadeYBolinha; }

function movimentaRaqueteOponente(){ velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 2 - 30; if (yRaqueteOponente >= 20){ yRaqueteOponente -= 10 } if (yRaqueteOponente <= 290){ yRaqueteOponente += 10 } yRaqueteOponente += velocidadeYOponente + chanceDeErrar calculaChanceDeErrar() }

function movimentaMinhaRaquete(){ if (keyIsDown(UP_ARROW) && yRaquete >= 20){ yRaquete -= 10; } if (keyIsDown(DOWN_ARROW) && yRaquete <= 290){ yRaquete += 10; } }

//Colisão function verificaColisaoBorda(){ if (xBolinha + raio> width || xBolinha - raio< 0){ velocidadeXBolinha *= -1; } if (yBolinha + raio> height || yBolinha - raio < 0){ velocidadeYBolinha *= -1; } }

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

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

//Placar 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); }

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

//Chance de Erro function calculaChanceDeErrar() { if (pontosDoOponente >= meusPontos) { chanceDeErrar += 1 if (chanceDeErrar >= 39){ chanceDeErrar = 40 } } else { chanceDeErrar -= 1 if (chanceDeErrar <= 35){ chanceDeErrar = 35 } } }

function bolinhaNaoFicaPresa(){ if (xBolinha + raio < 0){ console.log('bolinha ficou presa'); xBolinha = 300; } } `

1 resposta

Olá, Patrick! Tudo bem?

Um aluno aqui da Alura pensou na mesma ideia e criou uma excelente implementação para essa funcionalidade. Vou compartilhar o código dele aqui:

//Colisão das Raquetes com a borda da tela:
function colisaoBordaMinhaRaquete() {
  if (yRaquete + hRaquete > 400) {
    yRaquete -= 10;
  }
  if (yRaquete < 0) {
    yRaquete += 10;
  }
}

function colisaoBordaRaqueteOponente() {
  if (yRaqueteOponente + hRaquete > 400) {
    yRaqueteOponente -= 10;
  }
  if (yRaqueteOponente < 0) {
    yRaqueteOponente += 10;
  }
}

E o link para o projeto dele aqui:

Link para tópico - Exercício concluido Super Pong

Fico à disposição.

Um abraço e bons estudos!