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

Atualizei o código com as dicas do professor, mas ainda não consigo marcar pontos.

//variaveis da bolinha``
let xBolinha = 300;
let yBolinha = 200;
let diametro = 20;
let raio = diametro / 2;


//velocidade da bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;

//variaveis da raquete
let xRaquete = 5;
let yRaquete = 150;

//Posição das raquetes
let wRaquete = 10;
let hRaquete = 90;

//variaveis da raquete do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;


let colidiu = false;

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

//Sons do jogo
let raquetada;
let ponto;
let trilha;

//chance de errar
let chanceDeErrar = 0;

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



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

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

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, wRaquete, hRaquete)
  }

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

function verificaColisaoRaquete1(){
  if (xBolinha - raio < xRaquete + wRaquete && 
    yBolinha - raio < yRaquete + hRaquete && 
    yBolinha + raio > yRaquete){
    velocidadeXBolinha *= -1;
  }
}

function verificaColisaoRaquete(x, y){
  colidiu = collideRectCircle(x, y, wRaquete, hRaquete, xBolinha, yBolinha, raio);
  if(colidiu){
    velocidadeXBolinha *= -1;
    raquetada.play();
  }  
}

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

function incluiPlacar(){
  stroke(255);
  textAlign(CENTER);
  textSize(20);
  fill(color(255, 140, 0));
  rect(130, 8, 40, 22);
  fill(255)
  text(meusPontos, 150, 26)
  fill(color(255, 140, 0));
  rect(430, 8, 40, 22);
  fill(255);
  text(pontosDoOponente, 450, 26)
}

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

function calculaChanceDeErrar(){
  if (pontosDoOponente >= meusPontos){
    chanceDeErrar += 1
    if (chanceDeErrar >= 39){
    chanceDeErrar = 40
    }
  } else {
    chanceDeErrar -= 1
    if (chanceDeErrar <= 35){
    chanceDeErrar = 35
    }
  }
}
9 respostas

Compartilhe o código usando o botão </> . Fica formatado e mais fácil de perceber o problema.

Segue teu código formatado. Tinha algumas linhas com erros. Compare e faça a correção.

//variaveis da bolinha 
let xBolinha = 300; 
let yBolinha = 200; 
let diametro = 20; 
let raio = diametro / 2;

//velocidade da bolinha 
let velocidadeXBolinha = 6; 
let velocidadeYBolinha = 6;

//variaveis da raquete 
let xRaquete = 5; 
let yRaquete = 150;

//Posição das raquetes 
let wRaquete = 10; 
let hRaquete = 90;

//variaveis da raquete do oponente 
let xRaqueteOponente = 585; 
let yRaqueteOponente = 150; 
let velocidadeYOponente;

let colidiu = false;

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

//Sons do jogo 
let raquetada; 
let ponto; 
let trilha;

//chance de errar 
let chanceDeErrar = 0;

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

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

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

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, wRaquete, hRaquete)
    }

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

    function verificaColisaoRaquete1() { 
        if (xBolinha - raio < xRaquete + wRaquete && yBolinha - raio < yRaquete + hRaquete && yBolinha + raio > yRaquete) { 
            velocidadeXBolinha *= -1; 
        } 
    }

    function verificaColisaoRaquete(x, y) { 
        colidiu = collideRectCircle(x, y, wRaquete, hRaquete, xBolinha, yBolinha, raio); 
        if (colidiu) { 
            velocidadeXBolinha *= -1; raquetada.play(); 
        } 
    }

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

    function incluiPlacar() { 
        stroke(255); 
        textAlign(CENTER); 
        textSize(20); 
        fill(color(255, 140, 0)); 
        rect(130, 8, 40, 22); 
        fill(255);
        text(meusPontos, 150, 26);
        fill(color(255, 140, 0)); 
        rect(430, 8, 40, 22); 
        fill(255); 
        text(pontosDoOponente, 450, 26)
     }

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


    function calculaChanceDeErrar() { 
        if (pontosDoOponente >= meusPontos) { 
            chanceDeErrar += 1
        }
        if (chanceDeErrar >= 39) { 
            chanceDeErrar = 40 
        } 
        else { chanceDeErrar -= 1 } 

        if (chanceDeErrar <= 35) { 
            chanceDeErrar = 35 } 
    } 

oi Antônio, experimente reduzir o tamanho da bolinha pra 15, ou até meso 10, ó pra ver se maca.

Olá,

Assim como comentou o colega Romeu, talvez alterar o diâmetro da bolinha funcione. O meu estava apresentando o mesmo problema e o código estava ok. Decidi alterar o diâmetro da minha bolinha, pois estava muito grande. Quando iniciei o jogo funcionou perfeitamente. Pode ser uma das soluções. No caso da minha estava bem grande, tinha colocado 30, reduzi para 20 e funcionou.

Fiz as alterações e ainda continuo sem marcar pontos.

//Já alterei várias vezes o tamanho da bolinha
//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 20;
let raio = diametro / 2;


//velocidade da bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;

//variaveis da raquete
let xRaquete = 5;
let yRaquete = 150;

//Posição das raquetes
let wRaquete = 10;
let hRaquete = 90;

//variaveis da raquete do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;


let colidiu = false;

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

//Sons do jogo
let raquetada;
let ponto;
let trilha;

//chance de errar
let chanceDeErrar = 0;

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



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

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

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, wRaquete, hRaquete)
  }

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

function verificaColisaoRaquete1(){
  if (xBolinha - raio < xRaquete + wRaquete && 
    yBolinha - raio < yRaquete + hRaquete && 
    yBolinha + raio > yRaquete){
    velocidadeXBolinha *= -1;
  }
}

function verificaColisaoRaquete(x, y){
  colidiu = collideRectCircle(x, y, wRaquete, hRaquete, xBolinha, yBolinha, raio);
  if(colidiu){
    velocidadeXBolinha *= -1;
    raquetada.play();
  }  
}

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

function incluiPlacar(){
  stroke(255);
  textAlign(CENTER);
  textSize(20);
  fill(color(255, 140, 0));
  rect(130, 8, 40, 22);
  fill(255)
  text(meusPontos, 150, 26)
  fill(color(255, 140, 0));
  rect(430, 8, 40, 22);
  fill(255);
  text(pontosDoOponente, 450, 26)
}

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

function calculaChanceDeErrar(){
  if (pontosDoOponente >= meusPontos){
    chanceDeErrar += 1;
  }

  if (chanceDeErrar >= 39){
    chanceDeErrar = 40;
  }
  else {chanceDeErrar -= 1}

  if (chanceDeErrar <= 35){
    chanceDeErrar = 35;
    }
}

Obrigado pela ajuda Gabriel, mas ainda não consegui marcar pontos!

solução!

Altere a função para:

function calculaChanceDeErrar() {
  if (pontosDoOponente >= meusPontos) {
        chanceDeErrar += 1
        if (chanceDeErrar >= 39){
            chanceDeErrar = 40
        }
  } else {
        chanceDeErrar -= 1
        if (chanceDeErrar <= 35){
            chanceDeErrar = 35
        }
  }
}

Note que há um IF dentro do IF e outro IF dentro do ELSE

Mude esta função também:

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

Obrigado Gabriel, deu certo!!!!