Laberinto recorre por la derecha javascript
script
var mapa=new Array();
mapa[0] = new Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
mapa[1] = new Array(1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1);
mapa[2] = new Array(2,0,1,0,1,0,1,0,1,1,1,0,1,0,0,1,1,1,1,1);
mapa[3] = new Array(1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1);
mapa[4] = new Array(1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1);
mapa[5] = new Array(1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1);
mapa[6] = new Array(1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1);
mapa[7] = new Array(1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,0,0,1);
mapa[8] = new Array(1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1);
mapa[9] = new Array(1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1);
mapa[10] = new Array(1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1);
mapa[11] = new Array(1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,0,1);
mapa[12] = new Array(1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1);
mapa[13] = new Array(1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,1);
mapa[14] = new Array(1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1);
mapa[15] = new Array(1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1);
mapa[16] = new Array(1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1);
mapa[17] = new Array(1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1);
mapa[18] = new Array(1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,3);
mapa[19] = new Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
function Estado(i,j,dir) //Clase para manejar la posición y dirección
{
this.i = i;
this.j = j;
this.dir = dir; //dir: 0=arriba, 1=derecha, 2=abajo, 3=izq
}
function buscar(x) //Busca un valor (número) en el mapa
//Devuelve su posición (Estado) mirando a la derecha.
{
var i,j;
for (i=0;i<20 class="Apple-tab-span" i="" span="" style="white-space: pre;"> 20>
for (j=0;j<20 j="" p=""> 20>
if (mapa[i][j]==x)
return new Estado(i,j,1);
return new Estado(-1,-1,1); //En caso de no encontrar el valor
}
function muestra_mapa() //Muestra mapa completo
//No devuelve nada
{
var i,j;
for (i=0;i<20 class="Apple-tab-span" i="" span="" style="white-space: pre;"> 20>
{
for (j=0;j<20 j="" p=""> 20>
{
if (mapa[i][j]==0)
document.write("
");
if(mapa[i][j]==1)
document.write("
");
if(mapa[i][j]==2)
document.write("
");
if(mapa[i][j]==3)
document.write("
");
}
document.write("
");
}
//Falta crear las siguientes etiquetas HTML
document.write('
'); //Capa para mostrar visualmente donde nos encontramos actualmente
//document.write('
'); //Mensajes de log.
}
function situa_en_mapa(pos) //Situa un objeto en el mapa para ver visualmente por donde se encuentra
//No devuelve nada
{
gusano.style.top=pos.i*30+8;
gusano.style.left=pos.j*30+8;
}
function iniciar() //Inicializa variables y llamamos a recorrer
//No devuelve nada
{
muestra_mapa();
var pos_inicio=buscar(2); //de tipo Estado. Indica dónde se encuentra la entrada
situa_en_mapa(pos_inicio);
var pos_fin=buscar(3); //de tipo Estado. Indica dónde se encuentra la salida
var aux=pos_inicio; //de tipo Estado. Indica la posición actual
setTimeout(recorrer,50,aux); //Comenzamos
}
function recorrer(aux) //Recorremos el mapa paso a paso hasta dar con la salida.
//No devuelve nada, pero hace una llamada recursiva hasta dar con la salida
{
aux=camino(aux);
var pos_fin=buscar(3);
situa_en_mapa(aux);
if ((aux.i!=pos_fin.i) || (aux.j!=pos_fin.j))
setTimeout(recorrer,50,aux); //Llamada recursiva hasta encontrar la meta
}
function camino(aux) //A partir de un Estado
//Devolvemos el siguiente Estado en el mapa
{
var i=aux.i;
var j=aux.j;
var dir=aux.dir;
//dir: 0=arriba, 1=derecha, 2=abajo, 3=izq
if(dir==0){
if(mapa[i][j-1]==0)dir=3; //izquierda
else if(mapa[i-1][j]==0)dir=0;//arriba
else if(mapa[i][j+1]==0)dir=1;//derecha
else if(mapa[i+1][j]==0)dir=2;//abajo
}
if(dir==1){
if(mapa[i-1][j]==0 )dir=0; //izquierda
else if(mapa[i][j+1]==0)dir=1;//arriba
else if(mapa[i+1][j]==0)dir=2;//derecha
else if(mapa[i][j-1]==0)dir=3;//abajo
}
if(dir==2){
if(mapa[i][j+1]==0)dir=1;//izquierda
else if(mapa[i+1][j]==0)dir=2;//arriba
else if(mapa[i][j-1]==0)dir=3;//derecha
else if(mapa[i-1][j]==0)dir=0;//abajo
}
if(dir==3){
if(mapa[i][j+1]==3)dir=1;//final
else if(mapa[i][j-1]==0)dir=3;//arriba
else if(mapa[i+1][j]==0)dir=2;//izquierda
else if(mapa[i-1][j]==0)dir=0;//derecha
else if(mapa[i][j+1]==0)dir=1;//abajo
}
if (dir==0){
i--;
document.getElementById("gusano").src='Arriba.png';
}
if (dir==1){
j++;
document.getElementById("gusano").src='Derecha.png';
}
if (dir==2){
i++;
document.getElementById("gusano").src='Abajo.png';
}
if (dir==3){
j--;
document.getElementById("gusano").src='Izquierda.png';
}
//if ((j<0 i="" j="">19) || (i>19))0>
//return new Estado(aux.i,aux.j,aux.dir); //No nos movemos, porque hemos salido del rango del mapa
//if (mapa[i][j]==0)
return new Estado(i,j,dir); //Devolvemos la posición nueva
msj.innerHTML=i+","+j+",dir:"+dir+"
"+msj.innerHTML; //Mensaje de log.
return new Estado(aux.i,aux.j,aux.dir); //No nos movemos, porque nos hemos chocado.
}
var mapa=new Array();
mapa[0] = new Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
mapa[1] = new Array(1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1);
mapa[2] = new Array(2,0,1,0,1,0,1,0,1,1,1,0,1,0,0,1,1,1,1,1);
mapa[3] = new Array(1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1);
mapa[4] = new Array(1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1);
mapa[5] = new Array(1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1);
mapa[6] = new Array(1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1);
mapa[7] = new Array(1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,0,0,1);
mapa[8] = new Array(1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1);
mapa[9] = new Array(1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1);
mapa[10] = new Array(1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1);
mapa[11] = new Array(1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,0,1);
mapa[12] = new Array(1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1);
mapa[13] = new Array(1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,1);
mapa[14] = new Array(1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1);
mapa[15] = new Array(1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1);
mapa[16] = new Array(1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1);
mapa[17] = new Array(1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1);
mapa[18] = new Array(1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,3);
mapa[19] = new Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
function Estado(i,j,dir) //Clase para manejar la posición y dirección
{
this.i = i;
this.j = j;
this.dir = dir; //dir: 0=arriba, 1=derecha, 2=abajo, 3=izq
}
function buscar(x) //Busca un valor (número) en el mapa
//Devuelve su posición (Estado) mirando a la derecha.
{
var i,j;
for (i=0;i<20 class="Apple-tab-span" i="" span="" style="white-space: pre;"> 20>
for (j=0;j<20 j="" p=""> 20>
if (mapa[i][j]==x)
return new Estado(i,j,1);
return new Estado(-1,-1,1); //En caso de no encontrar el valor
}
function muestra_mapa() //Muestra mapa completo
//No devuelve nada
{
var i,j;
for (i=0;i<20 class="Apple-tab-span" i="" span="" style="white-space: pre;"> 20>
{
for (j=0;j<20 j="" p=""> 20>
{
if (mapa[i][j]==0)
document.write("
![](blanco.png)
if(mapa[i][j]==1)
document.write("
![](pared.png)
if(mapa[i][j]==2)
document.write("
![](entra.png)
if(mapa[i][j]==3)
document.write("
![](fin.png)
}
document.write("
");
}
//Falta crear las siguientes etiquetas HTML
document.write('
![](derecha.png)
//document.write('
}
function situa_en_mapa(pos) //Situa un objeto en el mapa para ver visualmente por donde se encuentra
//No devuelve nada
{
gusano.style.top=pos.i*30+8;
gusano.style.left=pos.j*30+8;
}
function iniciar() //Inicializa variables y llamamos a recorrer
//No devuelve nada
{
muestra_mapa();
var pos_inicio=buscar(2); //de tipo Estado. Indica dónde se encuentra la entrada
situa_en_mapa(pos_inicio);
var pos_fin=buscar(3); //de tipo Estado. Indica dónde se encuentra la salida
var aux=pos_inicio; //de tipo Estado. Indica la posición actual
setTimeout(recorrer,50,aux); //Comenzamos
}
function recorrer(aux) //Recorremos el mapa paso a paso hasta dar con la salida.
//No devuelve nada, pero hace una llamada recursiva hasta dar con la salida
{
aux=camino(aux);
var pos_fin=buscar(3);
situa_en_mapa(aux);
if ((aux.i!=pos_fin.i) || (aux.j!=pos_fin.j))
setTimeout(recorrer,50,aux); //Llamada recursiva hasta encontrar la meta
}
function camino(aux) //A partir de un Estado
//Devolvemos el siguiente Estado en el mapa
{
var i=aux.i;
var j=aux.j;
var dir=aux.dir;
//dir: 0=arriba, 1=derecha, 2=abajo, 3=izq
if(dir==0){
if(mapa[i][j-1]==0)dir=3; //izquierda
else if(mapa[i-1][j]==0)dir=0;//arriba
else if(mapa[i][j+1]==0)dir=1;//derecha
else if(mapa[i+1][j]==0)dir=2;//abajo
}
if(dir==1){
if(mapa[i-1][j]==0 )dir=0; //izquierda
else if(mapa[i][j+1]==0)dir=1;//arriba
else if(mapa[i+1][j]==0)dir=2;//derecha
else if(mapa[i][j-1]==0)dir=3;//abajo
}
if(dir==2){
if(mapa[i][j+1]==0)dir=1;//izquierda
else if(mapa[i+1][j]==0)dir=2;//arriba
else if(mapa[i][j-1]==0)dir=3;//derecha
else if(mapa[i-1][j]==0)dir=0;//abajo
}
if(dir==3){
if(mapa[i][j+1]==3)dir=1;//final
else if(mapa[i][j-1]==0)dir=3;//arriba
else if(mapa[i+1][j]==0)dir=2;//izquierda
else if(mapa[i-1][j]==0)dir=0;//derecha
else if(mapa[i][j+1]==0)dir=1;//abajo
}
if (dir==0){
i--;
document.getElementById("gusano").src='Arriba.png';
}
if (dir==1){
j++;
document.getElementById("gusano").src='Derecha.png';
}
if (dir==2){
i++;
document.getElementById("gusano").src='Abajo.png';
}
if (dir==3){
j--;
document.getElementById("gusano").src='Izquierda.png';
}
//if ((j<0 i="" j="">19) || (i>19))0>
//return new Estado(aux.i,aux.j,aux.dir); //No nos movemos, porque hemos salido del rango del mapa
//if (mapa[i][j]==0)
return new Estado(i,j,dir); //Devolvemos la posición nueva
msj.innerHTML=i+","+j+",dir:"+dir+"
"+msj.innerHTML; //Mensaje de log.
return new Estado(aux.i,aux.j,aux.dir); //No nos movemos, porque nos hemos chocado.
}
Comentarios