PDA

Visualizza la versione completa : [C] Generazione di un labirinto con matrici


Lorenzo111
04-04-2011, 12:59
Salve a tutti , dopo un'attenta navigazione su vari siti sono riuscito a scopiazzare e a modificare un labirinto che ho trovato in rete.
Se serve il codice ditemelo che lo incollo..
Ora : fra i vari problemi che ho e che poi vedremo spicca su tutti quello iniziale :
io ho creato un labirinto e funziona..adesso all'avvio del programma devo generare casualmente una matrice (labirinto) NxM con muri perimetrali e K muri sparsi qua e lÓ , questi valori devono essere noti a run-time. Qualcuno saprebbe aiutarmi ? Ho letto qualcosa sulla funziona rand ma non la conosco e non saprei come implementarla...aiutatemi per favore!! :ciauz:

LeleFT
04-04-2011, 13:43
Parti dicendo che il codice lo hai scopiazzato qua e lÓ.
Non dici di aver provato a sviluppare ci˛ che vuoi sviluppare.
Non dici quali sono i problemi che hai riscontrato nello sviluppare qualcosa (se hai provato)
Infine chiedi di aiutarti a fare ci˛ che vuoi ottenere.

Se Ŕ una richiesta di sviluppo codice, posta in "Offro Lavoro / Collaborazione". Qui si discute di problemi di programmazione, non si svolgono lavori su commissione.

Se hai un problema specifico, posta il codice che tu hai sviluppato (Ŕ perfettamente inutile postare il codice sviluppato da terzi e chiedere di intervenire su quello), gli eventuali errori ottenuti o gli eventuali output errati.


Ciao. :ciauz:

Lorenzo111
14-04-2011, 10:12
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!!! :


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

Loading