Auxílio em Trabalho de aula

2 respostas
J

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);
    }
metodo auxiliar pra saber pra onde devo ir
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....

2 Respostas

J

Este metodo auxiliar ta vergonhoso, mas não consegui mta coisa diferente, tinha feito só, se é cima, vira esquerda - se é esquerda, vira baixo, etc… Pois o robô precisa ir sempre “grudado” no lado esquerdo da parede… e quando ele tenta dobrar e a posição não é valida ele tem que tentar outra, porisso o monte de if’s… mas não funcionou acho que eu não to sabendo controlar a posição do mesmo, pois por exemplo, se ele entra num beco sem saida, ele chega ao fundo, tenta a sua esquerda e não dá, tenta ir pra frente e não dá,tenta pra direita e não dá,então ele tem que voltar tentando tudo denovo, mas qdo ele volta agora a esquerda dele ja vai ser a direita de quando ele tava indo… confuso não…

Grato,

J

jefers0n:
Este metodo auxiliar ta vergonhoso, mas não consegui mta coisa diferente, tinha feito só, se é cima, vira esquerda - se é esquerda, vira baixo, etc… Pois o robô precisa ir sempre “grudado” no lado esquerdo da parede… e quando ele tenta dobrar e a posição não é valida ele tem que tentar outra, porisso o monte de if’s… mas não funcionou acho que eu não to sabendo controlar a posição do mesmo, pois por exemplo, se ele entra num beco sem saida, ele chega ao fundo, tenta a sua esquerda e não dá, tenta ir pra frente e não dá,tenta pra direita e não dá,então ele tem que voltar tentando tudo denovo, mas qdo ele volta agora a esquerda dele ja vai ser a direita de quando ele tava indo… confuso não…

Grato,

Boa noite,

Me disseram que isto é facil de fazer(eu não to achando…hehehe), que eu poderia até usar máquina de estados pra resolver, confesso que não sei como fazer isso(Máq. estado) em Java, mas se alguém puder me auxiliar seja da maneira que for, agradeço muito…

Grato,

Criado 16 de junho de 2010
Ultima resposta 17 de jun. de 2010
Respostas 2
Participantes 1