[RESOLVIDO] Inteligencia Artificial

,

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()] = '#';

    }

}

}

@staroski esta ai todas as classes do progama

@staroski o erro dar naquela linha msm NullPointerException;

@staroski deu para olhar o codigo?

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.

2 curtidas

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