4
respostas

O oponente só errou quando eu abaixei a condição do erro

function setup() { createCanvas(600, 400); } // variáveis bolinha

let xBolinha = 300; let yBolinha = 200; let diametro = 22; let raio = diametro/2;

// movimentar a bolinha

let velocidadeXBolinha = 5; let velocidadeYBolinha = 5;

// variáveis raquete

let xRaquete = 2; let yRaquete = 170; let wRaquete = 10; let hRaquete = 90;

// variáveis raquete do oponente

let xRaqueteOponente = 589; let yRaqueteOponente = 170; let velocidadeYRaquete; let erro = 0

// variáveis placar

let meusPontos = 0 let pontosOponente = 0

function draw() { background(10); bolinha(); movimentaBolinha(); colisaoBordas(); raquete(xRaquete,yRaquete); raquete(xRaqueteOponente,yRaqueteOponente); movimentaRaquete(); colisaoRaquete(); movimentaRaqueteOponente(); mostraPlacar() mudaPlacar() chanceErrar() }

function bolinha(){ circle(xBolinha,yBolinha,diametro);

}

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

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

function raquete(x,y){ rect(x,y,wRaquete,hRaquete); }

function movimentaRaquete(){

if(keyIsDown(UP_ARROW)){ yRaquete-= 5 // yRaqueteOponente-= 5 }

if(keyIsDown(DOWN_ARROW)){

yRaquete+= 5
//yRaqueteOponente+=5

}

}

function colisaoRaquete(){

if(xBolinha - raio < xRaquete + wRaquete && yBolinha - raio < yRaquete + hRaquete && yBolinha + raio > yRaquete){

velocidadeXBolinha*= -1;

}

if(xBolinha > xRaqueteOponente - wRaquete && yBolinha - raio < yRaqueteOponente + hRaquete && yBolinha + raio > yRaqueteOponente){

velocidadeXBolinha*= -1;

}

}

function movimentaRaqueteOponente(){

let velocidadeYRaquete = yBolinha - yRaqueteOponente - wRaquete /2 -30

yRaqueteOponente += velocidadeYRaquete + erro;

}

function mostraPlacar(){ fill("white") text(" Score " + meusPontos, 250, 26) text(" CPU " + pontosOponente, 325, 26) }

function mudaPlacar(){

if(xBolinha < 15){ pontosOponente+= 1 } if(xBolinha > 585){ meusPontos+= 1 } }

function chanceErrar(){

if( pontosOponente > meusPontos){ erro++ } // Quando a condição do erro estava em >= 39 o oponente não errava

if(erro >= 3){ erro = 45 }

if(meusPontos < pontosOponente){ erro-- } // Quando a condição do erro estava em <= 35 o oponente não errava

if(erro <= 2){ erro = 35 }

}

4 respostas

Olá, Thales! Como você está?

Percebi que você modificou os valores que correspondem ao tamanho da bolinha, quando isso ocorre precisamos também realizar algumas alterações nos demais valores para que a lógica funcione adequadamente. Provavelmente foi por conta disso que você precisou alterar a condição.

Seu jogo está muito bom, fluido e funcional, parabéns!.

Umadica bacana é utilizar a ferramenta inserir bloco de código aqui do fórum. Assim seu código ficará indentado e possibilitará a verificação de erros com mais rapidez. Vou deixar também um link que redireciona para um tópico que ensina sua utilização: Link com tutorial para usar botão inserir bloco de código:

Espero ter ajudado, fico à disposição!

Um abraço e bons estudos!

Olá, aproveitando a dúvida do colega, eu estou com o problema contrário. o adversário não acerta mais depois de inserida a chance de erro. até tentei deixar todos os atores com os mesmos tamanhos dos das aulas, mas ainda assim ele não funciona corretamente.

//variáves bolinha
let xABola = 300;
let yABola = 200;
let diametro = 13;
let raio = diametro / 2;

//variáveis ATaca
let xATaca = 5;
let yATaca = 150;
let lATaca = 10;
let aATaca = 90;

//variaves OutraTaca
let xOutraTaca = 585
let yOutraTaca = 150
let velYOutra;

//velocidade bolinha
let velocidadeXBola = 6;
let velocidadeYBola = 6;

//variaveis colisão

let colidiu = false

//variaveis placar
let meusPontos = 0;
let pontosAdv =0;

//sons do jogo
let raquetada 
let meuPonto
let pontoAdv
let trilha

//erro do oponente
let chanceDeErrar = 0;

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

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

function draw () {
  background (0);
  mostraABola ();
  velocidadeABola ();
  colisaoABolaParede ();
  mostraATaca(xATaca, yATaca);
  mostraATaca(xOutraTaca, yOutraTaca);
  mexeATaca();
  mexeOutraTaca()
  //colisaoABolaTaca();
  colisaoATacaBiblioteca(xATaca, yATaca);
  colisaoATacaBiblioteca(xOutraTaca, yOutraTaca);
  mostraPlacar();
  marcaPonto()
}

function mostraABola () {
  circle(xABola, yABola, diametro)
}

function velocidadeABola () {
  xABola += velocidadeXBola;
  yABola += velocidadeYBola;
}

function colisaoABolaParede () {
if (xABola + raio > width ||
    xABola - raio < 0) {
  (velocidadeXBola *= -1)  
  }

  if (yABola + raio > height ||
      yABola - raio < 0) {
     (velocidadeYBola *= -1)
     }
    }


function colisaoABolaTaca (){
  if (xABola - raio < xATaca + lATaca &&
      yABola - raio < yATaca + aATaca &&
      yABola + raio > yATaca
     ) {
  velocidadeXBola *= -1  
  }
}

function colisaoATacaBiblioteca(x, y){
  colidiu = collideRectCircle(x, y, lATaca, aATaca, xABola, yABola, raio)
  if (colidiu) {
  velocidadeXBola *= -1
    raquetada.play()
  }
}

function mostraATaca(x, y){ 
rect (x, y, lATaca, aATaca)
}

function mexeATaca(){
  if (keyIsDown(UP_ARROW)) {
    yATaca -= 10}
  if (keyIsDown(DOWN_ARROW)) {
    yATaca += 10}
}

function mexeOutraTaca(){
  velYOutra = yABola - yOutraTaca - aATaca / 2 - 50
  yOutraTaca += velYOutra - chanceDeErrar
  calculaChanceDeErrar()
}

function mostraPlacar () {
  stroke(255)
  textAlign(CENTER);
  textSize (16);
  fill(color(255,140,0));
  rect(130, 10, 40, 20);
  rect(430, 10, 40, 20)
  fill(255);
  text(meusPontos, 150, 26);
  text(pontosAdv, 450, 26)
  }

function marcaPonto() {
    if (xABola > 590) {
        meusPontos += 1;
      meuPonto.play()
    }
    if (xABola < 10) {
        pontosAdv += 1;
      pontoAdv.play()
    }
  }

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

aproveitando, será que tem alguma explicação mais detalhada da função calculaChanceDeErrar? por quê os parâmetros ali são importantes?

Olá, Frederico! Tudo bem com você?

Aqui você subtraiu pela chanceDeErrar no lugar de somar:

function mexeOutraTaca(){
  velYOutra = yABola - yOutraTaca - aATaca / 2 - 30
  yOutraTaca += velYOutra + chanceDeErrar //aqui você subtraiu, o correto é somar
  calculaChanceDeErrar()
}

No momento em que substituímos pela altura da raquete, precisamos alterar o valor da probabilidade. Nesse caso alterei para 100 e assim fica bastante nítido o erro do oponente:

function calculaChanceDeErrar() {
  if (pontosAdv >= meusPontos) {
    chanceDeErrar += 1
    if (chanceDeErrar >= 39){
    chanceDeErrar = 100 //aqui alterei para 100
    }
  } else {
    chanceDeErrar -= 1
    if (chanceDeErrar <= 35){
    chanceDeErrar = 40
    }
  }
}

Em relação a função chanceDeErrar() , basicamente funciona de forma muito similar a lógica aplicada ao Scratch, e o brilhante Cássio respondeu dois tópicos aqui no fórum que vão te ajudar a compreender melhor o funcionamento dela. Vou compartilhar aqui com você:

Quando você tiver alguma dúvida, uma sugestão é que você abra outro tópico com o conteúdo, assim fica muito mais fácil para a gente conseguir ajudar você :)

Espero que tenha te ajudado de alguma forma!

Um abraço e bons estudos!!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software