Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    26

    [c++] Labirinto random (algoritmo)

    salve a tutti.. sto creando un labirinto "random".. cioè, che ad ogni esecuzione, lo schema del labirinto stesso cambia... sono riuscito a fare lo schema random, ma c'è un problema.. come faccio ad ASSICURARE SOLO (O ALMENO) UNA VIA D USCITA (partendo dall entrata) dal labirinto? non riesco ad implementare un algoritmo adatto... qualcuno ha qualche idea?

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Il labirinto su che struttura dati si appoggia? Un grafo?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    26
    su una matrice char... ho usato alcuni caratteri della tabella ascii estesa per creare i muri.. ma il mio problema è quello... devo assicurare almeno una via d uscita per il labirinto....

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    26
    ecco come risulta la matrice...



    Uploaded with ImageShack.usquello che mi serve ora, è assicurare almeno un percorso calpestabile tra la E(in alto a sx) e la U(in basso a dx)... se volete posso anche postare il codice scritto fino ad ora....

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    26
    nessuno?

  6. #6
    beh se la tua necessità prevede solo di creare una via di uscita, semplicemente prima di costruire il resto del labirinto esegui una funzione che, tramite movimenti random, crea un percorso che non potrà mai essere occupato da muri
    quindi tutte le posizioni del "bordo" tranne quella da cui sei partito e quella in cui sei arrivato diventano per forza muri (Assicuri l'unicità della via ingresso/uscita)
    quindi esegui il tuo algoritmo che costruisce tutto il resto del labirinto (dovrai perciò implementare un modo per far si che questo algoritmo non vada a occupare con dei muri il percorso creato prima)

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    15
    bhe se posti il codice forse qualcosa possimo fare...

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    26
    sto cercando di implementare la funzione che mi ha suggerito Celebron... ma sto incontrando delle difficoltà.. cmq per ora il codice che ho scritto per creare lo schema è questo:

    void disegnaschema(char x[][dim])
    {
    int s=0;
    srand(time(0));
    for(int i=0; i<dim; i++)
    for(int j=0; j<dim; j++)
    {
    if(i==0)
    {
    if(j==0)
    x[i][j]=201; //ANGOLO SUPERIORE SX
    else if(j==dim-1)
    x[i][j]=187; //ANGOLO SUPERIORE DX
    else
    x[i][j]=205; //MARGINE SUPERIORE
    }
    else if(i==dim-1)
    {
    if(j==0)
    x[i][j]=200; //ANGOLO INFERIORE SX
    else if(j==dim-1)
    x[i][j]=188; //ANGOLO INFERIORE DX
    else
    x[i][j]=205; //MARGINE INFERIORE
    }
    else
    {
    if(i==1 && j==0)
    x[i][j]='E'; //ASSEGNA ENTRATA
    else if(i==dim-2 && j==dim-1)
    x[i][j]='U'; //ASSEGNA USCITA
    else if(j==0 || j==dim-1)
    x[i][j]=186; //MARGINI LATERALI
    else
    {
    s=rand()%2;
    if(s==0 && x[i][j]!=' ')
    x[i][j]=' ';
    else if(s==1 && x[i][j]!=' ')
    x[i][j]=186;
    }
    }
    }
    }

    scusate se le righe non sono ben tabulate, ma copiando e incollando, le tabulazioni sono andate perse...

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    26
    ho risolto tutto, cn una bella funzioncina grazie lostesso.. saluti

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da AntoKr
    scusate se le righe non sono ben tabulate, ma copiando e incollando, le tabulazioni sono andate perse...
    Magia!

    codice:
    void disegnaschema(char x[][dim])
    {
    int s=0;
    srand(time(0));
    for(int i=0; i<dim; i++)
    	for(int j=0; j<dim; j++)
    			{
    			if(i==0)
    				{
    				if(j==0)
    					x[i][j]=201;					//ANGOLO SUPERIORE SX
    				else if(j==dim-1)
    					x[i][j]=187;					//ANGOLO SUPERIORE DX
    				else
    					x[i][j]=205;					//MARGINE SUPERIORE
    				}
    			else if(i==dim-1)
    				{
    				if(j==0)
    					x[i][j]=200;					//ANGOLO INFERIORE SX
    				else if(j==dim-1)
    					x[i][j]=188;					//ANGOLO INFERIORE DX
    				else
    					x[i][j]=205;					//MARGINE INFERIORE
    				}
    			else
    				{
    				if(i==1 && j==0)
    					x[i][j]='E';					//ASSEGNA ENTRATA
    				else if(i==dim-2 && j==dim-1)
    					x[i][j]='U';				    //ASSEGNA USCITA
    				else if(j==0 || j==dim-1)
    					x[i][j]=186;					//MARGINI LATERALI
    				else
    					{
    					s=rand()%2;
    					if(s==0 && x[i][j]!=' ')
    						x[i][j]=' ';
    					else if(s==1 && x[i][j]!=' ')
    						x[i][j]=186;
    					}
    				}
    			}
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.