Mover objeto em uma matriz

Opa pessoal,

Estou desenvolvendo um programa POO em java que consiste em uma matriz com uns veiculos se movendo para lados aleatoriamente.

Minha duvida é , como mover o objeto na matriz de uma forma aleatória e como fazer para eles nao se moverem pra mesma posição ao invés de irem para o mesmo lado juntos.

Segue exemplo do projeto:

Obrigado.

Como você faz para eles se moverem atualmente?
Posta o código.

Eles não se movem ainda,mas pensei em fazer um switch que gerasse número aleatório
Aí por exemplo ficaria:
Switch(x){
Case 0:
Direita();
}

Gere um Random()

Random random = new Random();
switch (random.nextInt(4)) {
    case 0: // Up...
                 break;
    case 1: // Right...
}

Sim mas assim , to com dificuldade na funçao mover mesmo , sei que posso utilizar o eixo x por exemplo pra ir pra direita ou esquerda subtraindo ou somando uma posição,mesma coisa com o y pra ir pra cima ou pra baixo.

Só que to travando na montagem da função

Se postar o código que já escreveu, fica muito mais fácil te orientar.

Que tal assim? :slight_smile:

/**
 * @author itamar
 */
public class CarsGame {
    public static final int CYCLES = 100;
    public static final int COLS = 40;
    public static final int ROWS = 20;
    private Set<Car> cars;
    private Random randomiser;
    private void doIt() throws InterruptedException {
        printBoard("INITIAL STATE");
        for (int i = 0; i < CYCLES; i ++) {
            cars.forEach(e -> e.move(Direction.values()[randomiser.nextInt(4)], this::isEmptyPosition));
            printBoard(String.format("Cycle %d", i));
            Thread.sleep(500);
        }
    }
    private boolean isEmptyPosition(Position position) {
        if (position.getX() < 0 || position.getY() < 0) {
            return false;
        }
        if (position.getY() >= ROWS || position.getX() >= COLS) {
            return false;
        }
        return !cars.stream()
                .anyMatch(e -> e.getPosition().equals(position));
    }
    private void printBoard(String header) {
        System.out.println();
        System.out.println(header);
        String bar = String.format("%1$" + (COLS + 2) + "s", "").replace(' ', '-');
        System.out.println(bar);
        for (int row = 0; row < ROWS; row++) {
            int finalRow = row;
            Map<Integer, String> carsInRow = cars.stream() // Column is key and id is value
                    .filter(e -> e.getPosition().getX() == finalRow)
                    .collect(Collectors.toMap(e -> e.getPosition().getY(), e -> Integer.toString(e.getId())));
            if (carsInRow.isEmpty()) { // If there are no cars, just print blank spaces and continue
                System.out.println(String.format("|%1$" + COLS + "s|", ""));
                continue;
            }
            // Else we have to print the car ids
            System.out.print("|");
            for (int col = 0; col < COLS; col++) {
                System.out.print(carsInRow.getOrDefault(col, " "));
            }
            System.out.println("|");
        }
        System.out.println(bar);
        System.out.println();
    }
    private CarsGame() {
        cars = IntStream.range(0, 5)
                .mapToObj(e -> new Car(e, new Position(0, e)))
                .collect(Collectors.toSet());
        randomiser = new Random();
    }
    class Car {
        private final int id;
        private Position position;
        public Car(int id, Position position) {
            this.position = position;
            this.id = id;
        }
        public boolean move(Direction direction, Function<Position, Boolean> constraints) {
            Position newPosition = position.movingTo(direction, 1); // 1 by 1 for now to keep it simple
            if (constraints.apply(newPosition)) {
                position = newPosition;
                return true;
            }
            return false;
        }
        public int getId() {
            return id;
        }
        public Position getPosition() {
            return position;
        }
    }
    class Position {
        private int x;
        private int y;
        public Position(int x, int y) {
            this.x = x;
            this.y = y;
        }
        public int getX() {
            return x;
        }
        public int getY() {
            return y;
        }
        public Position movingTo(Direction direction, int by) {
            if (EnumSet.of(Direction.UP, Direction.LEFT).contains(direction)) {
                by *= -1; // For left or up, we're decreasing the value
            }
            if (EnumSet.of(Direction.UP, Direction.DOWN).contains(direction)) {
                return new Position(x, y + by);
            }
            return new Position (x + by, y);
        }
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof Position)) return false;
            Position position = (Position) o;
            if (x != position.x) return false;
            return y == position.y;
        }
    }
    enum Direction {
        UP, RIGHT, DOWN, LEFT
    }
    public static void main(String... args) throws InterruptedException {
        new CarsGame().doIt();
    }
}

Aqui está meu codigo,preciso mover os carros em uma posição aleatória que é o numero 3 que são armazenados no arraylist…

import java.util.ArrayList;
import java.util.Random;


public class Main {
  
  //Declaração Global dos ArrayLists para poder armazenar a quantidade
  // de cada veiculo
  public static  ArrayList<Carro> c = new ArrayList<>();
 
  
  
  
public static void main(String[] args) 
	{
  
	int [][] matrix = new int[30][60];
	for(int x = 0; x < matrix.length; x++)
	{
		for (int i = 0; i < matrix[x].length; i++) 
		{
			if((x==0)||(x==(matrix.length)-1))
				matrix[x][i]=1;
			else
				if((i==0)||(i==(matrix[x].length)-1))
					matrix[x][i]=1;
				else
					matrix[x][i]=0;
		}
	}
		
	for(int x = 0; x < matrix.length; x++)
	{
		for (int i = 0; i < matrix[x].length; i++) 
		{
		if(matrix[x][i] == 0){
		  for(int n = 5; n < 12 ;n++){
		    for(int m = 3; m <= 5 ;m++){
      matrix[m][n] = 2;
		      
		    }
		  }
		  for(int n = 5; n < 12 ;n++){
		    for(int m = 24; m <= 26 ;m++){
      matrix[m][n] = 2;
		      
		    }
		  }
		  for(int n = 48; n < 55 ;n++){
		    for(int m = 3; m <= 5 ;m++){
      matrix[m][n] = 2;
		      
		    }
		  }
		  for(int n = 48; n < 55 ;n++){
		    for(int m = 24; m <= 26 ;m++){
      matrix[m][n] = 2;
		      
		    }
		  }
		  for(int n =23 ; n <33  ;n++){
		    for(int m =13 ; m <= 15 ;m++){
      matrix[m][n] = 2;
		      
		    }
		  }
		  

  }
			System.out.print(matrix[x][i]);
		}
    System.out.println();
    		}
	
	//Instanciando objetos para usar as funçoes
	
	
	//Utilizando as funções com objetos
	Carro carros = new Carro();
	for(int i=0;i<10;i++){
	
	carros.gerarCarro(matrix);
	c.add(new Carro());
	}

	

	

	//Código para printar a matriz após cada veiculo adicionado
	
		for(int x = 0; x < matrix.length; x++)
	{
		for (int i = 0; i < matrix[x].length; i++) 
		{
		  	System.out.print(matrix[x][i]);
		}
		System.out.println();
	}

		 
	

	}

}

Aqui está a classe Carro:

import java.util.Random;
import java.util.ArrayList;

public class Carro{

   //Método para gerar um Carro em um lugar aleatório da matriz
  	public void gerarCarro(int matrix[][]){

		  Random r= new Random();
		  int a =r.nextInt(29);
    int b =r.nextInt(59);
		  if(matrix[a][b] == 0 && matrix[a][b] != 2 && matrix[a][b]!=1 && matrix[a][b]!=4 && matrix[a][b]!=5){
		    matrix[a][b]=3;
		    
		  
	}
	
	}

}