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

Sabe quais medidas?

Estou com dúvida em quais medidas utilizar para somar pontos, pois quando coloco minhas medidas os pontos são somados infinitamente. Meus códigos:

//Variáveis da bolinha
let xBolinha = 900; 
let yBolinha = 400; 
let diametro = 80; 
let raio = diametro / 2; 

//Variáveis da velocidade da bolinha
let velocidadeXBolinha = 15; 
let velocidadeYBolinha = 15; 

//Variáveis da raquete principal
let xRaquete = 10;
let yRaquete = 400;
let raqueteComprimento = 20;
let raqueteAltura = 200;

let colidiu = false;

//Placar do jogo
let pontosJogador = 0;
let pontosBOT = 0;

//Variáveis da raquete oponente
let xRaqueteOponente = 1890;
let yRaqueteOponente = 400;
let velocidadeYOponente;

function setup() { 
    createCanvas(1920, 935);
}

    function draw() {
        background(0);
        apareceBolinha();
        movimentosBolinha();
        colisaoBordas();
        apareceRaquete(xRaquete, yRaquete);
        movimentosRaquete();
        colisaoRaquetesBiblioteca(xRaquete, yRaquete);
        apareceRaquete(xRaqueteOponente, yRaqueteOponente);
        movimentosRaqueteOponente();
        colisaoRaquetesBiblioteca(xRaqueteOponente, yRaqueteOponente);
        aparecePlacar();
        pontuacao();
    }

    function apareceBolinha() {
        circle(xBolinha, yBolinha, diametro) 
    }

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

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

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

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

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

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

    function aparecePlacar() {
        fill(255)
        text(pontosJogador, 700, 26);
        text(pontosBOT, 1100, 26);
    }

    function pontuacao() {
        if (xBolinha > precisoAjuda ) {
            pontosJogador += 1;
        }
        if (xBolinha <  precisoAjuda) {
            pontosBOT += 1;
        }
    }

10 respostas

Fiz de uma forma que parace de somar pontos infinitamente, mas agora os pontos não são somados. Meus códigos:

//Variáveis da bolinha
let xBolinha = 900; 
let yBolinha = 400; 
let diametro = 80; 
let raio = diametro / 2; 

//Variáveis da velocidade da bolinha
let velocidadeXBolinha = 15; 
let velocidadeYBolinha = 15; 

//Variáveis da raquete principal
let xRaquete = 10;
let yRaquete = 400;
let raqueteComprimento = 20;
let raqueteAltura = 200;

let colidiu = false;

//Placar do jogo
let pontosJogador = 0;
let pontosBOT = 0;

//Variáveis da raquete oponente
let xRaqueteOponente = 1890;
let yRaqueteOponente = 400;
let velocidadeYOponente;

function setup() { 
    createCanvas(1920, 935);
}

    function draw() {
        background(0);
        apareceBolinha();
        movimentosBolinha();
        colisaoBordas();
        apareceRaquete(xRaquete, yRaquete);
        movimentosRaquete();
        colisaoRaquetesBiblioteca(xRaquete, yRaquete);
        apareceRaquete(xRaqueteOponente, yRaqueteOponente);
        movimentosRaqueteOponente();
        colisaoRaquetesBiblioteca(xRaqueteOponente, yRaqueteOponente);
        aparecePlacar();
        pontuacao();
    }

    function apareceBolinha() {
        circle(xBolinha, yBolinha, diametro) 
    }

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

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

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

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

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

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

    function aparecePlacar() {
        fill(255)
        text(pontosJogador, 700, 26);
        text(pontosBOT, 1100, 26);
    }

    function pontuacao() {
        if (xBolinha > xRaqueteOponente) {
            pontosJogador += 1;
        }
        if (xBolinha < xRaquete) {
            pontosBOT += 1;
        }
    }

Ola Lucas. Alterar a Funcion conforme abaixo!

function pontuacao() {
        if (xBolinha > 1890 ) {
            pontosJogador += 1;
        }
        if (xBolinha <  10) {
            pontosBOT += 1;
        }
    }

Duvidas fico a diposição!

Olá weliomar.ferreira,

eu fiz isso e não adiantou nada. To achando que a solução é diminuir o tamanho do canvas...

Entendi Lucas, citei isso porque nao tinha essa informação que ja havia testado. Coloca seu link do P5 pra eu dar uma olhada, por favor

Mas eu concordo que os tamanhos que voce colocou é bastante grande, creio que diminuindo fica bem melhor,

Então mano, eu não tô fazendo no P5JS, eu tô fazendo no VSCode, porque queria colocar esse jogo no meu portifolio

Ah sim, entendi. Vou fazer ele no VsCode e qualquer coisa retorno aqui beleza? Até mais. Mas com certeza é um detalhe.

Valida o tamanho dos campos X e Y

Obrigado pela ajuda

solução!

Olá, Lucas! Tudo bem com você?

Acredito que o problema mesmo esteja nas modificações do tamanho do Canvas. Uma vez que alteramos o valor do tamanho do Canvas, raquete e bolinha, precisamos recalcular também os valores das demais variáveis no código, pois isso significa que estamos modificando seu posicionamento no sistema de coordenadas do p5 (o plano cartesiano com os eixos x e y do ambiente de visualização).

Ou então o problema pode ocorrer devido ao uso do VsCode, pois teoricamente não é o mesmo quadrante do plano cartesiano utilizado pelo p5.

Sugiro que você concretize o projeto pelo p5 ou com as medidas repassadas pelo instrutor. Depois dessa etapa, você poderá multiplicar os valores das variáveis para aumentar o tamanho dos atores e do Canvas também.

A sugestão de código do Weliomar também faz todo o sentido, pois os valores na condição estão relacionados ao valor que a Bolinha irá percorrer até encontrar o limite da borda da tela.

Vou testar também pelo VsCode para subir no github, pois achei uma excelente ideia!

 


 

Fiz uma alteração de valores e funcionou, certamente é por conta do tamanho da bolinha. Nesse caso, precisamos aumentar o valor da sensibilidade da colisão.

Com o código abaixo, o oponente consegue marcar um ponto:

    function pontuacao() {
        if (xBolinha > 1880) {
            pontosJogador += 1;
        }
        if (xBolinha < 40) {
            pontosBOT += 1;
        }
    }

Espero que tenha ajudado.

Continue compartilhando seu progresso conosco!

Poxa, muito obrigado a todos vocês