Sie sind auf Seite 1von 11

RELATÓRIO MICROMOUSE SIMULATOR

Amanda Prates, Guilherme Rezende, Gustavo Henrique


Faculdade Independente do Nordeste - FAINOR
Avenida Luís Eduardo Magalhães, 1305 – CEP 45028-440 – Vitória da Conquista, BA
Amandaprates-12@hotmail.com, guiga.rezende@hotmail.com, dj_gustavo_@hotmail.com

Resumo. O presente documento tem o intuito Onde g(nó) é o custo do caminho que leva
de mostrar, como foi feita o código para a ao nó atual e h(nó) é uma subestimativa da
resolução do problema proposto pelo Prof. distância deste nó até um estado objetivo; f é
Msc. Marcos Prado, onde o objetivo em si era chamada de função de avaliação baseada em
que o MicroMouse Simulator (um pequeno caminho. Ao operar o A*, f(nó) é avaliada para
robô de plataforma web) percorresse o nós sucessores e caminhos expandidos
labirinto em um determinado tempo e após isso utilizando os nós que tenham
escolher o caminho mais curto do início até o os menores valores de f.
objetivo. Partindo desse pressuposto foi então
requisitado pelo Prof. Msc. Marcos Prado, a
Palavras-chave: MicroMouse, A*, Labirinto. elaboração de um algoritmo que resolvesse o
labirinto na plataforma MicroMouse
1. INTRODUÇÃO Simulator. Assim, é necessário criar um
método que faça com que o robô conheça o
Inteligência artificial é a inteligência mapa e depois trace o caminho até o objetivo
similar à humana exibida por mecanismo ou com menor custo
software. Sendo ela também uma área de
pesquisa da computação, onde é dedicada a 2 METODOLOGIA
buscar métodos ou dispositivos
computacionais que possuam ou multipliquem Para construção do algoritmo – ANEXO –
a capacidade racional do ser humano de foi utilizado um pré-algoritmo do MicroMouse
resolver problemas, pensar, ou de forma ampla, Simulator, para um melhor entendimento as
ser inteligente. abreviações que serão usadas no case de alguns
Algoritmos A* são similares à busca Switch são:
pelo primeiro melhor, mas utilizam uma
heurística uma pouco mais complexa para
ABREVIAÇÃO SIGNIFICADO
selecionar um caminho na árvore. O algoritmo
“N” North
primeiro melhor sempre expande caminhos que
“S” South
envolvam ir para o nó que parece ser o mais
perto do objetivo, mas sem considerar o custo “W” West
do caminho até aquele nó. “E” East
Tabela de abreviações para o case do switch
O algoritmo A* opera da mesma maneira
que a busca pelo primeiro melhor, mas utiliza a Além dessas abreviações foi usado
seguinte função para avaliar nós: também abreviações para alguns casos do
f(nó) = g(nó) + h(nó) returns, na tabela abaixo é exibido alguns
deles:
Inteligência Artificial - 2018.1
Marcos Prado

1
exemplo avulso:
ABREVIAÇÃO SIGNIFICADO
“F” Forward
“L” Left
“R” Right
“B” Backward
Tabela de abreviações para alguns returns do switch

Já no código para estipular o tempo de


apenas 1 minuto, foi declarada variável inicial Figura 1 – exemplo de uso switch
que captura a hora atual em milissegundos,
como pode ser visto: Neste exemplo o mouse.heading()
retornará “N” e entrará no case, dando entrada
8 | var inicial = Date.now(); no IF. mouse.isPathBack(), retornará true
(verdadeiro) se houver caminho livre para trás
Assim, para determinar o tempo de um minuto , e false (falso) caso não tenha. O uso dessa
para o robô tentar alcançar o objetivo, fez-se: lógica com switch e if se repetirá em maior
parte do código.
646| var final = Date.now(); Para o armazenamento da memória, isso é,
647| para que fosse gravado os caminhos
648| if ((final-inicial)/1000 >=60 ) {
percorridos foi usado as seguintes funções:
649| controle = 1;
650| alert("Center Reached!\nMoves: " +
passosDado); FUNÇÃO RETORNO
651| //mouse.stop(); mouse.memGetVisitedRight() True: se já passou
652| } pela celula
mouse.memGetVisitedFwd() True: se já passou
O que acontece é a variável inicial é pela celula
mouse.memGetVisitedBack() True: se já passou
iniciada guardando o tempo em milissegundos pela celula
assim que o código é compilado, e na mouse.memGetVisitedLeft() True: se já passou
sequência, a variável fim é declarada pela celula
guardando o valor final de tempo de execução Tabela de memória para células visitadas
do robô. Daí o if da linha 648 verifica se o
algoritmo já alcançou o tempo de 1 minuto. Com essas funções foi criado então as
As funções mouse.heading() são seguintes funções para arquivar se o caminho
responsáveis por retornar uma direção, foi percorrido ou não, são elas:
partindo desse ponto foi criado funções de
direcionamento para conhecer o labirinto como 209| function norteVisitado()
é mostrado nas linhas da linha 15, 47, 79, 111. 257| function lesteVisitado()
305| function oesteVisitado()
15 | function verNorte() 353| function sulVisitado()
47 | function verLeste()
79 | function verOeste() Dentro dessas funções ela é composta com
111| function verSul()
switch e if, que são responsáveis por dizer se o
próximo caminho já foi visitado ou não, caso
Nessas funções o mouse.heading() que está
contrário, se não foi visitado, e o caminho não
como parâmetro do switch, retornará uma
direção, como é mostrado abaixo nesse
Inteligência Artificial - 2018.1
Marcos Prado

2
estiver livre, retornará que há uma parede 703| function floodFill()
existente. Como mostrado na figura abaixo:
houver a chamada da função
mouse.memFlood(driver.goGoal), como
mostrado abaixo:

Figura 2 – armazenamento de memoria

As funções que serão mostrado abaixo são


responsáveis por identificar se ainda há
caminhos restantes ou no labirinto após Figura 3 – Mouse partindo para o objetivo
encontrar o objetivo ou se o tempo estiver sido
esgotado. São elas:
609| function flood()
3. CONCLUSÕES E RESULTADOS
637| function running()
684| function voltar() Pode-se observar que durante a construção
do algoritmo de busca sem informações, ou
Onde a função flood, é responsável por mais conhecido como busca cega é notório que
armazenar os caminhos, a função running se o processo de encontro do ponto de partida até
tudo não tiver sido visitado e ainda tiver tempo o objetivo é um processo demorado a depender
ela continuará percorrer todo o labirinto e a da circunstância de onde ele se encontra.
função voltar será responsável por levar o Desenvolver o código em JavaScript
mouse até o Home e executará novamente já contribuiu para o aperfeiçoamento do conteúdo
indo pelo melhor caminho. visto na primeira e segunda unidade da
disciplina Inteligência Artificial e para o
A resolução da busca pelo melhor caminho conhecimento de programação, uma vez que
é feita através das função: programar tal algoritmo é uma tarefa que exige
muita atenção nos detalhes que são de extrema
442|function
pegarProximasPosicoes(caminhosRestantes)
relevância para traçar a estratégia do código.
O projeto que pedido pelo Prof. Msc.
Onde é feito toda a lógica para obtenção do Marcos Prado, foi de suma importância para o
menor caminho, sendo todo o caminho compreendimento da funcionalidade do
percorrido a função irá escolher o menor algoritmo de busca A* e o conhecimento da
caminho dentre o percurso, caso o mouse não linguagem de programação JavaScript. Todos
tenha percorrido o percurso do labirinto inteiro os objetivos pedidos durante a proposta para
ele irá escolher o menor entre o caminho avaliação foram obtidos com sucesso.
visitado até o objetivo.

O mouse irá percorrer o menor caminho 4. REFERÊNCIAS


quando a função:
Inteligência Artificial - 2018.1
Marcos Prado

3
[1] Stuart Russel and Peter Norvig, 27 | } else {
Inteligência Artificial, Editora CAMPUS, 2ª 28 | return false;
29 | }
ed. 2004, p. 74. 30 | break;
31 | case "W":
[2] UFABC, Resolução de problemas por 32 | if (mouse.isPathRight()) {
meio de busca. Link: 33 | return true;
<http://professor.ufabc.edu.br/~ronaldo.prati/ 34 | } else {
35 | return false;
InteligenciaArtificial/buaca2.pdf> Acessado 36 | }
em: 24 de junho de 2018. 37 | break;
38 | case "S":
[3] Profª Bianca Zadrozny, UFF, Inteligência 39 | if (mouse.isPathBack()) {
Artificial, site: 40 | return true;
41 | } else {
<http://www2.ic.uff.br/~bianca/ia- 42 | return false;
20091/aulas/IA-Aula4.pdf> Acessado em: 25 43 | }
de junho de 2018 44 | break;
45 | }
[4] COPPIN, Ben, Inteligência Artificial, 46 | }
47 | function verLeste() {
Editora LTC/GEN , 1ª ed. 2017, cap. 4, pg.16. 48 | switch (mouse.heading()) {
49 | case "N":
50 | if (mouse.isPathRight()) {
5. ANEXOS 51 | return true;
52 | } else {
Código completo: 53 | return false;
54 | }
1 | driver = {}; 55 | break;
2 | 56 | case "E":
3 | driver.load = function() { 57 | if (mouse.isPathFwd()) {
4 | driver.goGoal = true; 58 | return true;
5 | } 59 | } else {
6 | 60 | return false;
7 | var controle = 0; 61 | }
8 | var inicial = Date.now(); 62 | break;
9 | var passosFlood = 0; 63 | case "W":
10 | var caminho = []; 64 | if (mouse.isPathBack()) {
11 | var caminhoVolta = []; 65 | return true;
12 | var caminhosRestantes = []; 66 | } else {
13 | var caminhoNaoVisitado = []; 67 | return false;
14 | 68 | }
15 | function verNorte() { 69 | break;
16 | switch (mouse.heading()) { 70 | case "S":
17 | case "N": 71 | if (mouse.isPathLeft()) {
18 | if (mouse.isPathFwd()) { 72 | return true;
19 | return true; 73 | } else {
20 | } else { 74 | return false;
21 | return false; 75 | }
22 | } 76 | break;
23 | break; 77 | }
24 | case "E": 78 | }
25 | if (mouse.isPathLeft()) { 79 | function verOeste() {
26 | return true; 80 | switch (mouse.heading()) {

Inteligência Artificial - 2018.1


Marcos Prado

4
81 | case "N": 135| if (mouse.isPathFwd()) {
82 | if (mouse.isPathLeft()) { 136| return true;
83 | return true; 137| } else {
84 | } else { 138| return false;
85 | return false; 139| }
86 | } 140| break;
87 | break; 141| }
88 | case "E": 142| }
89 | if (mouse.isPathBack()) { 143|
90 | return true; 144| function norte() {
91 | } else { 145| switch (mouse.heading()) {
92 | return false; 146| case "N":
93 | } 147| return "F";
94 | break; 148| break;
95 | case "W": 149| case "E":
96 | if (mouse.isPathFwd()) { 150| return "L";
97 | return true; 151| break;
98 | } else { 152| case "W":
99 | return false; 153| return "R";
100| } 154| break;
101| break; 155| case "S":
102| case "S": 156| return "B";
103| if (mouse.isPathRight()) { 157| break;
104| return true; 158| }
105| } else { 159| }
106| return false; 160| function leste() {
107| } 161| switch (mouse.heading()) {
108| break; 162| case "N":
109| } 163| return "R";
110| } 164| break;
111| function verSul() { 165| case "E":
112| switch (mouse.heading()) { 166| return "F"
113| case "N": 167| break;
114| if (mouse.isPathBack()) { 168| case "W":
115| return true; 169| return "B";
116| } else { 170| break;
117| return false; 171| case "S":
118| } 172| return "L";
119| break; 173| break;
120| case "E": 174| }
121| if (mouse.isPathRight()) { 175| }
122| return true; 176| function oeste() {
123| } else { 177| switch (mouse.heading()) {
124| return false; 178| case "N":
125| } 179| return "L";
126| break; 180| break;
127| case "W": 181| case "E":
128| if (mouse.isPathLeft()) { 182| return "B";
129| return true; 183| break;
130| } else { 184| case "W":
131| return false; 185| return "F";
132| } 186| break;
133| break; 187| case "S":
134| case "S": 188| return "R";

Inteligência Artificial - 2018.1


Marcos Prado

5
189| break; 240| } else {
190| } 241| return "wall";
191| } 242| }
192| function sul() { 243| break;
193| switch (mouse.heading()) { 244| case "S":
194| case "N": 245| if (mouse.isPathBack()) {
195| return "B" 246| if
196| break; (mouse.memGetVisitedBack()) {
197| case "E": 247| return true;
198| return "R"; 248| } else {
199| break; 249| return false;
200| case "W": 250| }
201| return "L"; 251| } else {
202| break; 252| return "wall";
203| case "S": 253| }
204| return "F"; 254| break;
205| break; 255| }
206| } 256| }
207| } 257| function lesteVisitado() {
208| 258| switch (mouse.heading()) {
209| function norteVisitado() { 259| case "N":
210| switch (mouse.heading()) { 260| if (mouse.isPathRight()) {
211| case "N": 261| if
212| if (mouse.isPathFwd()) { (mouse.memGetVisitedRight()) {
213| if 262| return true;
(mouse.memGetVisitedFwd()) { 263| } else {
214| return true; 264| return false;
215| } else { 265| }
216| return false; 266| } else {
217| } 267| return "wall";
218| } else { 268| }
219| return "wall"; 269| break;
220| } 270| case "E":
221| break; 271| if (mouse.isPathFwd()) {
222| case "E": 272| if
223| if (mouse.isPathLeft()) { (mouse.memGetVisitedFwd()) {
224| if 273| return true;
(mouse.memGetVisitedLeft()) { 274| } else {
225| return true; 275| return false;
226| } else { 276| }
227| return false; 277| } else {
228| } 278| return "wall";
229| } else { 279| }
230| return "wall"; 280| break;
231| } 281| case "W":
232| break; 282| if (mouse.isPathBack()) {
233| case "W": 283| if
234| if (mouse.isPathRight()) { (mouse.memGetVisitedBack()) {
235| if 284| return true;
(mouse.memGetVisitedRight()) { 285| } else {
236| return true; 286| return false;
237| } else { 287| }
238| return false; 288| } else {
239| } 289| return "wall";

Inteligência Artificial - 2018.1


Marcos Prado

6
290| } 340| case "S":
291| break; 341| if (mouse.isPathRight()) {
292| case "S": 342| if
293| if (mouse.isPathLeft()) { (mouse.memGetVisitedRight()) {
294| if 343| return true;
(mouse.memGetVisitedLeft()) { 344| } else {
295| return true; 345| return false;
296| } else { 346| }
297| return false; 347| } else {
298| } 348| return "wall";
299| } else { 349| }
300| return "wall"; 350| break;
301| } 351| }
302| break; 352| }
303| } 353| function sulVisitado() {
304| } 354| switch (mouse.heading()) {
305| function oesteVisitado() { 355| case "N":
306| switch (mouse.heading()) { 356| if (mouse.isPathBack()) {
307| case "N": 357| if
308| if (mouse.isPathLeft()) { (mouse.memGetVisitedBack()) {
309| if 358| return true;
(mouse.memGetVisitedLeft()) { 359| } else {
310| return true; 360| return false;
311| } else { 361| }
312| return false; 362| } else {
313| } 363| return "wall";
314| } else { 364| }
315| return "wall"; 365| break;
316| } 366| case "E":
317| break; 367| if (mouse.isPathRight()) {
318| case "E": 368| if
319| if (mouse.isPathBack()) { (mouse.memGetVisitedRight()) {
320| if 369| return true;
(mouse.memGetVisitedBack()) { 370| } else {
321| return true; 371| return false;
322| } else { 372| }
323| return false; 373| } else {
324| } 374| return "wall";
325| } else { 375| }
326| return "wall"; 376| break;
327| } 377| case "W":
328| break; 378| if (mouse.isPathLeft()) {
329| case "W": 379| if
330| if (mouse.isPathFwd()) { (mouse.memGetVisitedLeft()) {
331| if 380| return true;
(mouse.memGetVisitedFwd()) { 381| } else {
332| return true; 382| return false;
333| } else { 383| }
334| return false; 384| } else {
335| } 385| return "wall";
336| } else { 386| }
337| return "wall"; 387| break;
338| } 388| case "S":
339| break; 389| if (mouse.isPathFwd()) {

Inteligência Artificial - 2018.1


Marcos Prado

7
390| if 439| return Math.floor(Math.random() * (max - min
(mouse.memGetVisitedFwd()) { + 1)) + min;
391| return true; 440| }
392| } else { 441|
393| return false; 442| function
394| } pegarProximasPosicoes(caminhosRestantes) {
395| } else { 443| var p = [];
396| return "wall"; 444| var p1 = [];
397| } 445| var p2 = [];
398| break; 446| var p3 = [];
399| } 447| var distancias;
400| } 448| p["dtCentro"] = 250;
401| 449| p1["dtCentro"] = 251;
402| function verificarCaminhosPossiveis() { 450| p2["dtCentro"] = 252;
403| x = []; 451| p3["dtCentro"] = 253;
404| if (!norteVisitado() && norteVisitado() != 452|
"wall") { 453| if (caminhosRestantes.includes("N")) {
405| x.push("N"); 454| p["x"] = mouse.x();
406| } 455| p["y"] = mouse.y() - 1;
407| if (!lesteVisitado() && lesteVisitado() != 456| p["dtCentro"] = centro(p["x"], p["y"]);
"wall") { 457| p["caminho"] = "N";
408| x.push("E"); 458| }
409| } 459| if (caminhosRestantes.includes("S")) {
410| if (!oesteVisitado() && oesteVisitado() != 460| p1["x"] = mouse.x();
"wall") { 461| p1["y"] = mouse.y() + 1;
411| x.push("W"); 462| p1["dtCentro"] = centro(p1["x"],
412| } p1["y"]);
413| if (!sulVisitado() && sulVisitado() != "wall") { 463| p1["caminho"] = "S";
414| x.push("S"); 464| }
415| } 465| if (caminhosRestantes.includes("E")) {
416| return x; 466| p2["x"] = mouse.x() + 1;
417| } 467| p2["y"] = mouse.y();
418| 468| p2["dtCentro"] = centro(p2["x"],
419| function caminhoParaVoltar(caminho) { p2["y"]);
420| switch (caminho) { 469| p2["caminho"] = "E";
421| case "N": 470| }
422| return "S" 471| if (caminhosRestantes.includes("W")) {
423| break; 472| p3["x"] = mouse.x() - 1;
424| case "E": 473| p3["y"] = mouse.y();
425| return "W"; 474| p3["dtCentro"] = centro(p3["x"],
426| break; p3["y"]);
427| case "W": 475| p3["caminho"] = "W";
428| return "E"; 476| }
429| break; 477|
430| case "S": 478| if (p["dtCentro"] < p1["dtCentro"]
431| return "N"; 479| && p["dtCentro"] <
432| break; p2["dtCentro"]
433| } 480| && p["dtCentro"] <
434| } p3["dtCentro"]) {
435| 481| p["dtCentro"] = p["caminho"];
436| function numeroRandom(min, max) { 482| }
437| min = Math.ceil(min); 483| if (p1["dtCentro"] < p["dtCentro"]
438| max = Math.floor(max); 484| && p1["dtCentro"] <
p2["dtCentro"]

Inteligência Artificial - 2018.1


Marcos Prado

8
485| && p1["dtCentro"] < 524| if (r == 0) {
p3["dtCentro"]) { 525|
486| p["menorCaminho"] = p["menorCaminho"] = "S";
p1["caminho"]; 526| } else {
487| } 527|
488| if (p2["dtCentro"] < p["dtCentro"] p["menorCaminho"] = "E";
489| && p2["dtCentro"] < 528| }
p1["dtCentro"] 529| }
490| && p2["dtCentro"] < 530| if (p1["dtCentro"] == p3["dtCentro"])
p3["dtCentro"]) { {
491| p["menorCaminho"] = 531| if (r == 0) {
p2["caminho"]; 532|
492| } p["menorCaminho"] = "S";
493| if (p3["dtCentro"] < p["dtCentro"] 533| } else {
494| && p3["dtCentro"] < 534|
p1["dtCentro"] p["menorCaminho"] = "W";
495| && p3["dtCentro"] < 535| }
p2["dtCentro"]) { 536| }
496| p["menorCaminho"] = 537| if (p2["dtCentro"] == p3["dtCentro"])
p3["caminho"]; {
497| } 538| if (r == 0) {
498| 539|
499| if (p["menorCaminho"] == undefined) { p["menorCaminho"] = "E";
500| var r = numeroRandom(0, 1); 540| } else {
501| 541|
502| if (p["dtCentro"] == p1["dtCentro"]) { p["menorCaminho"] = "W";
503| if (r == 0) { 542| }
504| 543| }
p["menorCaminho"] = "N"; 544| }
505| } else { 545|
506| 546| return p["menorCaminho"];
p["menorCaminho"] = "S"; 547| }
507| } 548|
508| } 549| function centro(x, y) {
509| if (p["dtCentro"] == p2["dtCentro"]) { 550| p = [];
510| if (r == 0) { 551|
511| 552| px = Math.abs(x - 7);
p["menorCaminho"] = "N"; 553| px2 = Math.abs(x - 8);
512| } else { 554|
513| 555| py = Math.abs(y - 7);
p["menorCaminho"] = "E"; 556| py2 = Math.abs(y - 8);
514| } 557|
515| } 558| if (px < px2) {
516| if (p["dtCentro"] == p3["dtCentro"]) { 559| p["x"] = px;
517| if (r == 0) { 560| } else {
518| 561| p["x"] = px2;
p["menorCaminho"] = "N"; 562| }
519| } else { 563| if (py < py2) {
520| 564| p["y"] = py;
p["menorCaminho"] = "W"; 565| } else {
521| } 566| p["y"] = py2;
522| } 567| }
523| if (p1["dtCentro"] == p2["dtCentro"]) 568| return p["x"] + p["y"];
{ 569| }

Inteligência Artificial - 2018.1


Marcos Prado

9
570| 623| if (mouse.memGetDataRight() < lval)
571| function andar(direcaoRobo) { {
572| var sentido; 624| lval =
573| switch (direcaoRobo) { mouse.memGetDataRight();
574| case "N": 625| direcao = "R";
575| direction(norte()); 626| }
576| break; 627| }
577| case "E": 628| if (mouse.isPathBack()) {
578| direction(leste()); 629| if (mouse.memGetDataBack() < lval)
579| break; {
580| case "W": 630| lval =
581| direction(oeste()); mouse.memGetDataBack();
582| break; 631| direcao = "B";
583| case "S": 632| }
584| direction(sul()); 633| }
585| break; 634| direction(direcao);
586| } 635| }
587| } 636|
588| 637| function running() {
589| function direction(sentido) { 638|
590| switch (sentido) { 639| mouse.memFlood(driver.goGoal);
591| case "F": 640|
592| mouse.fwd(); 641| dir = mouse.heading();
593| break; 642|
594| case "L": 643| caminhosRestantes =
595| mouse.left(); verificarCaminhosPossiveis();
596| mouse.fwd(); 644|
597| break; 645|
598| case "R": 646| var final = Date.now();
599| mouse.right(); 647|
600| mouse.fwd(); 648| if ((final-inicial)/1000 >=60 ) {
601| break; 649| controle = 1;
602| case "B": 650| alert("Center Reached!\nMoves: " +
603| mouse.left(2); passosDado);
604| mouse.fwd(); 651| //mouse.stop();
605| break; 652| }
606| } 653|
607| } 654| if (caminhosRestantes.length > 0 && controle
608| == 0) {
609| function flood() { 655|
610| var lval = 255; 656| var xy = [];
611| var direcao; 657| var devoEscolher = [];
612| if (mouse.isPathFwd()) { 658| var somaDistancia = [];
613| lval = mouse.memGetDataFwd(); 659| var loop = [];
614| direcao = "F"; 660|
615| } 661| if
616| if (mouse.isPathLeft()) { (pegarProximasPosicoes(caminhosRestantes) != null
617| if (mouse.memGetDataLeft() < lval) { 662| && driver.goGoal
618| lval = == true) {
mouse.memGetDataLeft(); 663| direcaoRobo =
619| direcao = "L"; pegarProximasPosicoes(caminhosRestantes);
620| } 664| } else {
621| } 665| var possibilidadeRandom =
622| if (mouse.isPathRight()) { numeroRandom(0,

Inteligência Artificial - 2018.1


Marcos Prado

10
666| 714|
caminhosRestantes.length - 1); 715| driver.next = running;
667| direcaoRobo =
caminhosRestantes[possibilidadeRandom];
668| }
669| } else {
670| direcaoRobo = null;
671| driver.next = voltar;
672| }
673|
674| if (direcaoRobo != undefined && direcaoRobo
!= 0) {
675|
676| caminho.unshift(direcaoRobo);
677| var c =
caminhoParaVoltar(direcaoRobo);
678| caminhoVolta.unshift(c);
679| }
680| andar(direcaoRobo);
681| passosDado = caminho.length;
682| }
683|
684| function voltar() {
685| cVolta = caminhoVolta.shift();
686| caminhoNaoVisitado =
verificarCaminhosPossiveis();
687|
688| if (caminhoNaoVisitado.length > 0 &&
controle == 0) {
689| caminhoVolta.unshift(cVolta);
690| cVolta = null;
691| driver.next = running;
692| }
693|
694| if (passosDado > 220 || controle == 1) {
695| if (mouse.isHome()) {
696| driver.next = floodFill;
697| }
698| }
699|
700| andar(cVolta);
701| }
702|
703| function floodFill() {
704| if (mouse.isGoal()) {
705| mouse.stop();
706| }
707|
708| mouse.memFlood(driver.goGoal);
709|
710| flood();
711|
712| passosFlood++;
713| }

Inteligência Artificial - 2018.1


Marcos Prado

11

Das könnte Ihnen auch gefallen