1
resposta

Carros em mãos opostas

Boa tarde! Eu fiz uma adaptação no código para os carros correrem em direções opostas, como se fosse uma via de mão dupla mesmo. Porém, os 3 primeiros carros estão andando certinho e os 3 últimos, na mão oposta, não estão retornando para a posição inicial. Conseguimos ver onde que errei? Na verdade eu até sei o que está errado, mas não sei acertar.

Jogo: https://editor.p5js.org/aquino2217/full/VfbhO-IQC

Código dos carros: //código do carro

let xCarros = [600, 600, 600, -100, -100, -100]; let yCarros = [40, 96, 150, 210, 270, 318]; let velocidadeCarros = [2, 2.5, 3.2, -5, -3.3, -2.3]; let comprimentoCarro = 50; let alturaCarro = 40;

function mostraCarros(){ for(let i = 0; i < imagemCarros.length; i++){ image(imagemCarros[i], xCarros[i], yCarros[i], comprimentoCarro, alturaCarro); } }

function movimentaCarros(){ for(let i = 0; i < imagemCarros.length; i++){ xCarros[i] -= velocidadeCarros[i]; } }

function voltaPosicaoInicialDoCarro(){ for(let i = 0; i < imagemCarros.length; i++){ if(passouTodaATela(xCarros[i])){ xCarros[i] = 600; } } }

function passouTodaATela(xCarros){ return xCarros < - 50; }

1 resposta

Olá Raphael, tudo bem?

Para realizarmos o loop, na função voltaPosicaoInicialDoCarro, vamos repetir o laço for e alterar a variável de i, podemos criar uma chamada a


function voltaPosicaoInicialDoCarro(){
    for(let i = 0; i < imagemCarros.length; i++){
        if(passouTodaATela(xCarros[i])){
                xCarros[i] = 600;
        }
    }
  for(let a = 3; a < imagemCarros.length; a++){ 
        if(passouTodaATela2(xCarros[a])){
                xCarros[a] = -10;
        }
    }
}

Esse novo for ele começa com o valor 3 na variável a, para que o for comece a percorrer o array a partir dos últimos 3 carros, que guarda as posições deles.

Por fim, devemos criar mais uma nova função que verifica a posição desses novos carros e retorna a posição inicial se tornando um loop de fato, assim como já criada anteriormente vamos apenas repetir e trocar o valor para um que se encaixe melhor no nosso game.

function passouTodaATela2(xCarros){
    return xCarros > 600;
}

Em carros.js, seu código completo fica assim:

//código do carro

let xCarros = [600, 600, 600, 0, 0, 0];
let yCarros = [40, 96, 150, 210, 270, 318];
let velocidadeCarros = [2, 2.5, 3.2, -5, -3.3, -2.3];
let comprimentoCarro = 50;
let alturaCarro = 40;

function mostraCarros(){
    for(let i = 0; i < imagemCarros.length; i++){
  image(imagemCarros[i], xCarros[i], yCarros[i], comprimentoCarro, alturaCarro);
  }
}

function movimentaCarros(){
    for(let i = 0; i < imagemCarros.length; i++){
        xCarros[i] -= velocidadeCarros[i];
        }
}

function voltaPosicaoInicialDoCarro(){
    for(let i = 0; i < imagemCarros.length; i++){
        if(passouTodaATela(xCarros[i])){
                xCarros[i] = 600;
        }
    }
  for(let a = 3; a < imagemCarros.length; a++){
        if(passouTodaATela2(xCarros[a])){
                xCarros[a] = -10;
        }
    }
}

function passouTodaATela(xCarros){
    return xCarros < - 50;
}
function passouTodaATela2(xCarros){
    return xCarros > 600;
}

depois dessas alterações, temos um resultado semelhante a esse:

ALT- O gif apresenta um jogo com vários carros se movimentando em faixas diferentes, e um personagem atravessando essas faixas entre os carros.

Deixo o link da cópia do seu game, a fim de lhe auxiliar no entendimento do código:

Espero ter ajudado, qualquer dúvida estarei à disposição! Bons estudos!

Sucesso

Um grande abraço e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. 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