JSFiddle - React, Tailwind, and code Playground
HTML
<canvas id="canvas"></canvas>
JavaScript
var DIRECCION={arriba:0, derecha:1, abajo:2, izquierda:3 };
function Guia( jugador, mapa ){
this.cont = 0;
this.estado= 0;
this.array = [];
var fils = mapa.length - 2;
var cols = mapa[0].length - 2;
var inicio = [jugador[0],jugador[1]];
var top = [fils,cols,fils,cols];
var dist = [jugador[0],cols-jugador[1]+1,fils-jugador[0]+1,jugador[1]];
var incr = [ [-1,0], [0,1], [1,0], [0,-1] ];
var lateral= [ [1,jugador[1]], [jugador[0],cols], [fils,jugador[1]], [jugador[0],1] ];
var limits = [ [1,0], [0,cols], [fils,0], [0,1] ];
var cuadradosRestantes = fils * cols - 1;
this.last = function() {
var a;
if( this.array.length == 0 ){
a = inicio;
}
else {
a = this.array[this.array.length-1].destino;
}
return [a[0],a[1]];
}
this.push = function( primeraDir, a, b ) {
if( cuadradosRestantes <= 0 )
return;
console.log( '[' + a + '], [' + b + ']' );
if( a[0] <= 0 || a[0] > fils || a[1] <= 0 || a[1] > cols ) {
this.array.push({
destino : b,
cuadrados : 0
});
return;
}
var dimension = [ b[0]-a[0], b[1]-a[1] ];
var dir = [];
if( dimension[0] < 0 ){
dimension[0] = 1 - dimension[0]
dir[0] = DIRECCION.arriba;
} else {
dir[0] = DIRECCION.abajo;
++dimension[0];
}
if( dimension[1] < 0 ){
dimension[1] = 1 - dimension[1]
dir[1] = DIRECCION.izquierda;
} else {
dir[1] = DIRECCION.derecha;
++dimension[1];
}
var cuadrados = dimension[1]*dimension[0];
if ( cuadradosRestantes === cuadrados || dimension[0] % 2 === 1 ) {
this.array.push({
primeraDir : primeraDir,
destino : b,
direccion : dir[0],
...