Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Progetto Scacchiera gioco cani e gatti
Forum - C/C++ - Progetto Scacchiera gioco cani e gatti - Pagina 2

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 18:43
Lunedì, 16/02/2015
pseudocodice non ne so scrivere (o meglio, non riusciresti a capirlo probabilmente) quindi te lo scrivo in qualcosa di molsto simile al C

Codice sorgente - presumibilmente C++

  1. for (int i = 0; i < COLONNE_SCACCHIERA; i++)
  2.     for (int j = 0; j < RIGHE_SCACCHIERA; j++)
  3.         if (scacchiera[i][j] == CANE)
  4.         {
  5.             for (int a = 0;a < COLONNE_SCACCHIERA; a++)
  6.             {
  7.                 int distanza_minore = MAX_INT;
  8.                 int colonna_gatto_piu_vicino = -1;
  9.                 int riga_gatto_piu_vicino = -1;
  10.                 if (scacchiera[a][b] == GATTO)
  11.                 {
  12.                     int distanza_cane_attuale_da_gatto_attuale = .............;
  13.                     if (............)
  14.                     {
  15.                      .......................
  16.                     }
  17.                 }
  18.             }
  19.         }



Dovresti aver capito ora, no?

PM Quote
Avatar
tonyleone (Normal User)
Newbie


Messaggi: 12
Iscritto: 15/02/2015

Segnala al moderatore
Postato alle 19:44
Lunedì, 16/02/2015
Ora mi è più chiaro , domani riprovo a mettere tutto insieme , ti ringrazio infinitamente , non sai quante difficoltà per sostenere questi esami .. hai un recapito sul quale posso disturbarti in caso di problemi  ? Non so skype o qualcosa del genere visto che sei l'unico che mi sta aiutando , ti ringrazio ancora

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 20:47
Lunedì, 16/02/2015
Sono contro a queste cose: questo è un problema che potrebbero avere altre persone, se io ti rispondessi in privato le persone che in futuro avranno questo problema non avranno una risposta. Quanto ti darebbe fastidio trovare un thread di 3 anni fa con il tuo problema, leggere che è stato risolto privatamente e che l'unica cosa che hai è una email che probabilmente non viene più controllata?

PM Quote
Avatar
tonyleone (Normal User)
Newbie


Messaggi: 12
Iscritto: 15/02/2015

Segnala al moderatore
Postato alle 17:31
Martedì, 17/02/2015
Ok perdonami allora , era per rendere il tutto più veloce , ovviamente alla fine avrei postato il risultato finale senza alcuni problemi , sto lavorando a ciò che mi hai spiegato tu , entro stasera spero di riuscire a postare i risultati

PM Quote
Avatar
tonyleone (Normal User)
Newbie


Messaggi: 12
Iscritto: 15/02/2015

Segnala al moderatore
Postato alle 20:10
Martedì, 17/02/2015
Altra domanda : conviene usare le struct ?

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 21:19
Martedì, 17/02/2015
Dove e per cosa? Alla fine se usi una struct non risparmi spazio, aumenti la chiarezza. Se hai bisogno o vedi che ti conviene usare un nuovo tipo usi una struct.

Non è solo questione di risultato: la conversazione può includere risposte a domande esempio quella sulle struct. Se avessi postato solo il risultato finale la domanda sulle struct e la sua risponsta non sarebbero di dominio pubblico, e una persona con lo stesso problema che si sarebbe chiesta "conviene usare le struct ?" non avrebbe avuto una risposta. Comunque in privato non sono più veloce a rispondere, anzi......

PM Quote
Avatar
tonyleone (Normal User)
Newbie


Messaggi: 12
Iscritto: 15/02/2015

Segnala al moderatore
Postato alle 1:54
Mercoledì, 18/02/2015
Seguendo un algoritmo simile al mio spiegato dal  prof sono arrivato a questo punto , purtroppo non riesco nella stesura corretta del codice procedimento spiegato per il calcolo della distanza .. :(
Codice sorgente - presumibilmente C#

  1. #include<stdio.h>//header file che consente le varie operazioni di input e output
  2. #include<stdlib.h>//header file che consente l'uso di rand, srand e di RAND_MAX
  3. #include<time.h>//fornisce un accesso standardizzato alle funzioni di acquisizione e manipolazione del tempo.
  4.  
  5. #define MAX_SIZE  16//dimensione massima delle righe e delle colonne dell'array2D
  6.  
  7. /*Algoritmo per la simulazione del movimento di un robot in una stanza
  8. La legge con cui il robot si muove è la seguente: nel 30% dei casi il robot si muove
  9. a caso in una delle quattro caselle vicine possibili(parete permettendo); nel 70% dei casi
  10. il robot prima "vede" e individua la direzione(avanti,indietro,sinistra,destra) del movimento
  11. e poi si muove in quella  direzione
  12. */
  13.  
  14. typedef struct animali {
  15.    int nx;
  16.    int ny;
  17. }robot;
  18. animali r;
  19.  
  20.  
  21.  
  22.  
  23.  
  24. //prototipo di funzioni
  25. void inserisci_cane(char stanza[][MAX_SIZE]);
  26.  
  27. void visualizza_stanza(char stanza[][MAX_SIZE]);
  28. void movimento_casuale(char stanza[][MAX_SIZE]);
  29. void movimento_intelligente(char stanza[][MAX_SIZE]);
  30. int max_array(int arr[]);
  31.  
  32. int main()
  33. {
  34.    int nc;
  35.    char stanza[MAX_SIZE][MAX_SIZE]={' ','',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  36.                             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  37.                             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  38.                             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  39.                             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  40.                             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  41.                             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  42.                             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  43.                               ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  44.                             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  45.                             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  46.                             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  47.                             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  48.                             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  49.                             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  50.                             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
  51.                            }   ;
  52.    inserisci_cane(stanza);
  53.      
  54.    srand((unsigned int)time(0));
  55.    
  56.    while((r.nx>=0 && r.nx<MAX_SIZE) && (r.ny>=0 && r.ny<MAX_SIZE))//ciclo ripetuto finchè il robot resta all'interno alla stanza
  57.    {
  58.          visualizza_stanza(stanza);
  59.          printf("RIGA=%d\t COLONNA=%d\n",r.nx,r.ny);
  60.          nc=rand()%10;
  61.       if(nc>=0 && nc<3)
  62.          movimento_casuale(stanza);
  63.       else
  64.          movimento_intelligente(stanza);
  65.            system("PAUSE");      
  66.    }
  67.    printf("\nIl robot e' uscito dalla stanza\n");
  68.    visualizza_stanza(stanza);
  69. }
  70.  
  71. /*inserisci_robot: procedura per inserire il robot all'interno della stanza tramite coordinate
  72. input: stanza[][] (array 2D che rappresenta la stanza;servirà per inserire il robot,
  73. sempre se in una certa posizione è possibile)
  74. */
  75. void inserisci_cane(char stanza[][MAX_SIZE])
  76. {
  77.         srand((unsigned int)time(0));
  78.      
  79.      int i;
  80.        /* Il contatore viene nuovamente azzerato in modo da poterlo riutilizzare.*/
  81. i=0;
  82.     while (i<2)
  83.     {
  84.         r.nx = rand()%16;
  85.         r.ny = rand()%16;
  86.  
  87.  
  88.           stanza[r.nx][r.ny]='G';
  89.          printf("ROBOT inserito nella posizione %d,%d,%d\n",r.nx,r.ny);  
  90.          i++;
  91. }
  92.  
  93.        
  94.        i=0;
  95.        while (i<2)
  96.     {
  97.         r.nx = rand()%16;
  98.         r.ny = rand()%16;
  99.  
  100.  
  101.           stanza[r.nx][r.ny]='C';
  102.          printf("ROBOT inserito nella posizione %d,%d\n",r.nx,r.ny);  
  103.          i++;
  104.         }
  105.  
  106.        
  107.  
  108. }
  109.  
  110.  
  111. /*visualizza_stanza: procedura che visualizza sullo schermo l'intera stanza
  112. input: stanza[][] (array 2D che rappresenta la stanza)
  113. */
  114. void visualizza_stanza(char stanza[][MAX_SIZE])
  115. {
  116.    int i,j;
  117.       for(i=0;i<MAX_SIZE;++i)
  118.          {  
  119.             for(j=0;j<MAX_SIZE;++j)
  120.                printf("%c",stanza[i][j]);
  121.             printf("\n");
  122.          }
  123. }
  124.  
  125. /*movimento_casuale: procedura che consente al robot di muoversi in maniera casuale
  126. in una delle quattro caselle vicine
  127. input: stanza[][] (array 2D che rappresenta la stanza)
  128. */
  129. void movimento_casuale(char stanza[][MAX_SIZE])
  130. {
  131.    int nc;
  132.    stanza[r.nx][r.ny]=' ';
  133.    nc=rand()%4;
  134.  
  135.    switch(nc)
  136.    {
  137.       case 0:   r.ny--;   if(stanza[r.nx][r.ny]=='-' && r.ny>=0)r.ny++;        break;//robot verso ovest
  138.       case 1:   r.ny++; if(stanza[r.nx][r.ny]=='-' && r.ny<MAX_SIZE)r.ny--;  break;//robot verso est
  139.       case 2: r.nx--; if(stanza[r.nx][r.ny]=='-')r.nx++;                 break;//robot verso nord
  140.       case 3:   r.nx++;   if(stanza[r.nx][r.ny]=='-')r.nx--;                        //robot verso sud
  141.    }
  142.    if((r.nx>=0 && r.nx<MAX_SIZE) && (r.ny>=0 && r.ny<MAX_SIZE))
  143.       stanza[r.nx][r.ny]='C';  
  144. }
  145.  
  146. /*movimento_intelligente:procedura che conta il numero di caselle libere
  147. in ogni direzione a partire dalla posizione in cui si trova il robot
  148. e sposta il robot scegliendo il percorso possibile più lungo
  149. input:stanza[][] (array 2D che rappresenta la stanza)
  150. */
  151. void movimento_intelligente(char stanza[][MAX_SIZE])
  152. {
  153.            
  154.    int pos[4]={0},i,j,ind_max;
  155.    /*pos[]   = array di 4 elementi che contiene il numero di caselle libere per ogni direzione
  156.          pos[0]=numero di caselle libere verso ovest
  157.          pos[1]=numero di caselle libere verso est
  158.          pos[2]=numero di caselle libere verso nord
  159.          pos[3]=numero di caselle libere verso sud
  160.      ind_max = indice del massimo. Serve per stabilire (tramite switch) in quale locazione dell'array pos vi è il massimo
  161.    */
  162.       j=r.ny;
  163.         while(stanza[r.nx][j-1]!='-' && j>0)
  164.             {
  165.                --j;
  166.                ++pos[0];//caselle libere ovest
  167.             }
  168.       j=r.ny;
  169.         while(stanza[r.nx][j+1]!='-' && j<MAX_SIZE)
  170.             {
  171.                ++j;
  172.                ++pos[1];//caselle libere est
  173.             }
  174.       i=r.nx;
  175.       while(stanza[i-1][r.ny]!='-' && i>0)
  176.             {
  177.                --i;
  178.                ++pos[2];//caselle libere nord
  179.             }
  180.       i=r.nx;
  181.       while(stanza[i+1][r.ny]!='-' && i<MAX_SIZE)
  182.             {
  183.                ++i;
  184.                ++pos[3];//caselle libere sud
  185.             }
  186.             ind_max=max_array(pos);
  187.             stanza[r.nx][r.ny]=' ';
  188.          switch(ind_max)
  189.          {
  190.             case 0:--r.ny; if(stanza[r.nx][r.ny]=='-') ++r.ny;break;//ovest
  191.             case 1:++r.ny; if(stanza[r.nx][r.ny]=='-') --r.ny;break;//est
  192.             case 2:--r.nx; if(stanza[r.nx][r.ny]=='-') ++r.nx;break;//nord
  193.             case 3:++r.nx; if(stanza[r.nx][r.ny]=='-') --r.nx;      //sud
  194.          }
  195.                stanza[r.nx][r.ny]='C';
  196. }
  197.  
  198. /*max_array:function che restituisce l'indice dell'elemento massimo dell'array che riceve in input
  199. input:arr[] = rappresenta l'array pos, il quale contiene il numero di caselle libere per ogni direzione
  200. */
  201. int max_array(int arr[])
  202. {
  203.    int i,max=-1,num_max,ind[4];
  204.    /*ind[]    = array che conterrà gli indici di 1 o più massimi
  205.      num_max  = indica quanti massimi ci sono all'interno dell'array arr[]  
  206.    */
  207.       for(i=0;i<4;++i)
  208.          if(arr[i]>max)
  209.             {
  210.                max=arr[i];
  211.                ind[0]=i;//salva l'indice del massimo nella locazione ind[0]
  212.                num_max=1;
  213.             }
  214.          else
  215.             if(arr[i]==max)
  216.             {
  217.                ind[num_max]=i;
  218.                ++num_max;
  219.             }
  220.  
  221.       if(num_max>1)//se num_max>1 ci sono più massimi, quindi viene restituito un indice a caso tra questi
  222.             {
  223.                max=rand()%num_max;
  224.                return ind[max];
  225.             }
  226.       else
  227.             return  ind[0];//se num_max non risulta maggiore di 1 viene restituito l'indice dell'unico max dell'array                        
  228. }

ovviamente le funzioni del movimento casuale e intelligente sono da modificare , sto letteralmente impazzendo :/

PM Quote
Avatar
tonyleone (Normal User)
Newbie


Messaggi: 12
Iscritto: 15/02/2015

Segnala al moderatore
Postato alle 2:09
Mercoledì, 18/02/2015
Visto che viene stampata la posizione (int) non è possibile fare un confronto in base a questa posizione iniziale per stabilire qual'è il più vicino ?

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo