Correcto, tienes razon, hay que preguntar por 3, escribi sin pensar (y sin probarlo)
en la esquina superior derecha fallaba si arranca ahi, si arranca en esa posicion se hace un nudo y termina, no obstante analizandolo mejor, el nudo no solo se hace en esa esquina sino en cualquier caso similar. por lo tanto la condicion general y definitiva seria:
Código Javascript
:
Ver original// Casos especiales.
if (
(
// Esta en la primer columna.
(this.mapa[this.jugador[0]][this.jugador[1]-1] == 1)
||
// Esta en un escalon.
(
(((this.jugador[0]-2) >= 0 ? this.mapa[this.jugador[0]-2][this.jugador[1]] : 3) > 0)
&& (((this.jugador[0]+2) < this.mapa[0].length ? this.mapa[this.jugador[0]-1][this.jugador[1]+1] : 3) > 0)
)
||
// Tiene que dar un rodeo.
(
(((this.jugador[0]-2) >= 0 ? this.mapa[this.jugador[0]-2][this.jugador[1]] : 3) > 0)
&& (((this.jugador[0]+2) < this.mapa[0].length ? this.mapa[this.jugador[0]-1][this.jugador[1]+1] : 3) > 0)
&& (this.mapa[this.jugador[0]+1][this.jugador[1]+1] == 0)
)
)
// Y esta libre.
&& (this.mapa[this.jugador[0]-1][this.jugador[1]] == 0)
)
return DIRECCION.arriba;
else
{
...
EDITO: eh aqui el fiddle con un random, hasta ahora nunca fallo:
http://jsfiddle.net/ProyectoNSD/dssvt/2/
EDITO 2: y he aqui 3 ia compitiendo juntas:
http://jsfiddle.net/ProyectoNSD/dssvt/3/