Quando fiz o modelo do PONG no scratch eu criei uma "curva" de dificuldade para o oponente, setei que o valor que ia ser de "erro" do inimigo não seria o valor fixo em 50 como o professor fez, fiz que o valor fosse randômico entre um intervalo especifico, ou seja, não daria para prever com exatidão em que rodada da partida o adversário iria errar. Tenter refazer o comportamento randômico no JS mas não deu certo, escrevi assim:
function movimentoRaquete2(){
yVelRaquete2=yBolinha-yRaquete2-hRaquete/2-random(-50, 50)
yRaquete2+=yVelRaquete2;
}
No scratch eu fiz com que o numero aleatório fosse gerado a cada hit que a bolinha dava na raquete do adversário, então se tornou algo sutil, já aqui no JS ficou parecendo que a barrinha está completamente louca nas drogas, pois o random roda por segundo. Tem como eu ainda gerar o numero aleatório mas que não seja calculado por segundo, e sim quando um evento ocorrer?
Segue meu Código do JS:(Raquete1=Jogador; Raquete2=Computador)
'Parâmetros do Frame-Define tamanho da tela do jogo'
let xFrame=600;
let yFrame=400;
'Parâmetros Iniciais Bola-Define parâmetros da bola'
'Variavel Fixa-Se alterar essas variáveis altero a maior parte do projeto"
let diametroBolinha = 15;
'Variavel Dinâmica-Variaveis que dependem de valores padrão'
let xBolinha = xFrame/2;
let yBolinha = yFrame/2;
let raioBolinha=diametroBolinha/2
'Velocidade Bola'
'Variavel Fixa'
let xVelB = 4
let yVelB = 4
'Parametros Iniciais Raquete'
'Variavel Fixa'
let xRaquete1=5
let wRaquete = 10
'Variavel Dinâmica'
let hRaquete = yFrame/5
let xRaquete2=xFrame-wRaquete-5
let yRaquete1 = yFrame*0.4
let yRaquete2 = yFrame*0.4
let yVelRaquete2
'Colisão'
let hit = false;
function setup() {
createCanvas(xFrame,yFrame);
}
function draw() {
background(0);
mostraBolinha();
movimentaBolinha();
colisaoBorda();
mostraRaquete();
movimentoRaquete1();
colisaoRaquete();
movimentoRaquete2();
}
"Código Bolinha-código que rege o funcionamento da bolinha"
function mostraBolinha(){
circle(xBolinha, yBolinha, diametroBolinha);
}
function movimentaBolinha(){
xBolinha+=xVelB;
yBolinha+=yVelB;
}
function colisaoBorda(){
if(xBolinha > width-raioBolinha || xBolinha < 0+raioBolinha){
xVelB*=-1;
}
if(yBolinha > height-raioBolinha || yBolinha < 0+raioBolinha){
yVelB*=-1;
}
}
"Código Raquete-código que rege o funcionamento das raquetes"
function mostraRaquete(){
rect(xRaquete1, yRaquete1, wRaquete, hRaquete)
rect(xRaquete2, yRaquete2, wRaquete, hRaquete)
}
function movimentoRaquete1(){
if (keyIsDown(UP_ARROW)){
yRaquete1-=10;
}
if (keyIsDown(DOWN_ARROW)){
yRaquete1+=10;
}
}
function colisaoRaquete(){
if (xBolinha - raioBolinha < xRaquete1 + wRaquete && yBolinha - raioBolinha < yRaquete1 + hRaquete && yBolinha + raioBolinha > yRaquete1){
xVelB*=-1
}
}
function movimentoRaquete2(){
yVelRaquete2=yBolinha-yRaquete2-hRaquete/2-30
yRaquete2+=yVelRaquete2
}