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

[Projeto] Atividade desenvolvida

Nunca imaginei fazer um código desse tamanho e entendendo todos os passos. Obrigado pelo ensino.

//criação da bola
let xBolinha = 300;
let yBolinha = 200;
let dBolinha = 15;

//movimentação da bolinha
let velocidadexBolinha = 6;
let velocidadeyBolinha = 6;
let raio = dBolinha/2;

//criação da raquete
let xRaquete = 5
let yRaquete = 150
let cRaquete = 10
let aRaquete = 90

//criação da raquete do oponente
let xRaquete2 = 585
let yRaquete2 = 150
let vRaquete2

//criação do placar
let meusPontos = 0
let pontosDoOponente = 0

let colidiu = false;
let chanceDeErrar = 0;

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

function draw() {
  background(0);
  mostrabolinha()
  velocidadedabolinha()
  verificacolisao()
  mostraRaquete(xRaquete, yRaquete)
  mostraRaquete(xRaquete2, yRaquete2)
  movimentaRaquete()
  movimentaRaquete2()
  //verificaColisaoRaquete()
  colisaoRaquete(xRaquete, yRaquete)
  colisaoRaquete(xRaquete2, yRaquete2)
  incluiPlacar()
  marcaPonto()
  calculaChanceDeErrar()
  }

function mostrabolinha(){
  circle(xBolinha,yBolinha,dBolinha);
}

function velocidadedabolinha(){
  xBolinha += velocidadexBolinha;
  yBolinha += velocidadeyBolinha;
}

function verificacolisao(){
  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, cRaquete, aRaquete)
}

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

function movimentaRaquete2(){
  vRaquete2 = yBolinha - yRaquete2 - cRaquete/2 -88
  yRaquete2 += vRaquete2 + chanceDeErrar
  calculaChanceDeErrar()
}

function verificaColisaoRaquete() {
    if (xBolinha - raio < xRaquete + cRaquete
        && yBolinha - raio < yRaquete + aRaquete
        && yBolinha + raio > yRaquete) {
        velocidadexBolinha *= -1;
    }
}

function colisaoRaquete(x, y) {
    colidiu = collideRectCircle(x, y, cRaquete, aRaquete, xBolinha, yBolinha, raio);
    if (colidiu) {
        velocidadexBolinha *= -1;
    }
}

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

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

function calculaChanceDeErrar() {
  if (pontosDoOponente >= meusPontos) {
    chanceDeErrar += 1
    if (chanceDeErrar >= 39){
    chanceDeErrar = 40
    }
  } else {
    chanceDeErrar -= 1
    if (chanceDeErrar <= 35){
    chanceDeErrar = 35
    }
  }
}
1 resposta
solução!

Olá, Lucas, tudo bem?

Fico feliz que tenha compreendido todos os passos do código, é super importante a compreensão da lógica utilizada para avançarmos na programação.

Quanto ao código, percebi que mesmo colocando a função calculaChancedeErrar o oponente ainda continua invencível, isso acontece porque pode haver diferença no tamanho da bolinha feita pelo aluno com o tamanho utilizado pelo instrutor, fazendo com que a sensibilidade da colisão também seja diferente.

Para resolver esse problema, basta alterar nessa função o valor que verifica em quanto está a chance de errar. Testei no seu código e esse valor ficou em 105 e 70.

Abaixo deixo a função com as alterações:

function calculaChanceDeErrar() {
  if (pontosDoOponente >= meusPontos) {
    chanceDeErrar += 1
    if (chanceDeErrar >= 105){
    chanceDeErrar = 106
    }
  } else {
    chanceDeErrar -= 1
    if (chanceDeErrar <= 70){
    chanceDeErrar = 70
    }
  }
}

Além disso, notei que a bolinha às vezes fica presa, fazendo com que faça pontuações a mais. Para isso podemos criar uma função para reconhecer quando a bolinha atravessa a área da raquete e envia uma instrução para a bolinha surgir um pouco à frente da posição da raquete. Como no código abaixo:

function bolinhaNaoFicaPresa(){
    if (xBolinha - raio < 0){
    xBolinha = 23
    }
}

Não esqueça de chamá-la na função draw().

Espero ter ajudado.

Caso surja dúvidas, estou à disposição.

Abraços e bons estudos!

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