Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Resolução do exercício - Jogo do Pong em JS

function setup() {
  createCanvas(600, 400);
}

function draw() {
  background(0);
  mostrabolinha();
  movimentabolinha();
  verificacolisaoborda();
  criarraquete();
  moverraquete();
  //colisaoraquete();
  colisaobiblioteca();
  criarraqueted();
  movimetaraqueted();
  limiteBordaSuperior(); 
  limitebordainferior(); 
}

//Criando variáveis para assumir a posição do círculo
let xBolinha = 100;
let yBolinha = 200;
let dBolinha = 15;

//Fazendo com que a bolinha não considere o valor x como o centro do raio.Raio = diamentro/2
let raio = dBolinha / 2;

//Criando a variável para assumir a velocidade da bolinha
let velocidadexBolinha = 6;
let velocidadeyBolinha = 6;

//Criando a função para mostrar a bolinha
function mostrabolinha (){
  circle(xBolinha, yBolinha, dBolinha);
}

//Criando a função para movimentar a bolinha
function movimentabolinha(){
  xBolinha += velocidadexBolinha;
  yBolinha += velocidadeyBolinha;
}

//Criando a função para verificar quando a bolinha toca a borda
function verificacolisaoborda() {
  //Verificar se a bolinha toca a borda
  if(xBolinha + raio > width || xBolinha - raio < 0) {
    velocidadexBolinha *= -1;
  }  
  if(yBolinha + raio > height || yBolinha - raio < 0 ){
    velocidadeyBolinha *= -1;
  }
}

//Criando a variável para assumir a posição da raquete esquerda
let xraquete = 2;
let yraquete = 150;
let comprimraquete = 10;
let alturaraquete = 90;

//Criando a função para criar a raquete da esquerda
function criarraquete () {
  rect(xraquete, yraquete, comprimraquete, alturaraquete);
}

//Criando a função para mover a raquete da esquerda
function moverraquete() {
    if (keyIsDown(UP_ARROW)) {

      if (limiteBordaSuperior()) {
        yraquete -= 10;
      }
    }

    if (keyIsDown(DOWN_ARROW)) {
      if(limitebordainferior()) {
        yraquete += 10;
      }
    }
}

//Criando as funções Limites --> Ao pesquisar como limitar as bordas, encontrei a orintação com CARLOS VINICIOS DE SOUZA BARROS
 function limiteBordaSuperior(){
    return  yraquete > 0
  }

function limitebordainferior (){
   return yraquete + alturaraquete < 400;
}

//Criando a variável para assumir a posição da raquete direita
let xraqueted = 588;
let yraqueted = 150;
let comprimraqueted = 10;
let alturaraqueted = 90;

//Criando a variavel para assumir a velocidade da raquete da direita
let velocidadexraqueted = 7;

//Criando função para criar a raquete da direita
function criarraqueted () {
  rect(xraqueted, yraqueted, comprimraquete, alturaraquete);
}

//Criando a função para movimentar a raquete da direita
function movimetaraqueted(){
  yraqueted +=velocidadeyBolinha;
}

//Função criada para verificar a colisão da bolinha da raquete.
//Comentada por ser substituída pela função da biblioteca p5.collide2d.js

//function colisaoraquete () {
//  if (xBolinha - raio < xraquete + comprimraquete && yBolinha - raio //< yraquete + alturaraquete && yBolinha + raio > yraquete) {
//    velocidadeyBolinha *= -1;
//  }
//}

//Criando a variável colisao e atribuindo o valor inicial como falso
let colisao = false;
let colisaod = false;

//função herdada da biblioteca p5.collide2d.js
function colisaobiblioteca() {
  colisao = collideRectCircle(xraquete, yraquete, comprimraquete, alturaraquete, xBolinha, yBolinha, raio);

  if(colisao) {
    velocidadeyBolinha *= -1;
  }
  colisaod = collideRectCircle(xraqueted, yraqueted, comprimraqueted, alturaraqueted, xBolinha, yBolinha, raio);

  if(colisaod) {
    velocidadeyBolinha *= -1;
  }
}
1 resposta
solução!

Oi, Huelvedra! Tudo bem?

Conferi o seu código, parabéns pelo desempenho! Porém tenho algumas sugestões para ele:

Inicialmente, deixo como sugestão algumas alterações para o seu código ficar cada vez melhor. Geralmente recomenda-se como uma boa prática ao nomear uma função usar o padrão Camel Case, no qual a primeira palavra referente a nomenclatura inicia com uma letra minúscula, enquanto as demais que a sucedem iniciam com letra maiúscula, como nos exemplos: “meuCodigo” e “limiteBordaInferior”.

Somado a isso, para que a bolinha inicie no centro é necessário que ela siga as coordenadas abaixo, pois o quadro tem dimensões (600,400):

let xBolinha = 100;
let yBolinha = 200;

Indico também para a melhor organização do código deixar todas as declarações de variáveis juntas no início do código.

Em relação ao resultado do código, notei que a verificação da bolinha com a raquete não estava ocorrendo como o esperado, pois a bolinha estava ainda ultrapassando a raquete, não a reconhecendo.

Entretanto para resolver esse probleminha basta apenas trocar a condição velocidadeyBolinha *= -1; por velocidadexBolinha *= -1; alterando assim a velocidade de x da bolinha, não de y, na função colisaobiblioteca(). Dessa forma, o código dessa função fica:

function colisaobiblioteca() {
  colisao = collideRectCircle(xraquete, yraquete, comprimraquete, alturaraquete, xBolinha, yBolinha, raio);

  if(colisao) {
    velocidadexBolinha *= -1;
  }

  colisaod = collideRectCircle(xraqueted, yraqueted, comprimraqueted, alturaraqueted, xBolinha, yBolinha, raio);

  if(colisaod) {
    velocidadexBolinha *= -1;
  }

}

Qualquer dúvida fique a vontade em comentar, ficarei super feliz em poder ajudar!

Um forte abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!