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

[Dúvida] Movimentação de Carros em sentidos diferentes, For e Return

Olá, tive a ideia de colocar os carros vindo de duas direções, e por isso, inicialmente tive dificuldades para simplificar o codigo em listas e com o loop "for" na parte de movimentação e de retorno a posição inicial com o "return". Ainda assim, consegui simplificar o maximo possivel o codigo e acabei por não usar o nome da "variavel.length" e sim nomeando a localização direto pelo numero na "array", assim como exemplificado abaixo na função "movimentaCarros", dividindo a em duas para os carros que vem de direções diferentes. E para a função "return" não consegui utilizar ela duas vezes na function, já percebi que é uma limitação propria do JavaScript, só consequi aplicar para a primeira direção de movimento definida. Dessa forma gostaria de saber se existe a opção de melhorar mais esse codigo?

//lista de variaveis dos carros em lista
let xCarros = [500, 500, 500, -90, -90, -90];
let yCarros = [35, 92, 139, 210, 260, 315];
let velocidadeCarros = [2, 3, 4, 2.5, 4.5, 3.5];
let alturaCarros = [80, 95, 85, 89, 85, 80];
let larguraCarros = [58, 52, 62, 66, 46, 47];

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

function movimentaCarros() {
  for (let i = 0; i < 3; i += 1) {
    xCarros[i] -= velocidadeCarros[i];
    }
  for (let i = 3; i < 6; i += 1) {
  xCarros[i] += velocidadeCarros[i];
  }
}

function voltarPosicaoInicialCarro() {
  for (let i = 0; i < 3; i += 1) {
    if (verificaSePassouTela(xCarros[i])) {
      xCarros[i] = 500;
    }
  }
  for (let i = 3; i < 6; i += 1) {
    if (xCarros[i] > 500) {
      xCarros[i] = -90;
    }
  }
}

function verificaSePassouTela(xCarros) {
  return xCarros < -100
}

Agradeço a atenção.

1 resposta
solução!

Acabei conseguindo resolver a situação do "return" inserindo ele dentro da operação "if", já que aparentemente quando dentro de { } o return pode ser inserido mais de uma vez, já que se limita apenas a aquela operação. De qualquer forma, não deixou o codigo mais sucinto, apenas mais uma forma de fazer dar certo o que se estava querendo. Ainda existe alguma forma de melhorar isso?


function voltarPosicaoInicialCarro() {
  for (let i = 0; i < 3; i += 1) {
    if (verificaSePassouTela(xCarros[i])) {
      xCarros[i] = 500;
    }
  }
  for (let i = 3; i < 6; i += 1) {
    if (verificaSePassouTela(xCarros[i])) {
      xCarros[i] = -90;
    }
  }
}

function verificaSePassouTela(xCarros) {
  if (xCarros < -100) {
    return xCarros;
  }
  if (xCarros > 500) {
    return xCarros;
  }
}