Jelajahi Sumber

Atualização renderização

Atualização solucionando problema de renderização
Gustavo Grancieiro 3 tahun lalu
induk
melakukan
7a8798121d
1 mengubah file dengan 30 tambahan dan 23 penghapusan
  1. 30 23
      ihanoi/js/ihanoi.js

+ 30 - 23
ihanoi/js/ihanoi.js

@@ -122,6 +122,9 @@ var imgDiscos = [ document.getElementById("disco0"), document.getElementById("di
                   document.getElementById("disco3"), document.getElementById("disco4"), document.getElementById("disco5") ];
 var corFundo1 = "#26508c"; // para fundo de mensagem
 
+var mov = [];             // Lista de movimentos para resolver torre
+var indiceMovimento = 0;  // Indice de movimentos i para fazMovimento
+var max = 0;              // Maximo de movimentos para n discos (2^n) - 1
 
 canvas = document.createElement("canvas");
 context = canvas.getContext("2d");
@@ -374,7 +377,6 @@ function movimentoFinal (haste, num) {
   return 0;
   }
 
-
 // Mover disco do topo da haste 'clickDe' para a haste 'hi' (sem 'clickDe' definido)
 function movaHaste (hi) {
   var strHaste = pegaHaste(hi);
@@ -434,7 +436,7 @@ function movaHaste (hi) {
       
     desenhaTudo();
     }
-  //console.log("movaHaste(hi): final");
+  console.log("movaHaste(hi): final");
   return 1;
   } // movaHaste(hi)
 
@@ -524,7 +526,7 @@ function desenhaDiscos () { // 'context' e' global
     i++;
     ind_disco = matHastes[2][i];
     }
-  //console.log("desenhaDiscos(): final");
+  console.log("desenhaDiscos(): final");
   } // desenhaDiscos()
 
 
@@ -563,7 +565,7 @@ function desenhaTudo () {
   context.fillText(" " + mensagem, txtMX, txtMY); // mensagens
   context.fillText(" " + mensagemNM + contador, txtNMX, txtNMY); // numero de movimentos
   desenhaDiscos();
-  //console.log("desenhaTudo(): final");
+  console.log("desenhaTudo(): final");
   } // desenhaTudo()
 
 
@@ -579,36 +581,41 @@ function desenhaTudo () {
  */
 function resolveAutomatico (n, origem, destino, aux) {
   if (n == 1) { // O menor disco (1) se move livremente em qualquer haste
-    movaHaste(origem);
-    movaHaste(destino);
-    console.log("Moveu de " + origem + " para " + destino);
-    
+    mov.push(origem);
+    mov.push(destino);
+
     return;
     }
-  //resolveAutomatico(n - 1, origem, aux, destino); // Retirar discos menores do caminho
-  console.log("Primeiro resolve com n = " + (n - 1));
-  setTimeout(resolveAutomatico, 100 * (potencia2(n) - 1), n - 1, origem, aux, destino);
-  sleep(100 * (potencia2(n) - 1));
-
-  movaHaste(origem);
-  movaHaste(destino); // Mover maior disco para o destino
-  console.log("Moveu de " + origem + " para " + destino);
-  //sleep(1000);
+  resolveAutomatico(n - 1, origem, aux, destino); // Retirar discos menores do caminho
+
+  mov.push(origem);
+  mov.push(destino);
   
-  //resolveAutomatico(n - 1, aux, destino, origem); //Mover os discos menores para cima do maior novamente
-  console.log("Segundo resolve com n = " + (n - 1));
-  setTimeout(resolveAutomatico, 100 * (potencia2(n) - 1), n - 1, aux, destino, origem);
-  sleep(100 * (potencia2(n) - 1));
+  resolveAutomatico(n - 1, aux, destino, origem); //Mover os discos menores para cima do maior novamente
   }
-let mov = [];
 
 // Verifica posicao dos discos e chama a funcao recursiva
 function preparaAutomatico ()
 {
   reiniciar(nDiscos); //formula nao funciona caso os discos estejam desorganizados
   resolveAutomatico(nDiscos, 0, 2 ,1);
-  console.log(mov);
+  max = mov.length - 1;
+
+  setTimeout( fazMovimento, 1000 );
   }
+
+function fazMovimento ()
+{
+  movaHaste( mov[indiceMovimento] );
+  movaHaste( mov[indiceMovimento + 1] );
+  indiceMovimento += 2;
+
+  if (indiceMovimento >= max) return;
+
+  setTimeout( fazMovimento, 1000 );
+
+}
 // -------------------- FIM DA ATUALIZACAO --------------------
 
 console.log("iHanoi: final do JavaScript principal"); //D
+