|
@@ -122,6 +122,9 @@ var imgDiscos = [ document.getElementById("disco0"), document.getElementById("di
|
|
document.getElementById("disco3"), document.getElementById("disco4"), document.getElementById("disco5") ];
|
|
document.getElementById("disco3"), document.getElementById("disco4"), document.getElementById("disco5") ];
|
|
var corFundo1 = "#26508c"; // para fundo de mensagem
|
|
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");
|
|
canvas = document.createElement("canvas");
|
|
context = canvas.getContext("2d");
|
|
context = canvas.getContext("2d");
|
|
@@ -374,7 +377,6 @@ function movimentoFinal (haste, num) {
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
// Mover disco do topo da haste 'clickDe' para a haste 'hi' (sem 'clickDe' definido)
|
|
// Mover disco do topo da haste 'clickDe' para a haste 'hi' (sem 'clickDe' definido)
|
|
function movaHaste (hi) {
|
|
function movaHaste (hi) {
|
|
var strHaste = pegaHaste(hi);
|
|
var strHaste = pegaHaste(hi);
|
|
@@ -434,7 +436,7 @@ function movaHaste (hi) {
|
|
|
|
|
|
desenhaTudo();
|
|
desenhaTudo();
|
|
}
|
|
}
|
|
- //console.log("movaHaste(hi): final");
|
|
|
|
|
|
+ console.log("movaHaste(hi): final");
|
|
return 1;
|
|
return 1;
|
|
} // movaHaste(hi)
|
|
} // movaHaste(hi)
|
|
|
|
|
|
@@ -524,7 +526,7 @@ function desenhaDiscos () { // 'context' e' global
|
|
i++;
|
|
i++;
|
|
ind_disco = matHastes[2][i];
|
|
ind_disco = matHastes[2][i];
|
|
}
|
|
}
|
|
- //console.log("desenhaDiscos(): final");
|
|
|
|
|
|
+ console.log("desenhaDiscos(): final");
|
|
} // desenhaDiscos()
|
|
} // desenhaDiscos()
|
|
|
|
|
|
|
|
|
|
@@ -563,7 +565,7 @@ function desenhaTudo () {
|
|
context.fillText(" " + mensagem, txtMX, txtMY); // mensagens
|
|
context.fillText(" " + mensagem, txtMX, txtMY); // mensagens
|
|
context.fillText(" " + mensagemNM + contador, txtNMX, txtNMY); // numero de movimentos
|
|
context.fillText(" " + mensagemNM + contador, txtNMX, txtNMY); // numero de movimentos
|
|
desenhaDiscos();
|
|
desenhaDiscos();
|
|
- //console.log("desenhaTudo(): final");
|
|
|
|
|
|
+ console.log("desenhaTudo(): final");
|
|
} // desenhaTudo()
|
|
} // desenhaTudo()
|
|
|
|
|
|
|
|
|
|
@@ -579,36 +581,41 @@ function desenhaTudo () {
|
|
*/
|
|
*/
|
|
function resolveAutomatico (n, origem, destino, aux) {
|
|
function resolveAutomatico (n, origem, destino, aux) {
|
|
if (n == 1) { // O menor disco (1) se move livremente em qualquer haste
|
|
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;
|
|
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
|
|
// Verifica posicao dos discos e chama a funcao recursiva
|
|
function preparaAutomatico ()
|
|
function preparaAutomatico ()
|
|
{
|
|
{
|
|
reiniciar(nDiscos); //formula nao funciona caso os discos estejam desorganizados
|
|
reiniciar(nDiscos); //formula nao funciona caso os discos estejam desorganizados
|
|
resolveAutomatico(nDiscos, 0, 2 ,1);
|
|
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 --------------------
|
|
// -------------------- FIM DA ATUALIZACAO --------------------
|
|
|
|
|
|
console.log("iHanoi: final do JavaScript principal"); //D
|
|
console.log("iHanoi: final do JavaScript principal"); //D
|
|
|
|
+
|