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;
}