Evidentemente si no ve las cintas más que aun paso de distancia la cosa no promete.
En ese caso lo que se debe hacer es buscar un algoritmo que garantice el mayor éxito posible para encontrar cintas en el camino. Esto es debes garantizar una trayectoria en línea recta desde el origen hacia el destino, en el caso que presentas, describiría una diagonal y además encontraría la cinta. Si no encuentra una cinta seguirá tardando el mismo costo que el otro camino que te describe, la línea recta lo que verifica es la posibilidad de que en su camino directo esté una cinta.
el algoritmo sería un avance vertical y un avance horizontal mientra no vea cinta así :
funcion determinar_ruta
pasosV= (y.destino - Y.origen) 'pasos verticales hacia destino
pasosH= (X.destino - X.origen) ' pasos horizontales hasta destino.
si pasosV > pasosH luego
avH=1' avance horizontal= 1
avV= pasosV / pasosH ' avance vertical
en otro caso
avV=1 ' avance vertical = 1
avH= pasosH / pasosV
fin si
fin determinar_ruta
funcion avanzar_ficha
meta=false
cinta=false
hacer
si avH = 1 luego
iterar 1 hasta avV
avanzar vertical ' 1 unidad
cinta= comprobar_Haycinta ' se hace una llamada a esa función
meta= comprobar_Meta ' comprueba si llegó a la meta
si (cinta=true) o (meta = true) salir de iterar
fin iterar
si meta= false luego
avanzar horizontal ' 1 unidad
llamada a comprobar_Haycinta
meta= comprobar_Meta ' comprueba si llegó a la meta
fin si
en otro caso
iterar 1 hasta avH
avanzar horizontal ' 1 unidad
cinta= comprobar_Haycinta ' se hace una llamada a esa función
meta= comprobar_Meta ' comprueba si llegó a la meta
si (cinta=true) o (meta = true) salir de iterar
fin iterar
si meta= false luego
avanzar vertical ' 1 unidad
llamada a comprobar_Haycinta
meta= comprobar_Meta ' comprueba si llegó a la meta
fin si
fin si
repetir mientras meta=false ' (no encuentre final )
fin avanzar_ficha
funcion comprobar_Haycinta
si se detecta cinta
llamada a avanzar_desdeCinta
llamada a determinar_ruta ' actualiza según nueva posición
devolver true
fin si
fin funcion
funcion comprobar_Meta
si llegó a la meta luego
devolver true
fin si
fin funcion
Naturalmente avanzar horizontal y vertical será si puede avanzar, puesto que es posible que alcance un tope antes de lograr la meta... eso ya lo dejo a tu entretenimiento
Para hacer un algorimo más eficiente sería necesarios saber más detalles ¿ las cintas se colocan aleatoriamente ?, ¿ existen más cintas de solo 1 ?, ¿ se pueden mover ?, también si una cinta retrocede... o te aleja más que donde estabas y como comentas si es posible variar su tamaño.
El algortimo presentado se basa en la estadística del problema matemático si lanzamos una aguja al aire y tenemos 1 línea trazada en el suelo que posiblidad hay que quede atravesando la línea...