Eccomi allora ho modificato il programma , ad ogni avvio il tramite una funzione rand mi genera a caso i muri ( anche se devo dirvi che non ho sempre assicurata un'uscita ... anzi a volte manca proprio il percorso ) non riesco però a fare lo stesso con l'uscita , ossia non riesco a farla posizionare a caso nel labirinto.Sapreste aiutarmi? Ho inoltre trovato moltissimi esempi su come trovare l'uscita dal labirinto , credo che userò la regola della mano destra , però non riesco ad implementare questo algoritmo , posto il codice cosi saprete (spero) dirmi meglio : grazie!!! :
codice:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define NRIGHE 18
#define NCOLONNE 18

//int labirinto[NRIGHE][NCOLONNE];
/*
gioco del labirinto
*/



int main()
{

    char opzione;
    int gioca = 1, r=0;
    int errore = 0;
    int labirinto[NRIGHE][NCOLONNE];
    int ext, g=0;
    int i, j;
    int x, y;
    int xUscita, yUscita;
    int xIngresso, yIngresso;
    int xTemp, yTemp;
    int partita, vittoria;
    
    xIngresso = 0;
    yIngresso = 3;//posizione dell'esploratore all'inizio
    //xUscita = rand();
   // yUscita = rand();
    x = xIngresso;
    y = yIngresso;
    
   

    srand ( time(NULL) );                   
   for(i=0; i< NRIGHE; i++){
            for(y=0; y< NCOLONNE; y++){
                     if(i == 0 || i == NRIGHE-1) {labirinto[i][y] = 1;  printf(" %d", labirinto[i][y]);}
                     else
                     if(y == 0 || y == NCOLONNE-1) {labirinto[i][y] = 1;  printf(" %d", labirinto[i][y]);}
                   else{
                       r = ((rand()*9)/*+i*/-y)%2;
                       labirinto[i][y] = r;
                        //g = rand()%2;
                //       labirinto[xUscita][yUscita] = g;
                       printf(" %d", labirinto[i][y]);
                       
                    }
                    	
            }
            printf("\n");
    }
/*int in,ext;
int cal_in(){
     return 0 < in < NRIGHE*NCOLONNE;
}

int cal_ext(){
       return 0 < ext < NRIGHE*NCOLONNE;
}
   //  in = cal_in;
   //  ext = cal_ext;
    
     for(i=1; i< NRIGHE-1; i++){
            for(y=1; y < NCOLONNE-1; y++){
                    if(i+y == in) printf("I"); //mod lab
                    if(i+y == ext) printf("U");// mod lab
            }
     }
*/

  
           sleep(3);
            
            
           
    while(gioca)
    {
        int g=1;
        int uscita;
        vittoria = 0;
        labirinto[x][y] = 1;
        labirinto[xIngresso][yIngresso] = 2;
        x = xIngresso;
        y = yIngresso;
        system("cls");
        printf("\n GIOCO DEL LABIRINTO");
        printf("\n\n\n [n] nuova partita");
        printf("\n [h] istruzioni");
        printf("\n [e] esci dal gioco");
        if (errore)
            printf("\n\n Errore di inserimento! Operazione non consentita!\n\n");
        else
            printf("\n\n\n\n");
        errore = 0;
        printf(" > ");
        fflush(stdin);
        opzione = getche(); //funzione non pienamente standard!!
        switch(tolower(opzione)) //la funzione tolower() trasforma un carattere in minuscolo
        {
            case 'n':
                partita = 1;
                while(partita)
                {
                    system("cls");
                    printf("\n\n");
                    for (i = 0; i < NRIGHE; i++)
                    {
                        for (j = 0; j < NRIGHE; j++)
                        {
                            switch(labirinto[i][j])
                            {
                                case 1:
                                    printf("%c",219);
                                    break;
                                case 2:
                                    printf("%c",4);
                                    break;
                                default:
                                    printf(" ");
                            }
                        }
                            printf("\n");
                    }
                
                 
                                         
                   printf("E");
                    if (vittoria)
                    {
                        printf("\n\n HAI VINTO!\n\n");    
                        system("pause");
                        partita = 0;
                    }
                    else
                    {
                        if (errore)
                            printf("\n\n Errore , sai passare attraverso i muri??\n\n");
                        else
                            printf("\n\n\n\n");
                        errore = 0;
                        printf(" [\'e\': fine, \'a\': sinistra, \'d\': destra, \'w\': su, \'x\': giu] > ");                         
                        fflush(stdin);
                        opzione = getche();
                        switch(tolower(opzione))
                        {
                            case 'a':
                                xTemp = x;
                                yTemp = y - 1;
                                break;
                            case 'd':
                                xTemp = x;
                                yTemp = y + 1;
                                break;
                            case 'w':
                                xTemp = x - 1;
                                yTemp = y;
                                break;
                            case 'x':
                                xTemp = x + 1;
                                yTemp = y;
                                break;
                            case 'e':
                                partita = 0;
                                break;
                            default:
                                errore = 1;
                        }
                        if (!errore && partita)
                        {
                            if (xTemp >= 0 && xTemp < NRIGHE && yTemp >= 0 && yTemp < NCOLONNE && labirinto[xTemp][yTemp] == 0)
                            {
                                labirinto[x][y] = 0;
                                labirinto[xTemp][yTemp] = 2;
                                x = xTemp;
                                y = yTemp;
                                vittoria = 0;
                                if (x == xUscita && y == yUscita)
                                    vittoria = 1;
                            }
                            else
                                errore = 1;    
                        }
                    }    
                }
                break;
            case 'h':
                system("cls");
                printf("\n HELP DEL GIOCO");
                printf("\n [a] muovi a sinistra");                
                printf("\n [d] muovi a destra");                
                printf("\n [w] muovi in alto");                
                printf("\n [x] muovi in basso \n\n");                
                system("pause");                
                break;
            case 'e':
                gioca = 0;
                break;
            default:
                errore = 1;
        }    
    }
   
  system("pause"); 
    return 0;
}