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],
         ...