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

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
tonyleone (Normal User)
Newbie


Messaggi: 12
Iscritto: 15/02/2015

Segnala al moderatore
Postato alle 21:29
Domenica, 15/02/2015
Salve , ho un problema per quanto riguarda il progetto che mi è stato assegnato per l'esame di programmazione 1, vi riporto in breve il testo dell' esercizio : si considera una scacchiera n x m . La posizione iniziale degli animali è casuale e il loro movimento può avvenire orizzontalmente o verticalmente di un singolo passo . I cani si muovono prima dei gatti e ogni cane va nella direzione del gatto più vicino . i gatti si muovono in modo casuale in una delle 4 direzioni . il gioco finisce quando i cani raggiungono i gatti o quando si arriva ad un numero prefissato di passi .
infine mi chiede di visualizzare le percentuali effettuate dai quattro animali per ogni direzione .
Per quanto riguarda la matrice e l'inserimento casuale degli animali sono riuscito a fare da solo , ora sono completamente bloccato sulla mossa del cane che deve spostarsi verso il gatto più vicino , sono veramente disperato , purtroppo non ho potuto seguire il corso per dei problemi personali , spero che qualcuno di voi mi possa aiutare , ve ne sarei veramente grato .

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 22:33
Domenica, 15/02/2015
Ad ogni cane passi tutti i gatti e colcoli qual'è il gatto più vicino (io proverei a vedere le coordinate della scacchiera come vertici di un triangolo e calcolando l'ipotenusa si gaurda qual'è l'ipotenusa più corta)

PM Quote
Avatar
tonyleone (Normal User)
Newbie


Messaggi: 12
Iscritto: 15/02/2015

Segnala al moderatore
Postato alle 23:38
Domenica, 15/02/2015
questo è il punto in cui sono arrivato io  :
Codice sorgente - presumibilmente C++

  1. /*******************************Inizio Programma********************************/
  2.  
  3. /*
  4. Librerie incluse per l'utilizzo di vare function all'interno del programma.
  5. */
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <time.h>
  9. #include <math.h>
  10.  
  11.  
  12. /*
  13. Prototipi delle funzioni.
  14. */
  15. void StampaScacchiera(char [][8]);
  16. void gattoSu(char [][8],char [], int, int);
  17. void gattoGiu(char [][8],char [], int, int);
  18. void gattoDx(char [][8],char [], int, int);
  19. void gattoSx(char [][8],char [], int, int);
  20.  
  21.  
  22.  
  23. int main()
  24. {
  25.     /*
  26.     Dichiarazione delle variabili.
  27.     */
  28.     int i; /* Contatore per i cicli while.*/
  29.     int posRiga, posCol; /* Variabili utilizzate per riempire la scacchiera in modo pseudo-random*/
  30.     srand(time(NULL)); /* Funzione che inizializza lo pseudo-random. Se non ci fosse, ad ogni avvio del programma
  31.                           la posizione dei pedoni e della regina, sarebbe sempre la stessa.*/
  32.     char colonne[8] = {'a','b','c','d','e','f','g','h'}; /*Dichiarazione e inizializzazione della stringa utilizzata
  33.                                                          per definire le colonne della scacchiera.*/
  34.     char scacchiera[][8] =                    
  35.     {{'b','n','b','n','b','n','b','n'},
  36.     {'n','b','n','b','n','b','n','b'},
  37.     {'b','n','b','n','b','n','b','n'},
  38.     {'n','b','n','b','n','b','n','b'},
  39.     {'b','n','b','n','b','n','b','n'},
  40.     {'n','b','n','b','n','b','n','b'},
  41.     {'b','n','b','n','b','n','b','n'},
  42.     {'n','b','n','b','n','b','n','b'}}; /* Dichiarazione e inizializzazione della scacchiera.*/
  43.     char s;
  44.     i = 0; /* Inizializzazione del contatore.*/
  45.  
  46.     while(i<2)
  47.     {
  48.         posRiga = rand()%8;
  49.         posCol = rand()%8;
  50.  
  51.         if(scacchiera[posRiga][posCol] == 'b' || scacchiera[posRiga][posCol] == 'n')
  52.         {
  53.             scacchiera[posRiga][posCol] = 'G';
  54.             i++;
  55.         }
  56.     } /* Ciclo while: ripete il clclo finchè la condizione resta soddisfatta.
  57.          Posiziona in modo casuale i pedoni nella scacchiera, facendo in modo da non sovrascrivere
  58.          eventuali altri pedoni. Alla fine, il contatore viene autoincrementato.*/
  59.    
  60.     i = 0; /* Il contatore viene nuovamente azzerato in modo da poterlo riutilizzare.*/
  61.  
  62.  
  63.     while(i<1)
  64.     {
  65.         posRiga = rand()%8;
  66.         posCol = rand()%8;
  67.  
  68.         if(scacchiera[posRiga][posCol] == 'b' || scacchiera[posRiga][posCol] == 'n')
  69.         {
  70.             scacchiera[posRiga][posCol] = 'C';
  71.             i++;
  72.         }
  73.     } /* Altro ciclo while: Posiziona in modo casuale il primo cane*/
  74.  
  75.     printf("Cane in %c%d puo' catturare i seguenti gatti: \n\n",colonne[posCol],8-posRiga); /* Stampiamo la posizione della
  76.                                                                                                   regina.*/
  77.     gattoSu(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione PedoneSu.*/
  78.     gattoGiu(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione PedoneGiu.*/
  79.     gattoDx(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione PedoneDx.*/
  80.     gattoSx(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione PedoneSx.*/
  81.  i = 0; /* Il contatore viene nuovamente azzerato in modo da poterlo riutilizzare.*/
  82.  
  83.  
  84.     while(i<1)
  85.     {
  86.         posRiga = rand()%8;
  87.         posCol = rand()%8;
  88.  
  89.         if(scacchiera[posRiga][posCol] == 'b' || scacchiera[posRiga][posCol] == 'n')
  90.         {
  91.             scacchiera[posRiga][posCol] = 'C';
  92.             i++;
  93.         }
  94.     } /* Altro ciclo while: Posiziona in modo casuale il secondo cane.*/
  95.  
  96.     printf("Cane in %c%d puo' catturare i seguenti gatti: \n\n",colonne[posCol],8-posRiga); /* Stampiamo la posizione del cane.*/
  97.     gattoSu(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione gattoSu.*/
  98.     gattoGiu(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione gattoGiu.*/
  99.     gattoDx(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione gattoDx.*/
  100.     gattoSx(scacchiera,colonne,posRiga,posCol);/* Richiamo della funzione gattoeSx.*/
  101.  
  102.     StampaScacchiera(scacchiera);/* Richiamo della funzione StampaScacchiera*/
  103.    
  104.     system("pause"); /* Dato che sto utilizzando un ambiente di sviluppo Dev, mi è
  105.                         opportuno inserire questo comando in quanto, senza di esso, la finestra di MS-DOS
  106.                         che si apre all'avvio del programma, si chiuderebbe.*/
  107. }
  108.  
  109. /*Inizio funzione*/
  110. void StampaScacchiera(char scacchiera[][8]) /* Funzione StampaScacchiera, a cui passiamo la matrice "scacchiera" di tipo char.*/
  111. {
  112.     int i,j; /* Dichiarazione di due variabili interne alla funzione, quindi locali ad essa.*/
  113.  
  114.     printf("\n"); /*"Stampa" un rigo vuoto*/
  115.     printf("   a b c d e f g h\n\n"); /*Stampa ciò che viene scritto tra le parentesi, e va a capo due volte.*/
  116.     for(i=0;i<8;i++) /*Ciclo for: inizializza la variabile i, la incrementa ad ogni ciclo fatto, e si ferma quando
  117.                              l'indice raggiunge il valore "8".*/
  118.     {
  119.         printf("%d ",8-i);
  120.         for(j=0;j<8;j++) /*Ciclo for innestato.*/
  121.         {
  122.             printf(" %c", scacchiera[i][j]);
  123.            
  124.         }
  125.         printf("\n");
  126.     }
  127. } /*La funzione, stampa la scacchiera completa.*/
  128. /*Fine funzione.*/
  129.  
  130. void gattoSu(char scacchiera[][8], char colonne[], int posRiga, int posCol){
  131.    
  132.    int i = posRiga;
  133.    int gattoTrovato = 0;
  134.    
  135.    while(i >= 0 && gattoTrovato == 0){
  136.      
  137.       if(scacchiera[i][posCol] == 'G'){
  138.          printf("Gatto in %c%d\n", colonne[posCol], 8 - i);
  139.          gattoTrovato = 1;
  140.       }
  141.       else
  142.          i--;
  143.    }
  144. }
  145.  
  146. void gattoGiu(char scacchiera[][8], char colonne[], int posRiga, int posCol){
  147.    
  148.    int i = posRiga;
  149.    int gattoTrovato = 0;
  150.    
  151.    while(i < 8 && gattoTrovato == 0){
  152.      
  153.       if(scacchiera[i][posCol] == 'G'){
  154.          printf("Gatto in %c%d\n", colonne[posCol], 8 - i);
  155.          gattoTrovato = 1;
  156.       }
  157.       else
  158.          i++;
  159.    }
  160. }
  161.  
  162. void gattoDx(char scacchiera[][8], char colonne[], int posRiga, int posCol){
  163.  
  164.    int i = posCol;
  165.    int gattoTrovato = 0;
  166.    
  167.    while(i < 8 && gattoTrovato == 0){
  168.      
  169.       if(scacchiera[posRiga][i] == 'G'){
  170.          printf("Gatto in %c%d\n\n", colonne[i], 8 - posRiga);
  171.          gattoTrovato = 1;
  172.       }
  173.       else
  174.          i++;
  175.    }
  176. }
  177.  
  178. void gattoSx(char scacchiera[][8], char colonne[], int posRiga, int posCol){
  179.    
  180.    int i = posCol;
  181.    int gattoTrovato = 0;
  182.    
  183.    while(i >= 0 && gattoTrovato == 0){
  184.      
  185.       if(scacchiera[posRiga][i] == 'G'){
  186.          printf("Gatto in %c%d\n\n", colonne[i], 8 - posRiga);
  187.          gattoTrovato = 1;
  188.       }
  189.       else
  190.          i--;
  191.    }
  192. }


Ultima modifica effettuata da tonyleone il 15/02/2015 alle 23:47
PM Quote
Avatar
tonyleone (Normal User)
Newbie


Messaggi: 12
Iscritto: 15/02/2015

Segnala al moderatore
Postato alle 23:41
Domenica, 15/02/2015
Questo algoritmo riesce a dirmi quale gatto è possibile catturare e da quale cane,solo che ora mi manca proprio il procedimento tramite il quale il cane si avvicini al gatto più vicino e in contemporanea il gatto dovrebbe allontanarsi tutto ciò contando i passi che ogni cane effettua , per i passi potrei risolvere con un contatore il problema lo riscontro proprio nel muovere fisicamente il cane

PM Quote
Avatar
tonyleone (Normal User)
Newbie


Messaggi: 12
Iscritto: 15/02/2015

Segnala al moderatore
Postato alle 15:07
Lunedì, 16/02/2015
Ragazzi nessuno può aiutarmi ? non ho moltissimo tempo , grazie ancora

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 15:48
Lunedì, 16/02/2015
Guarda che ti ho già detto cosa dovresti fare, se hai riscontrato dei problemi parla e facci sapere igniorare una presunta soluzione non è una cosa astuta....

PM Quote
Avatar
tonyleone (Normal User)
Newbie


Messaggi: 12
Iscritto: 15/02/2015

Segnala al moderatore
Postato alle 15:55
Lunedì, 16/02/2015
Non ho ignorato la tua soluzione , ci mancherebbe.. ma non l'ho capita ...

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 16:08
Lunedì, 16/02/2015
E quindi hai pensato che non dicendo niente si sarebbe chiarita da sola. Ok Allora, Da quello che vedo hai una scacchiera che è una matrice in cui ci c'è un carattere a cella. Tu quindi farai un ciclo che otterrà la posizione di un cane per volta, e per ogni cane farai un ciclo che controlli la posizione di ogni gatto. La posizione sono i due indici della matrice. A questo punto pensa alla matrice come un grafico con l'asse delle ascisse e delle ordinate e grazie a questo ragionamento pensa che il primo indice sia la coordinata delle ordinate e la seconda delle ascisse. A questo punto hai due punti: un punto che è la coordinata di UN cane (quello che stai controllando al momento) e un punto che è la cordinata di UN gatto (da notare che per ogni cane dovrai controllare N gatti, con N che è il numero dei gatti). Ora basta calcolare la distanza fra i due punti: http://www.youmath.it/formulari/formulari-di-geometria-ana ...

PM Quote
Avatar
tonyleone (Normal User)
Newbie


Messaggi: 12
Iscritto: 15/02/2015

Segnala al moderatore
Postato alle 17:58
Lunedì, 16/02/2015
Si può avere uno pseudo-codice di quello che mi hai appena detto ?

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