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

Sugestão comportamento adversário e correção de bug

Fala pessoal, ao concluir o projeto do jogo Pong pude repara alguns bugse trabalhei no c+odigo para tentar melhorar a experiência do jogo.

  1. O oponente ou aertava demasiado ou errada sempre dependendo do edsvio colocado; alem disso ele sempre acompanhava a bolinha na esma velocidade. Assim pensei em uma maneira de movimenrtação dele mais natural. Como a gente movimenta a nossa raquete? Se a bolinha está pra cima apertamos as setas e a raquete se movementa na direção. Então euq uis simular esse comportamento trazendo uma velocidade à raquete. Assim, inclusive fica mais fácil ou mais difícil mexer com a dificuldade do jogo, podendo deixar o oponente mais rápido ou mais devagar, assim como a bolinha. Mas como fiz isso? coloquei uma variável de velocidade e esse valor é adicionado ou retirado da posição do meio da raquete doa dversário, se o Y da bolinah estiver menor ele retira valor, se estiver maio ele adiciona. Isso faz com que ele se moviemnte de maneira mais fluida e quanto maior a diferença na velocidade dele e da bolinha mais fácil ele errar. Com isso é poss+ivel, inclusive, fazer um aumento progressivo de difikculdade com base no tempo ou pontuação.

  2. Outro bug era que as vezes a bolinha atravessava a parede e ia embora, junto com ela ia a raquete do oponente, isso porque a ideia de inverter a trajetória no eixo X era reprtida duas vezes dependendo da movimentação da bolinha. para corrigir isso tentei diversas coisas até uma deu resultado, em vez de inverter o sentido em duas variáveis diferentes eu quis juntar tudo em apenas um if fazendo a condição ocorrer sempre seja uma lado ou outro, assim a bolinha nunca mais escapou.

  3. Outro fato que era bobo mas me incomodava era a possibilidade de mover a raquete para além das bordas, então para resolver isso simplesmente adicionei um limite na condicional de mocviemnto, como? A adição ou remoção de valores do eixo Y só ocorre se precionar as setas E o valor de y ser maior que zero ou menor que o limite da altura.

Segue abeixo o código completo:

//ball variables
let ballX = 300;
let ballY = 200;
let d = 13;
let r = d / 2 ;
let ballSpeedX = 6;
let ballSpeedY = 6;

//bat_a variables
let batX_a = 5;
let batY_a = 150;
let batWidth_a = 10;
let batHeight_a = 90;

//bat_b variables
let batX_b = 585;
let batY_b = 150;
let batWidth_b = 10;
let batHeight_b = 90;
let batSpeed_b = 4;

//game score
let scoreA = 0;
let scoreB = 0;

function preload(){
        ambiance = loadSound("trilha.mp3");
          hit = loadSound("raquetada.mp3");
          gol = loadSound("ponto.mp3");
}

function setup() {
          createCanvas(600, 400);
          ambiance.loop();
}

function draw() {
          background(0);
          circle(ballX, ballY, d);
          ballMoviment();
          impact();
          rect(batX_a, batY_a, batWidth_a, batHeight_a);
          rect(batX_b, batY_b, batWidth_b, batHeight_b);
          bat_aMoviment();
          batImpact();
          bat_bMoviment();
          score();
}

function ballMoviment(){
          ballX += ballSpeedX;
          ballY += ballSpeedY;
}

function impact(){
          if (ballX + r> width ||
             ballX - r< 0 || batImpact()){
            ballSpeedX *= -1;
          }else if (ballY + r> height ||
             ballY - r < 0){
            ballSpeedY *= -1;
          }
}

function bat_aMoviment(){
          if (keyIsDown(UP_ARROW)&&batY_a>0){
            batY_a -= 10;
          }
          if (keyIsDown(DOWN_ARROW)&&batY_a+batHeight_a<400){
            batY_a += 10;
          }
}

function batImpact(){
          if (ballX - r < batX_a + batWidth_a && ballY - r < batY_a + batHeight_a && ballY + r > batY_a){
                    return true;
          }else if(ballX + r > batX_b && ballY - r < batY_b + batHeight_b && ballY + r > batY_b){
                    return true
          }
}

function bat_bMoviment(){
          if(ballY < batY_b + batHeight_b/2){
                    batY_b -= batSpeed_b
          }else if (ballY > batY_b + batHeight_b/2){
                    batY_b += batSpeed_b
          }
}

function score(){
       stroke(255);
          textAlign(CENTER);
          textSize(16);
          fill(color(255, 140, 0));
          rect(150, 10, 40, 20);
          fill(255);
          text(scoreA, 170, 26);
          fill(color(255, 140, 0));
          rect(450, 10, 40, 20);
          fill(255);
          text(scoreB, 470, 26);
          if (ballX > 590){
            scoreA += 1;
            hit.play();
          }else  if (ballX < 10){
            scoreB += 1;
            hit.play();
          }
}

Seguem aqui os links:

https://preview.p5js.org/ricardosipe/present/o2CPy6ey5

https://editor.p5js.org/ricardosipe/full/o2CPy6ey5

https://editor.p5js.org/ricardosipe/sketches/o2CPy6ey5

2 respostas
solução!

Olá, Ricardo! Como vai você?

Suas implementações ficaram ótimas. Realmente esses são pontos de melhoria que podemos utilizar no curso.

Seu código ficou com uma excelente indentação e a escrita dele em inglês é um ótima prática! Parabéns! Apenas sugiro que você siga os padrões de camel Case para nomear as variáveis, pois também é considerada uma boa prática a se seguir.

Uma das coisas mais legais que você fez é a descrição dos pontos de melhoria no tópico, é uma espécie de documentação do seu projeto e isso é sensacional!!! É um grande passo para o desenvolvedor e muitos não se preocupam com esse processo. Às vezes a falta de documentação pode atrapalhar o fluxo de trabalho de toda uma empresa, por exemplo.

Por fim, gostaria de compartilhar com você os trabalhos de outros alunos que também desenvolveram soluções bem interessantes para os problemas. olha só:

Espero que as informações tenham ajudado, continue com esse foco e engajamento!

Obrigada por compartilhar seu progresso e sugestões, esse feedback é muito importante para nós!

Um grande abraço e bons estudos!

Tento escrever os códigos em Inglês pois ao decorrer doc urso pretendo aprimorar e montar um portifólio, estando já em inglês acreditoq ue seja mais fácil para recrutadores internacionais entenderem.

Estou estudando programação faz 1 mês de froma autodidata e consegui montar meu primeiro sistema de cadastros em python (um famoso CRUD hehehe). Sentrindo a necessidade de aprofundamento e algo amis sólido, estou gostando desse retorno e do fórum, fico feliz com o feedback e saber que estou no caminho certo. Estou muito focado em poder me tornar um bom programador e poder me inserir no mercado de trabalho o mais rápido possível.

Obrigado por compartilhar os links, certamente agregam muito conhecimento.