Laberinto en php

Pues lo dicho, tengo que hacer un programa en php en el cual un raton encuentra un queso en un laberinto, mas que el codigo necesito una explicación, en principio habia pensado en hacer el laberinto en un array de dos dimensiones y asignarle una prioridad a cada movimiento, es decir:
Arriba, si la casilla de arriba es un muro, sigue...
Derecha, si la casilla de la derecha es un muro, sigue...
Abajo, si la casilla de abajo es un muro, sigue...
Izquierda.
Para evitar que se atascara las casillas que no son muro tienen un valor 0 que se incrementa cuando se recorre, entonces tambien usaria como prioridad que este menos veces recorrida, con esto en teoria al final acabaria dando con el queso y luego ya pensaria la manera de que escogiera la ruta mas corta.
Soy bastante, bastante novato programando pero el cacho de codigo que llevo es:

<?php
//Presentamos laberinto de 10 x 10
$laberinto[1]=array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1);
$laberinto[2]=array(-1,0,0,0,0,0,-1,0,0,-1);
$laberinto[3]=array(-1,0,0,-1,-1,0,-1,-1,0,-1);
$laberinto[4]=array(-1,-1,0,-1,-1,0,0,0,0,-1);
$laberinto[5]=array(-1,-1,0,-1,0,0,-1,-1,-1,-1);
$laberinto[6]=array(-1,0,0,-1,0,-1,-1,0,0,-1);
$laberinto[7]=array(-1,0,-1,0,0,-1,0,0,-1,-1);
$laberinto[8]=array(-1,0,-1,-1,0,0,0,-1,-1,-1);
$laberinto[9]=array(-1,0,-1,0,0,-1,0,0,-1,-1);
$laberinto[10]=array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1);

//Colocamos el queso en el array.
do{
$qh=rand(2,9);
$qv=rand(1,8);

} while ($laberinto[$qh][$qv]==-1);

if($laberinto[$qh][$qv]<>-1)$laberinto[$qh][$qv]=-2;


//Colocamos el ratón en el array.
do{
$rh=rand(2,9);
$rv=rand(1,8);

} while ($laberinto[$rh][$rv]==-1 or $laberinto[$rh][$rv]==$laberinto[$qh][$qv]);

if($laberinto[$rh][$rv]<>-1)$laberinto[$rh][$rv]=-3;




//Presentamos el laberinto con ratón y queso.

printf("<table CELLPADDING=30 CELLSPACING=3>");


for ($i=1;$i<=10;$i++){
printf("<tr>");
for ($j=0;$j<=9;$j++){
switch($laberinto[$i][$j]){

case -1;
printf("<td bgcolor='black'></td>");
break;
case -2;
printf("<td bgcolor='yellow'></td>");
break;
case -3;
printf("<td bgcolor='red'></td>");
break;
default;
printf("<td bgcolor='white'></td>");
break;
}

}

}

printf("</table>");
?>

Estoy abierto a otros metodos, pero lo dicho mas que un codigo me hace falta una explicacion.
A ver si me aclaro... quieres manejar el ratón con las flechas de dirección o quieres que se mueva solo? En cualquier caso sería necesario javascript para no recargar la página con cada movimiento.
Tiene que encontrar el camino el solo y no necesito la animacion, me refiero, tiene que estar hecho en php con que el programa saque la logica para llegar es suficiente.
cipoteloth escribió:Tiene que encontrar el camino el solo y no necesito la animacion, me refiero, tiene que estar hecho en php con que el programa saque la logica para llegar es suficiente.


A ver, deberías hacer una función que intente mover el ratón en las cuatro direcciones en orden (por ejemplo, arriba, derecha, abajo, izquierda) y añada un valor por donde pasa y se limite a un movimiento por llamada a la función, es decir, si se mueve hacia arriba, aunque el cuadro de la derecha esté vacío se deberá llamar de nuevo a la función para que se mueva.

El siguiente ejemplo se ve mejor si tienes un pasillo del laberinto delante:

Es decir, empiezas:
Sube arriba porque está en blanco (la casilla de abajo quedaría marcada con valor 1 porque ya ha pasado por ella), derecha pared, abajo tiene valor 1, izquierda pared.

Y vuelves otra vez con la misma función:
Sube arriba porque está en blanco (la casilla donde estaba queda marcada con 1), derecha pared, abajo tiene valor 1, izquierda pared.

Y llega a un callejón sin salida:
Arriba pared, derecha pared, abajo tiene valor 1, izquierda pared, pues le das +1 de valor y vuelves a la casilla inferior.

Otra vez:
Arriba blanco con valor 2, derecha pared, abajo tiene valor 1, izquierda pared, pues le vas a la casilla con menor valor, en este caso la de abajo. (Vuelves a estar en la posición inicial)

Otra vez:
Arriba blanco con valor 2, derecha pared, abajo está blanco con valor 0, izquierda pared, en este caso la casilla con menor valor es la de abajo y continuas por ese camino.





Madre mía, valla tocho, espero que te sirva de algo, si no lo entiendes intento explicarme un poco mejor.
Creo que lo entiendo, tal vez no lo conseguía escribir porque no comprobaba las 4 opciones cada vez. Gracias.
5 respuestas