Enviado em 16/06/2010 - 19:34h
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...
metodo auxiliar pra saber pra onde devo ir
Mas não ta funcionando....
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...
1. public ListTAD<Point> geraPassos() {
2. //--> direction {0 - Esquerda 1 - Cima 2 - Direita 3 - Baixo}
3. int count = 0;
4. int nroIteracoes = getMaxPassos(); // máx passos passamos qdo criamos um novo robô...
5.
6. ListTAD<Point> lista = new ListArray<Point>();
7.
8. while (!ehSaida(pCorrente) && count < nroIteracoes) {
9. Point pAux = move(pCorrente, decisao());
10. if (pAux != null) {
11. pCorrente = pAux;
12. lista.add(pCorrente);
13. count++;
14. }
15. count++;
16. }
17. return (lista);
18. }
metodo auxiliar pra saber pra onde devo ir
1. public int decisao() {
2. if (direction == 1){ // direção atual do robô
3. Point pAux = move(pontoCorrente, 0);
4. if (pAux != null)
5. return 0; //se ta subindo devo tentar ir pra esquerda
6. else pAux = move(pontoCorrente, 1);
7. if (pAux != null)
8. return 1;
9. else pAux = move(pontoCorrente, 2);
10. if (pAux != null)
11. return 2;
12. else return 3;
13. }
14. else if (direction == 2) {
15. Point pAux = move(pontoCorrente, 1);
16. if (pAux != null)
17. return 1;
18. else pAux = move(pontoCorrente, 2);
19. if (pAux != null)
20. return 2;
21. else pAux = move(pontoCorrente, 3);
22. if (pAux != null)
23. return 3;
24. else return 0;
25. }
26. else if (direction == 3){
27. Point pAux = move(pontoCorrente, 2);
28. if (pAux != null)
29. return 2;
30. else pAux = move(pontoCorrente, 3);
31. if (pAux != null)
32. return 3;
33. else pAux = move(pontoCorrente, 0);
34. if (pAux != null)
35. return 0;
36. else return 1;
37. }
38. else {
39. Point pAux = move(pontoCorrente, 3);
40. if (pAux != null)
41. return 3;
42. else pAux = move(pontoCorrente, 0);
43. if (pAux != null)
44. return 0;
45. else pAux = move(pontoCorrente, 1);
46. if (pAux != null)
47. return 1;
48. else return 2;
49.
50. }
51. }
Mas não ta funcionando....