Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Labirinto In C - Progetto

    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!!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317

    Moderazione

    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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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

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 © 2025 vBulletin Solutions, Inc. All rights reserved.