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

    simulazione del gioco guardia e ladri in un labirinto in C

    Si vuole sviluppare un programma per la simulazione del gioco della guardia e ladro
    in un labirinto.
    La stanza è pavimentata a tasselli quadrati (caselle) ed è dotata di pareti esterne e
    interne come in figura. Si sceglie casualmente la posizione della guardia (blue) e del
    ladro (rosso). Entrambi si muovono di una casella alla volta, scelta tra una delle
    quattro caselle vicine. Il ladro deve uscire dal labirinto e viene guidato dall’utente.
    La guardia cerca di intercettare il ladro in modo tale che conoscendo la sua posizione
    può calcolare lo spostamento minimo per avvicinarsi a lui. Se la traiettoria è ostruita
    da un muro viene presa una direzione casuale.
    La simulazione termina quando il ladro “esce dalla porta” o quando la guardia cattura
    il ladro. L’algoritmo deve visualizzare il percorso del ladro e della guardia dopo ogni
    passo, mostrando la stanza e la posizione dei due (comprimere le figure in modo da
    non aumentare a dismisura il numero di pagine della Relazione).

    L’algoritmo usa la function rand() in stdlib per generare numeri casuali: si
    ricorda che, per esempio, se numero_casuale è un int, la chiamata
    numero_casuale=rand()%11; genera un numero casuale intero (distribuzione
    uniforme) nell’insieme (0,1,2,3,4,5,6,7,8,9,10). Usare sempre la srand() per
    rendere automatica la scelta iniziale del seed della sequenza di numeri casuali.
    Effettuare almeno 5 test, variando la posizione iniziale del robot. Effettuare anche 3
    test cambiando ogni volta la disposizione delle pareti nella stanza e cercando di
    trovare disposizioni critiche delle pareti.

    Io ho fatto questo ma non riesco a trovare un modo per far muovere il ladro, nel senso che ho messo lo switch con i vari casi e le convenzioni da utilizzare solo che non riesco a ristampare la scacchiera con la nuova posizione del ladro. Chi mi può aiutare???? grazie mille anticipatamente.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void guardia(char scacchiera[][16], int nx, int ny);
    void ladro(char scacchiera[][16], int nx, int ny);
    float ladronord( char scacchiera[][16], int nx, int ny);
    void printScacchiera(char scacchiera[][16]);
    /*void ladrosud(char scaccheira[][16], int nx, int ny);
    void ladroest(char scaccheira[][16], int nx, int ny);
    void ladroovest(char scacchiera[][16], int nx, int ny);   
    */
    void main()
    {
         int i,j,nx,ny;
         char scacchiera[16][16]= {
              { 'm','m','m','m','m','m','m','m','m','m','m','m','m','m','m','m'},
              { 'm',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m'},
              { 'm',' ',' ','m',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m'},
              { 'm',' ',' ','m',' ',' ',' ','m','m','m','m','m','m','m','m','m'},	
              { 'm',' ',' ','m',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m'},
              { 'm',' ',' ','m',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m'},
              { 'm',' ',' ','m',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m'},
              { 'm',' ',' ','m',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m'},
              { 'm',' ',' ','m',' ',' ',' ','m',' ',' ',' ',' ',' ',' ',' ','m'},
              { 'm',' ',' ','m',' ',' ',' ','m',' ',' ',' ',' ',' ',' ',' ','m'},
              { 'm',' ',' ',' ',' ',' ',' ','m',' ',' ',' ','m','m','m',' ','m'},
              { '.',' ',' ',' ',' ',' ',' ','m',' ',' ',' ',' ',' ',' ',' ','m'},
              { '.',' ',' ',' ',' ',' ',' ','m',' ',' ',' ',' ',' ',' ',' ','m'},
              { '.',' ',' ',' ',' ',' ',' ','m',' ',' ',' ',' ',' ',' ',' ','m'},
              { 'm',' ',' ',' ',' ',' ',' ','m',' ',' ',' ',' ',' ',' ',' ','m'},
              { 'm','m','m','m','m','m','m','m','m','m','m','m','m','m','m','m'}};
         //scelta automatica del seed
         srand(time(NULL));
         //generazione della posizione del LADRO
         ladro(scacchiera, nx, ny);
          //generazione della posizione della GUARDIA
         guardia(scacchiera, nx, ny);
         //stampa la scacchiera
         printScacchiera(scacchiera);
        
         ladronord(scacchiera,nx,ny);
        
          system("PAUSE");
    }
    
    void ladro(char scacchiera[][16], int nx, int ny)
    {
         int i;
         for (i=0;i<1;i++)//ciclo che viene eseguito una sola volta tanto quanto è la posizione da generare.
         {
         
          /* genera a caso una posizione nella scacchiera 17x17 */
               do
               {
               nx = rand()%17;
               ny = rand()%17;
               }
               while(scacchiera[nx][ny]=='m');
               scacchiera[nx][ny] = 'L';       
          printf("le cordinate del ladro sono %d : %d \n",nx,ny);
          printf("\n\n");
           
          } 
    }
    
    void guardia(char scacchiera[][16], int mx, int my)
    {
         int i;
          for (i=0;i<1;i++)//ciclo che viene eseguito una sola volta tanto quanto è la posizione da generare. 
         {
         
          /* genera a caso una posizione nella scacchiera 17x17 */
               do
               {
               mx = rand()%17;
               my = rand()%17;
               }
               while(scacchiera[mx][my]=='m');
               scacchiera[mx][my] = 'G';       
          printf("le cordinate della guardia sono %d : %d \n",mx,my);
          printf("\n\n");
           
          }
    }
    
    void printScacchiera(char scacchiera[][16])
    {
         int i,j;
             for (i=0;i<16;i++)//visualizzazione della scacchiera
          { 
               for (j=0;j<16;j++)
               printf(" %c",scacchiera[i][j]);
               printf("\n");                  //visualizzazione per riga
          }
    }
    
    
    float ladronord( char scacchiera[][16], int nx, int ny)     //indica il possibile spostamento che l'utente fa fare al ladro
    {
         char p;
         printf("per spostare il ladro occorre premere:\n W = SU \n S = GIU' \n A = SINISTRA \n D = DESTRA\n");
         scanf("%c",&p);
         switch (p)
         {
          case 1:
               if(p == 'w')
               
               nx=nx-1;
               scacchiera[nx][ny] = 'L';
              
               break;
          case 2:
               if(p == 's')
               nx=nx+1;
               ladronord(scacchiera,nx,ny);
               break;
          case 3:
               if(p == 'a')
               ny=ny-1;
               
               break;
          case 4:
               if(p == 'd')
               ny=ny+1;
               
               break;
          }
           printScacchiera(scacchiera);
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ti sei reso conto che hai risposto ad un thread di più di un anno fa?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    si ma bene o male è lo stesso argomento quindi nn sapendo se creare un nuovo posto ho risposto a questo, ho fatto male???

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

    Moderazione

    No, non risollevare discussioni troppo vecchie.
    L'argomento "Gioco Guardia e Ladri" sarà anche stato lo stesso, ma le problematiche poste erano diverse.

    Ho separato in una nuova discussione.


    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

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.