Programacion en C de un laberinto aleatorio.

Iniciado por deluxe95, 1 Diciembre 2015, 23:41 PM

0 Miembros y 1 Visitante están viendo este tema.

deluxe95

Tengo un proyecto en C, no C++, en el que estoy atascado, y es el siguiente: {El laberinto será una cuadrícula, compuesta de celdas que pueden contener o una pared (celda ocupada), o un camino (celda vacía). El tamaño (largo y ancho en celdas) del laberinto lo fijará el usuario al comenzar el juego, con los valores mínimo y máximo que se consideren adecuados. El laberinto se generará de manera aleatoria, creando paredes y caminos, asegurándonos de que habrá siempre una única entrada y
una única salida que deben estar siempre en la misma posición; por ejemplo la entrada en la esquina superior izquierda, y la salida en la inferior derecha. El jugador comenzará la partida siempre posicionado en la entrada, y podrá avanzar hacia izquierda, derecha, arriba o abajo, de una celda cada vez (pero no en diagonal).
El juego indicará tras cada avance del jugador qué celdas de las que le rodean son paredes y cuales camino. Para facilitar el juego, se puede mostrar la posición del jugador en cada momento, indicando la fila y columna. Debe evitar jugadas incorrectas
El juego terminará cuando el jugador llegue a la salida. Se mostrará entonces el nº de jugadas realizadas por el jugador para encontrar la salida y el tiempo empleado.
Estos datos, junto con el tamaño del laberinto resuelto, se guardarán en un archivo de
puntuaciones, que se mostrará a petición del jugador.}


Esto es lo que llevo hecho con mi nivel básico de programación, llevo 1 mes dándolo.


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

int main(int argc, char *argv[]) {
   int i,j,a,b;
   
  printf("dime cuantas filas quieres (como maximo 70 filas)");
  scanf("%d",&a);
  printf("dime cuantas columnas quieres (como maximo 70 columnas)");
  scanf("%d",&b);
   char tabla[a];
   
      for(i=0;i<a;i++)
   { for(j=0;j<b;j++)
     {int o=rand()%10;
     if(o==0)
     { tabla[j]='c';
     }
     else
     { tabla[j]='p';
     }
   
     }
   }
   
   i=0;
    j=0;
   
do
{
   switch(rand()%4)
   {
   
  case 0:
     if(j+1<b)
     { j++;
     
     tabla[j]='c';
     
      
  }
  break;
  case 1:
     if(i+1<a)
     { i++;
      tabla[j]='c';
     
        
     }
   break;
    case 2:
      if(j-1>=0)
      if((i==0 && j!=0) || i!=0)
      {j--;
      tabla[j]='c';
       
      }
      break;
   case 3:
   if(i-1>=0)
   if((j==0 && i!=0)|| j!=0)
      {i--;
      tabla[j]='c';
       }
break;
}
}while((i!=a-2 || j!=b-1)&& (j!=b-2 || i!=a-1));
   //Poner entrada y salida en su sitio fija
tabla[0][0]='E';
tabla[a-1][b-1]='S';
//Mostrar Tabla Final
 

   

   
   for(i=0;i<a;i++)
{    for(j=0;j<b;j++)
     { printf("%c",tabla[j]);
    }
    printf("\n");
}

do

    printf("¿Adonde te quieres mover?");
    scanf("%d",rand()%4);

    switch(rand()%4)
    {
     case 1 :
       if(tabla[j]=='c')
       { if(i+1<a)
        i+1;
      }
       
       else
       {printf("¿Adonde te quieres mover?");
       scanf("%d",rand()%4);
        }
        break;
       case 2 :
       if(tabla[j]=='c')
      {  if(j+1<b)
          j+1;
         }
      else
      {
      printf("¿Adonde te quieres mover?");
       scanf("%d",rand()%4);
      }
       break;
   case 3:
        if(tabla[j]=='c')   
       { if(i-1>=0)
       {if((j==0 && i!=0)|| j!=0)
          i-1;
        }
      }
      else
      { printf("¿Adonde te quieres mover?");
       scanf("%d",rand()%4);
      }
      break;
    case 4:
       if(tabla[j]=='c')
      {
         if(j-1>=0)    
         { if((i==0 && j!=0) || i!=0)
                  j-1;
              }    
      }       
     break;


}
}while(tabla[j]!='S');


system("PAUSE");
   return 0;
}




¿Alguien podría echarme un cable? Un saludo y gracias de antemano.