1
resposta

Melhorar a IA da Raquete Oponente

//Dimensões do Campo

let larguradocampo = 900
let alturadocampo = 600

//Movimento da Bola
let movimentoXbola = larguradocampo / 2
let movimentoYbola = alturadocampo / 2

//Criação da Bola
let diametrobola = alturadocampo / 30;
let raiobola= diametrobola / 2;

//Velocidade da Bola
let velocidadetotal = 15
let velocidadeXbola = velocidadetotal
let velocidadeYbola = velocidadetotal / 2.5

//Posição e dimensões da Raquete
let larguraRaquete = larguradocampo/ 90
let alturaRaquete = alturadocampo / 6
let distanciaXraquete = 10
let distanciaYraquete = (alturadocampo / 2) - (alturaRaquete / 2)
let distanciaXraqueteOponente = larguradocampo - larguraRaquete - distanciaXraquete
let distanciaYraqueteOponente = (alturadocampo / 2) - (alturaRaquete / 2)

//Placar
let meuspontos = 0
let pontosdoOponente = 0

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

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

function setup() {
  createCanvas(larguradocampo, alturadocampo);
  //trilha.loop()
}

function draw() {
  background(0);
  criacao_da_bola();
  movimento_da_bola();
  encontro_da_bola_com_a_borda();
  criacao_da_raquete(distanciaXraquete, distanciaYraquete);
  criacao_da_raquete(distanciaXraqueteOponente,distanciaYraqueteOponente);
  movimento_da_raquete();
  encontro_da_bola_com_a_raquete();
  movimento_da_raquete_do_oponente();
  Placar();
  Pontuacao();
}

function criacao_da_bola(){
circle (movimentoXbola, movimentoYbola, diametrobola)
}

function movimento_da_bola(){
  movimentoXbola += velocidadeXbola
  movimentoYbola += velocidadeYbola
}

function encontro_da_bola_com_a_borda(){
if (movimentoXbola + raiobola > width ||
   movimentoXbola - raiobola < 0){
  velocidadeXbola *= -1}

if (movimentoYbola + raiobola > height ||
   movimentoYbola - raiobola < 0){
  velocidadeYbola *= -1}
}

function criacao_da_raquete(x,y){
rect (x, y,larguraRaquete, alturaRaquete)
}

function movimento_da_raquete(){
  if (keyIsDown(UP_ARROW)){
  distanciaYraquete -=10}

  if (keyIsDown(DOWN_ARROW)){
  distanciaYraquete +=10}
}

function encontro_da_bola_com_a_raquete(){
  if (movimentoXbola - raiobola < distanciaXraquete + larguraRaquete && movimentoYbola - raiobola < distanciaYraquete + alturaRaquete && movimentoYbola + raiobola > distanciaYraquete){
  velocidadeXbola *= -1
  raquetada.play()}

  if (movimentoXbola + raiobola > distanciaXraqueteOponente && movimentoYbola - raiobola < distanciaYraqueteOponente + alturaRaquete && movimentoYbola + raiobola > distanciaYraqueteOponente){
  velocidadeXbola *= -1
  raquetada.play()}
}

function movimento_da_raquete_do_oponente(){
distanciaYraqueteOponente = (movimentoYbola += velocidadeYbola) - (alturaRaquete / 2)
}

function Placar(){
  fill (255)
  textAlign (CENTER)
  textSize (alturaRaquete)
  text (meuspontos, ((larguradocampo /2) / 2) , (alturadocampo /2) + (alturaRaquete/3))
  text (pontosdoOponente, ((larguradocampo /2) / 2) + (larguradocampo / 2), (alturadocampo /2) + (alturaRaquete/3)) 

}

function Pontuacao(){
  if (movimentoXbola > larguradocampo - raiobola){
    meuspontos += 1
  ponto.play()}
  if (movimentoXbola < 0 + raiobola) {
    pontosdoOponente += 1
  ponto.play()}
}

Como é possível melhorar a IA da Raquete Oponente? A mesma sempre vai bater em um ponto específico da Raquete.

Quando programei com Scratch, atrasei ela por alguns segundos em relação ao eixo Y, porém não sei ao certo como fazer isso com JavaScript.

EDIT 1 :

Modifiquei o código para funcionar com dois jogadores. Verifiquei também umas opções de como melhorar através de outras perguntas no fórum. Tópico pode ser encerado

1 resposta

Luiz, boa tarde!

Compartilhe com a gente sua solução! Assim ela pode alcançar mais alunos que possuam a mesma dúvida

Continue assim e bons estudos!