En mi caso, la solucion para que no se pase el raton por el lado del queso sin comerselo, es un metodo mas a la clase..
Código PHP:
function checkAround($a) {
$found = array();
$xy = &$this->current;
if (in_array(UP, $a) && $this->maze[$xy[1]-1][$xy[0]] == CHEESE) $found[] = UP;
if (in_array(RIGHT, $a) && $this->maze[$xy[1]][$xy[0]+1] == CHEESE && empty($found)) $found[] = RIGHT;
if (in_array(DOWN, $a) && $this->maze[$xy[1]+1][$xy[0]] == CHEESE && empty($found)) $found[] = DOWN;
if (in_array(LEFT, $a) && $this->maze[$xy[1]][$xy[0]-1] == CHEESE && empty($found)) $found[] = LEFT;
if (empty($found)) return $a;
else return $found;
}
Y luego, en el metodo solveMaze(), justo antes de la linea que mueve el raton:
Código PHP:
$this->Move($dir[array_rand($dir)]);
Se agrega esta linea:
Código PHP:
if (count($dir) > 1) $dir = $this->checkAround($dir);
No lo he probado, pero creo que deberia funcionar.. y con un rato mas de tiempo puedo simplificar mas el nueov metodo xD
Edito: Por cierto, le agrege comentarios a mi codigo.. no muchos, pero ando sin mucho tiempo xD