Boa noite,
Estou quaqse na data da entrega e estou apanhando pra fazer isso:
Preciso fazer um método pra gerar os passos de um robô para ele sair de unm labirinto, a maioria ja esta implementado, pegamos pronto do profº, tem um método que lê e interpreta um labirinto em txt qualquer e desenha o labiritno na tela, tem o método que move o robô(onde se passa o ponto corrente do mesmo no labiritno e uma direção"um int de 0-3, 0:esquerda, 1:cima, 3:cima e 2:direita"), tenho que fazer o método que gera os passos válidos seguindo a seguinte lógica:
Ele tem que ir sempre com a mão esquerda na parede, quando chegar na primeira entrada para esquerda ele deve entrar, se for reto ele vai até o fim e voltadaí tentando entrar pra sua esquerda(que vsualmente na tela será nossa direita) assim até achar a saída(os labs sempre terão saída).
pra saber se é caminho válido usamos o método que move, pois o mesmo retorna null se a posição que tentamos ir não é valida e se for diferente de null podemos nos mover pra ela... tem tb um método auxiliar que retorna true se for saída...
O que fiz:
Gera lista dos passos a serem seguidos...public ListTAD<Point> geraPassos() {
//--> direction {0 - Esquerda 1 - Cima 2 - Direita 3 - Baixo}
int count = 0;
int nroIteracoes = getMaxPassos(); // máx passos passamos qdo criamos um novo robô...
ListTAD<Point> lista = new ListArray<Point>();
while (!ehSaida(pCorrente) && count < nroIteracoes) {
Point pAux = move(pCorrente, decisao());
if (pAux != null) {
pCorrente = pAux;
lista.add(pCorrente);
count++;
}
count++;
}
return (lista);
}
public int decisao() {
if (direction == 1){ // direção atual do robô
Point pAux = move(pontoCorrente, 0);
if (pAux != null)
return 0; //se ta subindo devo tentar ir pra esquerda
else pAux = move(pontoCorrente, 1);
if (pAux != null)
return 1;
else pAux = move(pontoCorrente, 2);
if (pAux != null)
return 2;
else return 3;
}
else if (direction == 2) {
Point pAux = move(pontoCorrente, 1);
if (pAux != null)
return 1;
else pAux = move(pontoCorrente, 2);
if (pAux != null)
return 2;
else pAux = move(pontoCorrente, 3);
if (pAux != null)
return 3;
else return 0;
}
else if (direction == 3){
Point pAux = move(pontoCorrente, 2);
if (pAux != null)
return 2;
else pAux = move(pontoCorrente, 3);
if (pAux != null)
return 3;
else pAux = move(pontoCorrente, 0);
if (pAux != null)
return 0;
else return 1;
}
else {
Point pAux = move(pontoCorrente, 3);
if (pAux != null)
return 3;
else pAux = move(pontoCorrente, 0);
if (pAux != null)
return 0;
else pAux = move(pontoCorrente, 1);
if (pAux != null)
return 1;
else return 2;
}
}
Mas não ta funcionando....