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.
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.