Como paso previo, hemos creado un laberinto,
es decir, un polígono con muchos vértices 
(este tiene 310).

Para facilitar su creación, 
usamos la cuadrícula y la fijación 
de puntos a ella. 

No tiene mayor dificultad que la paciencia...  :-)

Crea un botón con el rótulo:   Iniciar

y guion asociado (al hacer clic):

Valor(P, (0.2, 1.75))
Valor(v, (0.1, 0))
ZoomAcerca(1)

Valor(v, Si(dPD>0.4, -vn, Si(dPA<0.15, vn, v)))
Valor(P, P + v)

Explicación del guion:

El vector v, que determina el avance de P,
no varía su valor a no ser que:
a) La distancia al punto más próximo a su derecha
sea mayor que 0.4, en cuyo caso gira a la derecha (-vn).

b) Si no se cumple el apartado anterior, comprueba
si la distancia al punto de enfrente es menor que 0.15,
en cuyo caso gira a la izquierda (vn).

paso = 1 (slider from 1 to total)
instrucciones: {"Crea el punto  P = (0.2, 1.75) y el vector v = (0.1, 0).\\nDefine el vector normal a v:  vn = VectorNormal(v)", "Define las semirrectas:  r = Semirrecta(P, P+v)\\ns = Semirrecta(P, P - vn)", "Halla las intersecciones de r con el laberinto (P en Avance):\\npA = EliminaIndefinidos({Interseca(r, laberinto)})", "Halla las distancias de P a esas intersecciones:\\ndA = Secuencia(Distancia(P, pA(k)), k, 1, Longitud(pA))", "Halla el punto del laberinto más próximo frente a P:\\nPa = pA(ÍndiceDe(Mínimo(dA), dA))", "Calcula la distancia a ese punto:\\ndPA = Distancia(P, Pa)", "Halla las intersecciones de s con el laberinto (P a la Derecha):\\npD = EliminaIndefinidos({Interseca(s, laberinto)})", "Halla las distancias de P a esas intersecciones:\\ndD = Secuencia(Distancia(P, pD(k)), k, 1, Longitud(pD))", "Halla el punto del laberinto más próximo a la derecha de P:\\nPd = pD(ÍndiceDe(Mínimo(dD), dD))", "Calcula la distancia a ese punto:\\ndPD = Distancia(P, Pd)", "Activa el rastro de P.\\nCrea un botón con el guion indicado en el recuadro amarillo.", "Crea un deslizador y asóciale el guion que indica el recuadro amarillo.", "Anima el deslizador.\\nMejora la estética."}
texto = Element(instrucciones, paso)
total = Length(instrucciones)
fondo: {Polygon[Corner[1], Corner[2], Corner[2] + (0, 1.5), Corner[1] + (0, 1.5)]}
pasoActual: "Paso " + paso + " de " + total + ""
laberinto = Polygon({(-0.1, 2.6), (7.6, 2.6), (7.6, -4.5), (7, -4.5), (7, -4.4), (7.5, -4.4), (7.5, -4), (6.6, -4), (6.6, -4.5), (6, -4.5), (6, -4.4), (6.5, -4.4), (6.5, -3.9), (7.5, -3.9), (7.5, -1.5), (6, -1.5), (6, -2.5), (5.5, -2.5), (5.5, -2), (4.6, -2), (4.6, -2.5), (4.5, -2.5), (4.5, -2), (3.6, -2), (3.6, -2.5), (1.6, -2.5), (1.6, -3.5), (1.5, -3.5), (1.5, -2.4), (2.4, -2.4), (2.4, -1.9), (2.5, -1.9), (2.5, -2.4), (3.5, -2.4), (3.5, -1.9), (5.6, -1.9), (5.6, -2.4), (5.9, -2.4), (5.9, -1.5), (4.5, -1.5), (4.5, 0), (3.4, 0), (3.4, 1), (3, 1), (3, -0.5), (2.9, -0.5), (2.9, 0), (2.5, 0), (2.5, 0.1), (2.9, 0.1), (2.9, 1), (2.5, 1), (2.5, 1.1), (2.9, 1.1), (2.9, 2.1), (3.5, 2.1), (3.5, 2), (3, 2), (3, 1.1), (3.5, 1.1), (3.5, 0.1), (4.5, 0.1), (4.5, 0.6), (4.9, 0.6), (4.9, 2.1), (6.5, 2.1), (6.5, 1.6), (7, 1.6), (7, 1.5), (6.4, 1.5), (6.4, 2), (5, 2), (5, 1.1), (5.5, 1.1), (5.5, 1), (5, 1), (5, 0.5), (4.6, 0.5), (4.6, -0.4), (6.9, -0.4), (6.9, 0.1), (7, 0.1), (7, -1), (6.9, -1), (6.9, -0.5), (5.5, -0.5), (5.5, -1), (5, -1), (5, -0.9), (5.4, -0.9), (5.4, -0.5), (4.6, -0.5), (4.6, -1.4), (5.9, -1.4), (5.9, -0.9), (6.5, -0.9), (6.5, -1), (6, -1), (6, -1.4), (7.5, -1.4), (7.5, 1), (6, 1), (6, 0.5), (5.5, 0.5), (5.5, 0.1), (6.4, 0.1), (6.4, 0.6), (7, 0.6), (7, 0.5), (6.5, 0.5), (6.5, 0), (5, 0), (5, 0.1), (5.4, 0.1), (5.4, 0.6), (5.9, 0.6), (5.9, 1.5), (5.5, 1.5), (5.5, 1.6), (6, 1.6), (6, 1.1), (7.5, 1.1), (7.5, 2), (7, 2), (7, 2.1), (7.5, 2.1), (7.5, 2.5), (4.5, 2.5), (4.5, 1), (4, 1), (4, 0.5), (3.9, 0.5), (3.9, 1.5), (3.5, 1.5), (3.5, 1.6), (3.9, 1.6), (3.9, 2.1), (4, 2.1), (4, 1.1), (4.4, 1.1), (4.4, 2.5), (2.5, 2.5), (2.5, 1.5), (2.1, 1.5), (2.1, 0.6), (2.5, 0.6), (2.5, 0.5), (2.1, 0.5), (2.1, -0.4), (2.5, -0.4), (2.5, -0.9), (3.4, -0.9), (3.4, -0.4), (4.1, -0.4), (4.1, -1.5), (3, -1.5), (3, -2), (2.9, -2), (2.9, -1.5), (2.1, -1.5), (2.1, -2), (1.1, -2), (1.1, -3.9), (2, -3.9), (2, -2.9), (3, -2.9), (3, -3), (2.6, -3), (2.6, -3.5), (2.5, -3.5), (2.5, -3), (2.1, -3), (2.1, -4.4), (2.6, -4.4), (2.6, -4.5), (2, -4.5), (2, -4), (1, -4), (1, -3), (0.5, -3), (0.5, -2.9), (1, -2.9), (1, -2), (0.5, -2), (0.5, -1.9), (2, -1.9), (2, -0.9), (2.1, -0.9), (2.1, -1.4), (4, -1.4), (4, -0.5), (3.5, -0.5), (3.5, -1), (2.4, -1), (2.4, -0.5), (1.1, -0.5), (1.1, -1), (0.4, -1), (0.4, 0.1), (1.4, 0.1), (1.4, 1), (0.4, 1), (0.4, 1.1), (0.9, 1.1), (0.9, 1.6), (1, 1.6), (1, 1.1), (1.5, 1.1), (1.5, 0), (0.5, 0), (0.5, -0.9), (1, -0.9), (1, -0.4), (2, -0.4), (2, 2), (2.1, 2), (2.1, 1.6), (2.4, 1.6), (2.4, 2.5), (0, 2.5), (0, 1.6), (0.4, 1.6), (0.4, 2.1), (1.5, 2.1), (1.5, 1.5), (1.4, 1.5), (1.4, 2), (0.5, 2), (0.5, 1.5), (0, 1.5), (0, 0.6), (1, 0.6), (1, 0.5), (0, 0.5), (0, -1.4), (1.5, -1.4), (1.5, -0.9), (1.6, -0.9), (1.6, -1.5), (0, -1.5), (0, -2.4), (0.5, -2.4), (0.5, -2.5), (0, -2.5), (0, -4.9), (1.5, -4.9), (1.5, -4.5), (0.5, -4.5), (0.5, -3.4), (0.6, -3.4), (0.6, -4.4), (1.6, -4.4), (1.6, -4.9), (3.5, -4.9), (3.5, -3.9), (4, -3.9), (4, -3.4), (4.1, -3.4), (4.1, -4.4), (5, -4.4), (5, -4.5), (4, -4.5), (4, -4), (3.6, -4), (3.6, -4.9), (5.4, -4.9), (5.4, -4), (4.5, -4), (4.5, -3), (3.6, -3), (3.6, -3.5), (3.1, -3.5), (3.1, -4.5), (3, -4.5), (3, -4), (2.5, -4), (2.5, -3.9), (3, -3.9), (3, -3.4), (3.5, -3.4), (3.5, -2.9), (4, -2.9), (4, -2.4), (4.1, -2.4), (4.1, -2.9), (5, -2.9), (5, -2.4), (5.1, -2.4), (5.1, -2.9), (6.5, -2.9), (6.5, -1.9), (7.1, -1.9), (7.1, -3.5), (6.1, -3.5), (6.1, -4), (6, -4), (6, -3.5), (5, -3.5), (5, -3.4), (7, -3.4), (7, -2), (6.6, -2), (6.6, -3), (4.6, -3), (4.6, -3.9), (5.5, -3.9), (5.5, -4.9), (7.6, -4.9), (7.6, -5), (-0.1, -5)})