#include #include #ifdef PALINUX #include #define gotoxy(A,B) (move(B,A)) #define putch(A) (addch(A), refresh()) #else #include #endif #define TAMAX 60 #define TAMAY 25 typedef enum {FALSO,CIERTO} logico; typedef enum { LIBRE, MURO, SALIDA, VISITADO } TipoPosiciones; TipoPosiciones T [TAMAX][TAMAY]; int xold, yold; /* Funcion para pasar el rato */ void pausa ( int num ) { int i,i1,i2,i3,i4,i5; double sum; for (i = 0; i < num ; i ++) for (i1= 0; i1 < num ; i1++) for (i2= 0; i2< num ; i2++) for (i3 = 0; i3 < num ; i3 ++) for (i4 = 0; i4 < num ; i4 ++) for (i5 = 0; i5 < num ; i5 ++) { sum = 93.3434 * 454.34e-2; } } logico BuscarSalida ( int x, int y ) { if ( ( (x >= 0) && (x < TAMAX) ) && (( y >= 0) && (y < TAMAY )) ) { if ( T[x][y] == SALIDA ) { xold =x; yold =y; return TRUE; } else { // Es el muro if ( (T[x][y] == MURO) || (T[x][y] == VISITADO) ) { return FALSE; } else { T[x][y] = VISITADO; //gotoxy(xold+10, yold+1); putch(' '); xold = x; yold = y; gotoxy(x+10,y+1); putch('.'); pausa(10); return BuscarSalida( x+1, y ) || BuscarSalida( x-1, y ) || BuscarSalida( x , y-1) || BuscarSalida( x , y+1); } } } else { // Posición fuera del tablero return FALSE; } } void CrearTablero ( int porcentaje ) { int i,j; /* Fijo los bordes como MURO */ for (i=0; i < TAMAY ; i++ ) { T[0][i]= MURO; T[TAMAX -1][i] = MURO; } for (i=0; i < TAMAX ; i++ ) { T[i][0] = MURO; T[i][TAMAY -1 ] = MURO; } for (i=1; i < TAMAX-1; i++ ) for (j=1; j < TAMAY-1; j++ ) { #ifdef PALINUX if ( (random()%100) <= porcentaje ) #else if ( random(100) <= porcentaje ) #endif T[i][j]= MURO; else T[i][j]= LIBRE; } // Fijo la salida: #ifdef PALINUX T[random()%TAMAX][random()%TAMAY] = SALIDA; #else T[random(TAMAX)][random(TAMAY)] = SALIDA; #endif } void VerTablero () { int i,j; for (i=0; i < TAMAX; i++ ) for (j=0; j < TAMAY; j++ ) { switch ( T[i][j] ) { case MURO :gotoxy(i+10,j+1); putch('#');break; case LIBRE :gotoxy(i+10,j+1); putch(' ');break; case SALIDA:gotoxy(i+10,j+1); putch('S');break; } } for (i=1; i < TAMAY+1 ; i++ ) { gotoxy(10,i); putch('|'); gotoxy(10+TAMAX,i); putch('|'); } for (i=1; i < TAMAX ; i++ ) { gotoxy(i+10,1); putch('-'); gotoxy(i+10,TAMAY); putch('-'); } } int main () { int resu; int c; #ifdef PALINUX srandom(time(NULL)); initscr(); erase(); #endif // Crea el tablero con un 35% de Muros CrearTablero(35); VerTablero(); // Fijo la entrada del robot xold = TAMAX/2; yold = TAMAY/2; // Donde estoy no debe haber muro T[xold][yold] = LIBRE; resu = BuscarSalida(TAMAX / 2,TAMAY /2); getchar(); #ifdef PALINUX endwin(); #endif if (resu == 0 ) { puts("No hay salida."); } else { puts("Me escapé"); } }