classe movimentos
`public enum Movimentos {
CIMA, BAIXO, ESQUERDA, DIREITA;
}`
classe movimentos
`public enum Movimentos {
CIMA, BAIXO, ESQUERDA, DIREITA;
}`
classe posicaoxy
public class PosicaoXY {
private int posX;
private int posY;
public PosicaoXY() {
this.posX = 0;
this.posY = 0;
}
public PosicaoXY(int posX, int posY) {
this.posX = posX;
this.posY = posY;
}
public int getPosX() {
return posX;
}
public void setPosX(int posX) {
this.posX = posX;
}
public int getPosY() {
return posY;
}
public void setPosY(int posY) {
this.posY = posY;
}
}
main
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws InterruptedException {
Ambiente ambiente = new Ambiente(4);
ambiente.exibirAmbiente();
AgenteAspirador agente = new AgenteAspirador(ambiente);
//agente.setPosicao(new PosicaoXY(2,2));
while(agente.isAindaLimpando()) {
agente.zerarPilha();
agente.movimentar();
ambiente.exibirAmbiente();
Thread.sleep(1500);
}
}
}
classe ambiente
public class Ambiente {
private int tamanhoAmbiente;
char[] letras = new char[]{'C', 'M', 'A', 'S', 'L'};
char[][] ambiente;
int cont = 0;
//new char[tamanhoLabirinto][tamanhoLabirinto];
private AgenteAspirador agente;
public Ambiente(int tamanhoAmbiente) {
this.tamanhoAmbiente = tamanhoAmbiente;
this.construirNovoAmbiente();
}
//sortear letras
Random random = new Random();
// Construir o labirinto
private void construirNovoAmbiente() {
ambiente = new char[this.tamanhoAmbiente][this.tamanhoAmbiente];
for (int i = 0; i < this.tamanhoAmbiente; i++) {
for (int j = 0; j < this.tamanhoAmbiente; j++) {
// labirinto[i][j] = "S";
ambiente[i][j] = letras[random.nextInt(letras.length)];
}
}
}
public char[][] getAmbiente() {
return ambiente;
}
//exibe a matriz
public void exibirAmbiente() {
atualizarPosicaoAgente();
PosicaoXY posAgente = this.agente.getPosicao();
int x = posAgente.getPosX();
int y = posAgente.getPosY();
for (int i = 0; i < tamanhoAmbiente; i++) {
for (int j = 0; j < tamanhoAmbiente; j++) {
if (i == y && j == x) {
System.out.print("|" + “#” + “|”); // exibe a posicao do agente
} else {
System.out.print("|" + ambiente[i][j] + “|”); // exibe o valor da posicao
}
}
System.out.println("");
}
System.out.println("");
}
public int getTamanhoAmbiente() {
return this.tamanhoAmbiente;
}
//retorna o valor que esta ali naquela posicao do ambiente
//retorna o valor que esta ali
public char retornarValorPosicaoAmbiente(PosicaoXY posicao) {
return this.ambiente[posicao.getPosX()][posicao.getPosY()];
}
public void setAgente(AgenteAspirador agente) {
this.agente = agente;
}
//verifica se esta sujo e limpa trocando S por L
public void limpar() {
PosicaoXY posicao = this.agente.getPosicao();
int x = posicao.getPosX();
int y = posicao.getPosY();
if (ambiente[x][y] == 'S') {
ambiente[x][y] = 'L';
}
}
private void atualizarPosicaoAgente() {
if (this.agente != null) {
PosicaoXY posAgente = this.agente.getPosicao();
ambiente[posAgente.getPosX()][posAgente.getPosY()] = '#';
}
}
}
Consegui ver sem dar.
Como eu já havia dito, você não inicializou a variável agente
.
Olha o código do seu método main
, você chama o método exibirAmbiente()
antes de instanciar o AgenteAspirador
.
Nesse momento o atributo agente
do objeto ambiente
ainda está null
.
Você só inicializa o agente
através do método setAgente
, dentro do construtor da classe AgenteAspirador
.
Resumindo, você só pode chamar o método exibirAmbiente()
depois de ter chamado o setAgente
.
certo agradeco a ajuda eu fiz la mais ainda continua na msm, a diferenca é que por um lado ele percorre normalmente pulando as casas sem o substituir e o outro lado ele comoca a substituir como antes…entende?
Kkkkkkkkk
Pôxa, você poderia ao menos fazer uns testes de mesa pra entender o que está acontecendo.
A posição do agente não deve ser setada no array, ela só deve ser apresentada.
Olha o que você faz no método atualizarPosicaoAgente
, esse método nem precisa existir.
beleza meu amigo, ja ajudou demais deixa pelo menos mim viro pelo menos tento e aprendo mais, valeu mesmo pela ajuda…
Percebeu que o método atualizarPosicaoAgente
não precisa existir?
Quem atualiza a posição no seu código é o método retornarMovimento
, deveria ser o método movimentar
.
Se você valoriza seu tempo eu sugiro usar uma linguagem mais fácil. Eu sei que aqui é um site de Java, mas não é uma boa ferramenta para IA, só vai retardar o seu aprendizado.
Outra coisa, se quer aprender leia livros em vez de seguir desconhecidos no YouTube.
sim, blz