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++ - Gioco dell'oca
Forum - C/C++ - Gioco dell'oca - Pagina 6

Pagine: [ 1 2 3 4 5 6 ] Precedente | Prossimo
Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Segnala al moderatore
Postato alle 21:14
Giovedì, 26/01/2012
te lo vede minore di 2 perché tu acquisisci un %d, quindi, un numero, per potere confrontare il "-" devi acquisire una stringa o un carattere, poi verificare che non sia "-" per continuare e in tal caso convertirlo ad intero...

PM Quote
Avatar
konan_ 65 (Normal User)
Newbie


Messaggi: 19
Iscritto: 20/12/2011

Segnala al moderatore
Postato alle 23:32
Giovedì, 26/01/2012
ho l'impressione di stare per chiedere una cosa molto stupida, ma come trasformo un carattere in intero?

PM Quote
Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Segnala al moderatore
Postato alle 23:44
Giovedì, 26/01/2012
per convertire un singolo carattere ad un numero, basta fare:
Codice sorgente - presumibilmente C/C++

  1. char carattere='5';
  2. int numero=carattere-48;


gli interi e i char vengono trattati nello stesso modo, per cui in base alla tabella ascii(dove lo 0 equivale al carattere numero 48), basta eseguire l'operazione di sopra...

se invece devi convertire una stringa ad un intero puoi usare atoi(http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/)

PM Quote
Avatar
konan_ 65 (Normal User)
Newbie


Messaggi: 19
Iscritto: 20/12/2011

Segnala al moderatore
Postato alle 0:01
Venerdì, 27/01/2012
ok, ho ufficialmente finito!! grazie mille per l'aiuto! senza non ci sarei riuscito!
posto il codice completo, non sia mai dovesse servire a qualcuno in futuro, o semplicemente qualcuno voglia farci una partita!!

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define COSTANTE 20
  5. #define RIGHE 8
  6. #define COLONNE 8
  7.  
  8. struct gioc{
  9.     char giocatore[COSTANTE];
  10.     int flagCasa;
  11.     int turnoCasa;
  12.     int tiri;
  13. } giocatori[4];
  14.  
  15. void inizioGioco();
  16. void compilaVariabili();
  17. void fase2();
  18. void domanda();
  19. void lancioDado();
  20. void speciali();
  21. void casa();
  22. void pozzo();
  23. void prigione();
  24. void oca();
  25. void ponte();
  26. void labirinto();
  27. void superato();
  28. void vittoria();
  29. void nuovaPartita();
  30.  
  31. char risposta;
  32. int turno;
  33. int numeroGiocatori;
  34. int dado;
  35. int i;
  36. int j;
  37. int r;
  38. int c;
  39. int flagVittoria;
  40.  
  41. main()
  42. {
  43.     printf("Gioco Dell\'Oca\n");
  44.     // Cilo per rendere il gioco infinito
  45.     while (1){
  46.         inizioGioco();      
  47.         // Controllo vittoria
  48.         while(giocatori[i].tiri < 63){
  49.             if(flagVittoria == 0){
  50.                 fase2();
  51.                 // Ciclo for per far giocare i vari giocatori
  52.                 for (i=0; i<numeroGiocatori; i++){
  53.                     domanda();
  54.                     // Controllo che il flag che controlla le caselle speciali sia attivo o meno
  55.                     if (giocatori[i].flagCasa == 1){
  56.                         speciali();
  57.                     }
  58.                     else{//Se il flag casa è positivo
  59.                         lancioDado();
  60.                         speciali();
  61.                         // Stampa posizione
  62.                         printf("%s si trova nella casella %d\n\n",giocatori[i].giocatore,giocatori[i].tiri);
  63.                     }  
  64.                     if (giocatori[i].tiri == 63){// Controllo vittoria
  65.                         vittoria();
  66.                     }            
  67.                 }  
  68.             }
  69.             else{
  70.                 break;
  71.             }    
  72.         }
  73.     nuovaPartita();          
  74.     }
  75.     system("pause");
  76.     return 0;
  77. }  
  78.  
  79. /*inizioGioco()
  80. funzione che svolge le fasi preliminari del gioco, facendo scegliere il numero dei giocatori, compreso tra un minimo di 2 giocatori
  81. e un massimo variabile in base ad una costante precedentemente dichiarata.
  82. in caso di numero di giocatori non immesso, oppure minore o maggiore del dovuto, fa ripetere l'operazione, in caso di pressione del
  83. tasto - fa uscire dal gioco*/
  84. void inizioGioco()
  85. {
  86.     char numeroGiocatori1;
  87.     turno = 1;
  88.     flagVittoria = 0;
  89.     do{
  90.         printf("Inserire il numero di giocatori e premere INVIO (Min 2, Max %d): ", COSTANTE);
  91.         fflush(stdin);
  92.         scanf("%c", &numeroGiocatori1);
  93.         if(numeroGiocatori1 != '-'){
  94.             numeroGiocatori = numeroGiocatori1-48;
  95.             if (numeroGiocatori > COSTANTE){
  96.                  printf("Si prega di inserire un numero di giocatori minore di %d\n", COSTANTE);
  97.              }
  98.              else if(numeroGiocatori<2){
  99.                  printf("Si prega di inserire almeno 2 giocatori\n");
  100.              }    
  101.         }
  102.         else{
  103.             exit(0);
  104.         }            
  105.     }while(numeroGiocatori<2 || numeroGiocatori>COSTANTE);    
  106.     // Compilazione delle variabili
  107.     compilaVariabili();
  108. }  
  109.  
  110. /*compilaVariabili
  111. funzione che si occupa di compilare tutte le variabili relative ai vari giocatori, per quanto riguarda il nome dei giocatori,
  112. in caso di nome non immesso, o uguale a quello di un'altro giocatore, fa ripetere l'immissione*/
  113. void compilaVariabili()
  114. {
  115.     char ch;
  116.     for (i=0; i<numeroGiocatori; i++){
  117.         printf("\nInserisci un nome per il Giocatore %d (massimo %d caratteri),\npremi INVIO per confermare o - per uscire:\n", i+1, COSTANTE);
  118.         c=0;
  119.        
  120.         do{
  121.             while((ch=getche()) != '\n' && ch != '\r' && c<COSTANTE){
  122.                 if (ch == '-'){
  123.                     exit(0);
  124.                     system("pause");
  125.                 }    
  126.                 giocatori[i].giocatore[c++] = ch;
  127.             }
  128.             if(c==0){
  129.                 printf("Non hai inserito alcun nome per il giocatore %d\n", i+1);
  130.             }
  131.             for(j=i-1;j>=0;j--){
  132.                 if(strcmp(giocatori[i].giocatore,giocatori[j].giocatore)==0){
  133.                     printf("Hai inserito lo stesso nome di un altro giocatore, riprova!\n");
  134.                     j=-1;
  135.                     c=0;
  136.                 }
  137.             }
  138.         }while(c==0);
  139.         giocatori[i].giocatore[c] = '\0';        
  140.         giocatori[i].flagCasa = 0;
  141.         giocatori[i].tiri = 0;
  142.         giocatori[i].turnoCasa = 0;
  143.     }
  144. }    
  145.  
  146. /*fase2()
  147. funzione entro la quale viene svolta la stampa del turno e del campo di gioco con la posizione dei giocatori*/
  148. void fase2()
  149. {
  150.     printf("Turno %d\n", turno);
  151.     turno++;
  152.     //Stampa campo
  153.     int flagCiclo=0;
  154.     int numero = 0;
  155.     int campo[RIGHE][COLONNE];
  156.     //Creazione campo
  157.      for (r=0; r<RIGHE; r++){
  158.          for (c=0; c<COLONNE; c++){
  159.              campo[r][c] = numero;
  160.              ++numero;
  161.          }
  162.      }    
  163.    
  164.     //Stampa Campo
  165.     for (r=0; r<RIGHE; r++){
  166.         printf("\n");
  167.         for (c=0; c<COLONNE; c++){
  168.             for (i=0; i<numeroGiocatori; i++){
  169.                 if (giocatori[i].tiri == campo[r][c]){
  170.                     printf("%7s", giocatori[i].giocatore);
  171.                     flagCiclo=1;
  172.                 }
  173.                 else if(i==numeroGiocatori-1&&flagCiclo==0){
  174.                     printf("%7d", campo[r][c]);
  175.                 }
  176.             }
  177.             flagCiclo=0;
  178.         }
  179.     }
  180. }
  181.  
  182. /*domanda
  183. funzione che chiede ogni turno se il giocatore vuole continuare il gioco o uscire*/
  184. void domanda()
  185. {
  186.     do{
  187.         printf("\n");
  188.         printf("Tocca a %s\nCominciare il turno o uscire? (C/E)\n", giocatori[i].giocatore);
  189.         fflush(stdin);
  190.         scanf("%c", &risposta);
  191.         if(risposta == 'C' || risposta == 'c'){
  192.             printf("%s inizia!\n", giocatori[i].giocatore);  
  193.             return;          
  194.         }  
  195.         else if(risposta == 'E' || risposta == 'e'){
  196.             exit(1);
  197.         }
  198.         else{
  199.             printf("Il carattere inserito e' diverso sia da C che da E, si prega di riprovare\n");
  200.         }    
  201.     }while(risposta != 'E' || risposta != 'e' || risposta != 'C' || risposta != 'c');  
  202. }
  203.  
  204. /*lancioDado
  205. funzione che viene utilizzata per ricreare il lancio di un dado*/
  206. void lancioDado()
  207. {
  208.     dado = 0;
  209.     srand(time(NULL));
  210.     dado = rand() % 6;
  211.     dado++;
  212.     printf("Il lancio del dado ha prodotto la faccia %d\n",dado);
  213.     // Spostamento giocatore
  214.     giocatori[i].tiri = giocatori[i].tiri + dado;
  215. }    
  216.  
  217. /*speciali
  218. Funzione che controlla se un giocatore sia finito o meno in una casella speciale e lo reindirizza alla funzione corrispondente alla casella*/
  219. void speciali()
  220. {
  221.     //Controllo casella Casa
  222.     if (giocatori[i].tiri == 19){
  223.         casa();
  224.     }    
  225.     else if(giocatori[i].tiri == 39){//Controllo casella pozzo
  226.         pozzo();
  227.     }    
  228.     else if (giocatori[i].tiri == 52){//Controllo casella prigione
  229.         prigione();
  230.     }    
  231.     //Controllo caselle oca
  232.     for(r=5; r<63; r=r+9){
  233.         for(c=9; c<63; c=c+9){
  234.             if(giocatori[i].tiri == r || giocatori[i].tiri ==c){
  235.                 oca();
  236.             }
  237.         }    
  238.     }  
  239.     if (giocatori[i].tiri == 6){//Controllo casella Il Ponte
  240.         ponte();
  241.     }    
  242.     else if (giocatori[i].tiri == 42){// Controllo casella Labirinto
  243.         labirinto();
  244.     }    
  245.     else if (giocatori[i].tiri > 63){// Controllo eccedenza
  246.         superato();
  247.     }    
  248.    
  249. }              
  250.    
  251. /*casa
  252. funzione che, in caso si finisca nella casella casa attiva un contatore di turni da passare dentro la casella, e finiti questi
  253. libera il giocatore prigioniero*/
  254. void casa()
  255. {
  256.     giocatori[i].flagCasa = 1;
  257.     printf("Casella %d\nCasella speciale La Casa\nCi rimani 3 turni!\n", giocatori[i].tiri);
  258.      ++giocatori[i].turnoCasa;
  259.      if (giocatori[i].turnoCasa == 4){
  260.          printf("Al prossimo turno sei libero dalla casa!\n");
  261.          giocatori[i].turnoCasa = 0;
  262.          giocatori[i].flagCasa = 0;
  263.      }
  264.      else{
  265.          printf("Hai ancora %d turni nella Casa!\n", 4-giocatori[i].turnoCasa);
  266.      }    
  267. }    
  268.  
  269. /*pozzo
  270. funzione che controllo i giocatori finiti nella casella pozzo, nel caso ci finisca un giocatore lo tiene dentro la casella
  271. fino a quando qualcuno non prende il suo posto*/
  272. void pozzo()
  273. {
  274.     giocatori[i].flagCasa = 1;
  275.     printf("Casella %d\nCasella speciale Il Pozzo!\nCi rimani fino a quando un altro giocatore non prende il tuo posto!\n", giocatori[i].tiri);
  276.     for (r=0; r<numeroGiocatori && r!=i; r++){
  277.         for (c=numeroGiocatori && c!=i; c>0; c--){
  278.             if (giocatori[i].tiri == giocatori[r].tiri || giocatori[i].tiri == giocatori[c].tiri){
  279.                 printf("Sei libero dal pozzo!\n");
  280.                 giocatori[i].flagCasa = 0;
  281.             }
  282.             else{
  283.                 printf("Sei ancora nel pozzo, ci rimani fino a quando qualcuno non prende il tuo posto!\n");
  284.             }
  285.         }
  286.     }    
  287. }    
  288.  
  289. /*prigione
  290. funzione che controllo i giocatori finiti nella casella prigione, nel caso ci finisca un giocatore lo tiene dentro la casella
  291. fino a quando qualcuno non prende il suo posto*/
  292. void prigione()
  293. {
  294.     giocatori[i].flagCasa = 1;
  295.     printf("Casella %d\nCasella speciale Prigione!\n", giocatori[i].tiri);
  296.     for (r=0; r<numeroGiocatori && r!=i; r++){
  297.         for (c=numeroGiocatori && c!=i; c>0; c--){
  298.             if (giocatori[i].tiri == giocatori[r].tiri || giocatori[i].tiri == giocatori[c].tiri){
  299.                 printf("Sei fuori dalla prigione!\n");
  300.                 giocatori[i].flagCasa = 0;
  301.             }
  302.             else{
  303.                 printf("Ci rimani fino a quando qualcuno non prende il tuo posto!\n");
  304.             }    
  305.         }    
  306.     }    
  307. }    
  308.          
  309. /*oca
  310. funzione che gestisce le caselle oca facendo avanzare il giocatore finito su una di queste caselle del numero precedentemente fatto
  311. con il lancio dei dadi*/
  312. void oca()
  313. {
  314.     printf("Casella %d\nCasella speciale Oca!\n%s si muove nuovamente del tiro prima effettuato!\n",giocatori[i].tiri, giocatori[i].giocatore);
  315.     giocatori[i].tiri = giocatori[i].tiri + dado;
  316.     if (giocatori[i].tiri == 39 || giocatori[i].tiri == 19 || giocatori[i].tiri == 52){
  317.         giocatori[i].flagCasa = 1;
  318.     }    
  319.     //printf("%s si trova nella casella numero %d\n",giocatori[i].giocatore, giocatori[i].tiri);
  320. }              
  321.  
  322. /*ponte
  323. funzione che gestisce la caselle ponte facendo avanzare il giocatore finito su quesae caselle del numero precedentemente fatto
  324. con il lancio dei dadi*/
  325. void ponte()
  326. {
  327.     printf("Casella %d\nCasella speciale Il Ponte!\n%s si muove nuovamente del tiro prima effettuato!\n",giocatori[i].tiri, giocatori[i].giocatore);
  328.     giocatori[i].tiri = giocatori[i].tiri + dado;
  329.     if (giocatori[i].tiri == 39 || giocatori[i].tiri == 19 || giocatori[i].tiri == 52){
  330.         giocatori[i].flagCasa = 1;
  331.     }
  332.     //printf("%s si trova nella casella numero %d\n", giocatori[i].giocatore, giocatori[i].tiri);
  333. }    
  334.  
  335. /*labirinto
  336. funzione che gestisce la casella labirinto, portando il giocatore che ci finisce sopra nuovamente nella casella 1*/
  337. void labirinto()
  338. {
  339.     printf("Casella %d\nCasella speciale Labirinto!\n%s ritorna alla casella 39, Il Pozzo!\nRimanici fino a quando qualcuno non prende il tuo posto!\n", giocatori[i].tiri, giocatori[i].giocatore);
  340.     giocatori[i].tiri = 39;
  341.     giocatori[i].flagCasa = 1;
  342. }    
  343.  
  344. /*superato
  345. funzione che gestisce i lanci del dado che farebero superare la casella 63, facendo tornare indietro un giocatore che con un lancio
  346. supera la casella 63*/
  347. void superato()
  348. {
  349.     int eccedenza;
  350.     eccedenza = giocatori[i].tiri-63;
  351.     giocatori[i].tiri=63-eccedenza;
  352.     printf("La casella 63 va raggiunta con un tiro esatto\n%s si trova ora nella casella %d\n", giocatori[i].giocatore, giocatori[i].tiri);
  353. }    
  354.  
  355. /*vittoria
  356. funzione che si attiva in caso di vittoria da parte di un giocatore, e ne dichiara appunto la vittoria, interrompendo così il ciclo
  357. degli altri giocatori*/
  358. void vittoria()
  359. {
  360.     printf("Complimenti %s hai vinto!!\n", giocatori[i].giocatore);
  361.     flagVittoria = 1;
  362. }    
  363.  
  364. /*nuovaPartita
  365. funzione che permette, una volta finita una partita, di cominciarne una nuova senza dover uscire dal gioco,
  366. o eventualmente, se i giocatori lo desiderano, uscire*/
  367. void nuovaPartita()
  368. {
  369.     do{
  370.         printf("Giocare una nuova partita? (S/N)\n");
  371.         fflush(stdin);
  372.         scanf("%c", &risposta);
  373.         if (risposta == 'S' || risposta == 's'){
  374.             printf("Si ricomincia\n");
  375.             return;
  376.         }
  377.         else if (risposta == 'N' || risposta == 'n'){
  378.             exit(1);
  379.         }
  380.         else{
  381.             printf("Il carattere inserito e' diverso sia da S che da N, si prega di riprovare\n");
  382.         }
  383.     }while (risposta != 'N' || risposta != 'n' || risposta != 'S' || risposta != 's');            
  384. }


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