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

Feedback do meu projeto final

Olá a todos, terminei recentemente o meu projeto do pong, e senti que o mesmo estava meio cru, e que poderia ser melhorado em alguns aspectos, vagando pelos forum, vi que muitos tinham realizados correções e adições muito boas aos seus projetos e graças a comunidade consegui melhorar meu código e jogo para que ficasse mais fluido e gostaria de um feedback para algo mais que possa ser melhorado ou até adicionado para deixa-lo melhor

Segue o código abaixo:

//Variáveis da bolinha
let xBall = 300;
let yBall = 200;
let diameter = 15;
let ray = diameter / 2 ;

//Variáveis da raquete
let xSpeedOfTheBall = 5;
let ySpeedOfTheBall = 5;
let lengthRacket = 8;
let heightRacket = 70;
let xRacket = 2;
let yRacket = 150;

//Variáveis do Oponente
let xEnemyRacket = 590;
let yEnemyRacket = 150;
let yEnemySpeed;

//Variáveis de colisão
let collide = false;

//Variáveis dos pontos
let myPoints = 0;
let enemyPoints = 0;

//Variáveis dos sons
let racketSound;
let pointSound;
let soundtrack;

//Variáveis dos erros da IA
let missChance = 0;

//Preset dos sons do jogo
function preload(){
  soundtrack = loadSound("soundtrack.mp3");
  pointSound = loadSound("pointSound.mp3");
  racketSound = loadSound("racketSound.mp3");
}

//Criação do Plano de fundo
function setup() {
  createCanvas(600, 400);
  soundtrack.loop();
}

//Organização de funções
function draw() {
  background(0, 139, 139);
  back();
  Ball();
  ballMov();
  ballCollide();
  Racket(xRacket, yRacket);
  racketControl();
  enemyRacket(xEnemyRacket, yEnemyRacket);
  enemyRacketMovement();
  racketCollide(xEnemyRacket, yEnemyRacket);
  racketCollide(xRacket, yRacket);
  scoreboard();
  scorePoints();

}

//Função da Bolinha
function Ball(){
  fill(color(255, 255, 0));
  circle(xBall, yBall, diameter);
}


//Movimentação da bolinha
function ballMov(){
  xBall += xSpeedOfTheBall;
  yBall += ySpeedOfTheBall;
}


//Colisão da Bolinha
function ballCollide(){
  if(xBall + ray > width || xBall - ray < 0){
     xSpeedOfTheBall *= -1;
     }
  if(yBall + ray > height || yBall - ray < 0){
     ySpeedOfTheBall *= -1
     }
}

//Criação da raquete
function Racket(x, y) {
  stroke(0),
  fill(color(0, 0, 255))
  rect(x, y, lengthRacket, heightRacket); 
}

//Criação da raquete inimiga
function enemyRacket(x, y) {
  stroke(0),
  fill(color(255, 0, 0))
  rect(x, y, lengthRacket, heightRacket); 
}

//Controles da raquete
function racketControl(){
  if(keyIsDown(UP_ARROW) && yRacket >= 0){
    yRacket -= 8;
  }
  if(keyIsDown(DOWN_ARROW) && yRacket <= (400 - heightRacket)){

    yRacket += 8;
  }
}

//Colisão da raquete
function racketCollide(x, y){
    collide = collideRectCircle(x, y, lengthRacket, heightRacket, xBall, yBall, ray);
    if (collide) {
        xSpeedOfTheBall *= -1;
        racketSound.play();
    }
}

//Movimento da raquete oponente
function enemyRacketMovement(){
  yEnemySpeed = yBall -yEnemyRacket - lengthRacket / 2 - 30;
  yEnemyRacket += yEnemySpeed + missChance
  calcMissChance()
}

//Placar
function scoreboard(){
  stroke(255),
  textAlign(CENTER);
  textSize(16);
  fill(color(0, 139, 139));
  rect(150, 10, 40, 20);
  fill(255)
  text(myPoints, 170, 26);
  fill(color(0, 139, 139));
  rect(450, 10, 40 ,20);
  fill(255)
  text(enemyPoints, 470, 26);
}

//Marcar os pontos
function scorePoints(){
  {
     if (xBall > 590) {
        myPoints += 1;
         setTimeout(returnBall,0);
         pointSound.play();
    }
    if (xBall < 10) {
        enemyPoints += 1;
          setTimeout(returnBall,0);
          pointSound.play();
    }  

  };
}

//Calcular chance de erro
function calcMissChance(){
  if(enemyPoints >= myPoints){
   missChance += 1;
  if(missChance >= 39){
    missChance = 40;
    } 
  }else{
    missChance -= 1
    if(missChance <= 35){
       missChance = 35
       }
    }
}

//Plano de fundo
function back(){
  fill(color(0, 139, 139));
  circle(300,200,100);
  line(300,300,300,0);
  line(300,300,300,450);
}

 //Retorno da Bola ao centro
function returnBall(){
  xBall = 300;
  yBall = 200; 
}

Sou grato a todos que possam tirar um tempinho para poderem avaliar meu código, e aos que postaram no fórum, por causa de vocês eu consegui evoluir o meu codigo base! :)

1 resposta
solução!

Opa, Gabriel! Como você está?

Em primeiro lugar eu gostaria de parabenizá-lo pelo excelente código! Bem indentado, escrito em inglês e também com comentários relevantes. Um verdadeiro exemplo de boas práticas!

Suas implementações ficaram ótimas e a a customização do seu projeto ficou lindíssima! Parabéns pelo esforço e dedicação!

Compartilhe também o link do seu projeto, certamente irá ajudar outros alunos aqui da Alura.

Vou deixar aqui alguns links que redirecionam para diferentes soluções de outros alunos:

Níveis de dificuldade do oponente

Erro aleatório do oponente

Erro incremental

Espero que as informações também ajudem você!

Um forte abraço, bons estudos e avante!! :)