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

Meu placar não funciona!!!!

//variaveis da bolinha 

let xBolinha = 300;
let yBolinha = 200;
let diametro = 30;
let velocidadeXBolinha = 5;
let velocidadeYBolinha = 5;
let raio = 15;

//variaveis da raquete

let xRaquete = 15
let yRaquete = 200 - 45
let largRaquete = 10
let altRaquete = 90

//variaveis raquetes adiversarias 

let xRaqueteAd = 600 - 25
let yRaqueteAd = 200 

let colidiu = false;

// placar do jogo 

let meusPontos = 0
let pontosDoOponente = 0 




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

function draw() {
  background(0);
  mostrarbolinha();
  movimentarbolinha();
  detectarborda();
  mostrarraquete(xRaquete, yRaquete);
  mostrarraquete(xRaqueteAd, yRaqueteAd);
  movimentarminharaquete();
  movimentarraqueread();
  //detectarraquete();
  colisãoraquetes(xRaquete, yRaquete);
  colisãoraquetes(xRaqueteAd, yRaqueteAd); 
  addpontos();
  marcarpontos();

}


function mostrarbolinha(){ 

  circle(xBolinha,yBolinha,diametro);

}


function movimentarbolinha(){

  xBolinha += velocidadeXBolinha;
  yBolinha += velocidadeYBolinha;

}


function detectarborda(){

  if (xBolinha - raio < 0 || xBolinha + raio > 600){
    velocidadeXBolinha *= -1;
  }

  if (yBolinha - raio < 0 || yBolinha + raio > 400 ){
     velocidadeYBolinha *= -1; 
  }    
}

function mostrarraquete(x, y){

  rect(x, y, largRaquete, altRaquete);

}

function movimentarminharaquete(){

  if(keyIsDown(DOWN_ARROW)) {

    yRaquete = yRaquete + 15;

  }

  if(keyIsDown(UP_ARROW)) {

    yRaquete = yRaquete - 15;

  }

}

function movimentarraqueread(){

  yRaqueteAd = yBolinha - 10;

}

function detectarraquete(){

  if(xBolinha - raio < xRaquete +largRaquete && yBolinha - raio < yRaquete + altRaquete && yBolinha + raio > yRaquete){

    velocidadeXBolinha *= -1;

  }

}

function colisãoraquetes(x, y){

  colidiu = 
    collideRectCircle(x, y, largRaquete, altRaquete, xBolinha, yBolinha, raio);

  if(colidiu){

     velocidadeXBolinha *= -1;

  }

}

function addpontos(){

  fill(200)
 // textSize(30);
  text(meusPontos, 240, 50)
  text(meusPontos, 360, 50)

}

function marcarpontos(){

  if(xBolinha - raio < 20){

    pontosDoOponente += 1

  }

    if(xBolinha - raio > 580){

    meusPontos += 1

  }

}
6 respostas
solução!

Já descobri meu erro, tinha colocado a variável "meusPontos" duas vezes.

function addpontos(){

  fill(200)
 // textSize(30);
  text(meusPontos, 240, 50)
  text(meusPontos, 360, 50)

}

Olá, Pedro. Tudo bem com você?

Parabéns pelo engajamento durante a execução do curso, vou pontuar alguns detalhes no seu projeto que acredito que estejam comprometendo o funcionamento do seu código.

É importante nomear as variáveis e funções de forma legível e de acordo com os padrões de boas práticas. Nesse caso, é considerada uma boa prática, nomear as variáveis e funções com Camel Case, que é basicamente começar com uma letra minúscula e a letra da próxima palavra será maiúscula.

Por exemplo:

no lugar de movimentarraqueread(), você poderá substituir para movimentarRaquereAd(),

outra coisa é que não podemos utilizar o ~ : sendo assim, você poderá substituir a colisãoraquetes(x, y) para colisaoRaquetes(x,y)

Além disso, observei que algumas condições e informações dentro das funções estão com pequenos problemas e vou detalhar alguns:

Na sua addpontos() você passou duas vezes o registro dos pontos do jogador:

function addpontos(){

  fill(200)
 // textSize(30);
  text(meusPontos, 240, 50)
  text(meusPontos, 360, 50)

}

A função incluiPlacar() do instrutor apresenta os pontos do jogador e do Oponente, vejamos:

function incluiPlacar() {
    fill(255);
    text(meusPontos, 278, 26);
    text(pontosDoOponente, 321, 26);
}

Também a sua função marcarpontos() apresenta a questão da condição. Na sua condição, o xBolinha - raio precisa ser menor que 20 para marcar um ponto para o oponente, e precisa ser maior que 580 para marcar os pontos do jogador.

function marcarpontos(){
  if(xBolinha - raio < 20){

    pontosDoOponente += 1

  }
    if(xBolinha - raio > 580){
    meusPontos += 1
  }

}

A lógica do instrutor é mais simples, basta verificar se o xBolinha é maior que 590 para adicionar um ponto, e se o xBolinha for menor que 10, irá adicionar pontos ao oponente:

function marcaPonto() {
    if (xBolinha > 590) {
        meusPontos += 1;
    }
    if (xBolinha < 10) {
        pontosDoOponente += 1;
    }
}

Vou deixar abaixo o código completo para você visualizar melhor.

O Código completo abaixo:

//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15;
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;

let colidiu = false;

//placar do jogo
let meusPontos = 0;
let pontosDoOponente = 0;

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  //verificaColisaoRaquete();
  verificaColisaoRaquete(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente);
  incluiPlacar();
  marcaPonto();
}

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

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

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

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

function movimentaMinhaRaquete(){
  if (keyIsDown(UP_ARROW)){
    yRaquete -= 10;
  }
  if (keyIsDown(DOWN_ARROW)){
    yRaquete += 10;
  }
}

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

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

function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 2 - 30;
  yRaqueteOponente += velocidadeYOponente
}

function incluiPlacar(){
  fill(255);
  text(meusPontos, 278, 26);
  text(pontosDoOponente, 321, 26)
}

function marcaPonto(){
  if (xBolinha > 590){
    meusPontos += 1;
  }
  if (xBolinha < 10){
    pontosDoOponente += 1;
  }
}


Você pode também compartilhar o link para o seu projeto e assim eu posso dar uma visualizar melhor os problemas. Basta copiar o link e postar aqui no fórum.

Espero que as informações tenham ajudado você!

Em caso de dúvida fico à disposição!

Um abraço e bons estudos!

Muito obrigado pelas dicas!! Irei corrigir o código e colocar o link aqui para poder dar uma olhada. Agradeço pela atenção!

Excelente, Pedro!

Eu estava escrevendo a resposta e nem percebi que você já havia encontrado a solução hahaha. Mil desculpas e parabéns por ter conseguido solucionar sozinho, esse é um passo muito importante e já significa que voce está evoluindo no processo de aprendizagem!

Um grande abraço!

Olá, Camila!! Aqui está o link do meu codigo como havia dito. https://preview.p5js.org/pedrotavaresame/present/VwPnaDIf8