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

[Dúvida] A raquete NÃO funciona...

PessoALL,

Estou usando o "Bing Chat", onde reza a lenda que é uma versão da Microsoft baseada no ChatG-PATÊ 4.

Os códigos são estes:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Pong Game</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/addons/p5.sound.min.js"></script>
    <style>
      body {
        margin: 0;
        padding: 0;
      }
      canvas {
        display: block;
      }
    </style>
  </head>
  <body>
    <script src="pong.js"></script>
  </body>
</html>
// Variáveis do jogo
let pontuacaoJogador1 = 0;
let pontuacaoJogador2 = 0;
let larguraRaquete = 10;
let alturaRaquete = 100;
let tamanhoBola = 10;
let velocidadeBola = 5;
let direcaoXBola = 1;
let direcaoYBola = 1;
let posicaoXBola = 400;
let posicaoYBola = 300;
let posicaoYJogador1 = 250;
let posicaoYJogador2 = 250;

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

function draw() {
  background(0);
  desenhaRede();
  desenhaRaquetes();
  desenhaBola();
  moveBola();
}

function desenhaRede() {
  stroke(255);
  strokeWeight(2);
  for (let i = 0; i < height; i += 15) {
    line(width / 2, i, width / 2, i + 10);
  }
}

function desenhaRaquetes() {
  fill(255);
  rect(0, posicaoYJogador1, larguraRaquete, alturaRaquete);
  
  // Computador
  fill(255);
  rect(width - larguraRaquete, posicaoYJogador2, larguraRaquete, alturaRaquete);
  
}

function desenhaBola() {
    fill(255);
    ellipse(posicaoXBola, posicaoYBola, tamanhoBola);
}

function moveBola() {
    posicaoXBola += velocidadeBola * direcaoXBola;
    posicaoYBola += velocidadeBola * direcaoYBola;

    if (posicaoXBola < larguraRaquete) {
        if (posicaoYBola > posicaoYJogador1 && posicaoYBola < posicaoYJogador1 + alturaRaquete) {
            direcaoXBola *= -1;
        } else {
            resetBall();
            pontuacaoJogador2++;
        }
    }

    if (posicaoXBola > width - larguraRaquete - tamanhoBola) {
        if (posicaoYBola > posicaoYJogador2 && posicaoYBola < posicaoYJogador2 + alturaRaquete) {
            direcaoXBola *= -1;
        } else {
            resetBall();
            pontuacaoJogador1++;
        }
    }

    if (posicaoYBola < tamanhoBola / 2 || posicaoYBola > height - tamanhoBola / 2) {
        direcaoYBola *= -1;
    }
}

function resetBall() {
    direcaoXBola *= -1;
    posicaoXBola = width / 2;
    posicaoYBola = height / 2;
}

Tentei rodar no meu editor preferido: "https://replit.com/", ocorreu exatamente o mesmo problema. Testei no meu VS Code com "Go Live"... idem.

Quais são as teclas para mover a raquete? No meu touchpad não move...

[]'s,

Fabio I.

1 resposta
solução!

Olá Fabio, tudo bem?

Uma forma de adicionar a movimentação da raquete foi do seguinte modo, adicionando o evento keyIsDown(número da tecla), deste modo o programa fica esperando o clique da tecla para tomar alguma ação, pedi para o GPT adicionar essa mecânica e ele fez os seguintes códigos:

// Variáveis do jogo
let pontuacaoJogador1 = 0;
let pontuacaoJogador2 = 0;
let larguraRaquete = 10;
let alturaRaquete = 100;
let tamanhoBola = 10;
let velocidadeBola = 5;
let velocidadeRaquete = 5;
let direcaoXBola = 1;
let direcaoYBola = 1;
let posicaoXBola = 400;
let posicaoYBola = 300;
let posicaoYJogador1 = 250;
let posicaoYJogador2 = 250;

function setup() {
  createCanvas(500, 500);
}

function draw() {
  background(0);
  desenhaRede();
  movimentaRaquetes();
  desenhaRaquetes();
  desenhaBola();
  moveBola();
}

function desenhaRede() {
  stroke(255);
  strokeWeight(2);
  for (let i = 0; i < height; i += 15) {
    line(width / 2, i, width / 2, i + 10);
  }
}

function desenhaRaquetes() {
  fill(255);
  rect(0, posicaoYJogador1, larguraRaquete, alturaRaquete);
  
  // Computador
  fill(255);
  rect(width - larguraRaquete, posicaoYJogador2, larguraRaquete, alturaRaquete);
}

function desenhaBola() {
  fill(255);
  ellipse(posicaoXBola, posicaoYBola, tamanhoBola);
}

function moveBola() {
  posicaoXBola += velocidadeBola * direcaoXBola;
  posicaoYBola += velocidadeBola * direcaoYBola;

  if (posicaoXBola < larguraRaquete) {
    if (posicaoYBola > posicaoYJogador1 && posicaoYBola < posicaoYJogador1 + alturaRaquete) {
      direcaoXBola *= -1;
    } else {
      resetBall();
      pontuacaoJogador2++;
    }
  }

  if (posicaoXBola > width - larguraRaquete - tamanhoBola) {
    if (posicaoYBola > posicaoYJogador2 && posicaoYBola < posicaoYJogador2 + alturaRaquete) {
      direcaoXBola *= -1;
    } else {
      resetBall();
      pontuacaoJogador1++;
    }
  }

  if (posicaoYBola < tamanhoBola / 2 || posicaoYBola > height - tamanhoBola / 2) {
    direcaoYBola *= -1;
  }
}

function movimentaRaquetes() {
  // Jogador 1 - Teclas "W" e "S"
  if (keyIsDown(87)) { // Tecla "W"
    posicaoYJogador1 -= velocidadeRaquete;
  } else if (keyIsDown(83)) { // Tecla "S"
    posicaoYJogador1 += velocidadeRaquete;
  }

  // Jogador 2 - Setas para cima e para baixo
  if (keyIsDown(UP_ARROW)) { // Seta para cima
    posicaoYJogador2 -= velocidadeRaquete;
  } else if (keyIsDown(DOWN_ARROW)) { // Seta para baixo
    posicaoYJogador2 += velocidadeRaquete;
  }
}

function resetBall() {
  direcaoXBola *= -1;
  posicaoXBola = width / 2;
  posicaoYBola = height / 2;
}

O que tornou bem mais jogável e agora é possível movimentar tanto a sua raquete como a do inimigo, com as teclas W e S e as setinhas de cima e para baixo tornando o jogo multiplay, também mudei o tamanho da tela para melhorar a visualização do jogo.

Espero ter ajudado, qualquer dúvida, me coloco à disposição! Bons estudos!

Sucesso

Um grande abraço e até mais!

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