Advertisement
Guest User

Tris_matrix

a guest
Mar 29th, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.71 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <windows.h>
  4. using namespace std;
  5. #define size_vet 3
  6. #define null ' '
  7.  
  8.  
  9. /*Pulisci array*/
  10. void wipe(char array[size_vet][size_vet])
  11. {
  12.     for(int i=0; i!=size_vet; ++i)
  13.         for(int j=0; j!=size_vet; ++j)
  14.             array[i][j]=null;
  15. }
  16.  
  17. /*Mostra tabella di tris*/
  18. void stampa(char array[size_vet][size_vet])
  19. {
  20.     int k=0;
  21.     for(int i=0; i!=size_vet; ++i)
  22.     {
  23.         if(i==0) cout<<"-----------------\n";
  24.         for(int j=0; j!=size_vet; ++j)
  25.         {
  26.             ++k;
  27.             cout<<k<<' '<<array[i][j]<<" | ";
  28.         }
  29.         cout<<"\n-----------------\n";
  30.     }
  31. }
  32.  
  33. /*Inserisci posizione*/
  34. bool posizione(vector<int> &pos, int p)
  35. {
  36.     if(p>0 && p<=9)
  37.     {
  38.         for(int i=0; i!=pos.size(); ++i)
  39.         {
  40.             if(pos[i] == p) return true;
  41.         }
  42.     }
  43.     else return true;
  44.     return false;
  45. }
  46.  
  47. /*Inserisci la posizione selezionata nel array*/
  48. void inserisci(char array[size_vet][size_vet], int i, vector<int> &pos)
  49. {
  50.     int p;
  51.     int j=0;
  52.     do{
  53.         if(j==0) cout<<"Inserisci la posizione: ";
  54.         else cout<<"Posizione non disponibile: ";
  55.         ++j;
  56.         cin>>p;
  57.     }while(posizione(pos, p));
  58.    
  59.     pos.push_back(p);
  60.    
  61.     --p;
  62.     if(p<3)
  63.     {
  64.         if(i%2==0) array[0][p]='X';
  65.         else array[0][p]='O';
  66.     }
  67.     else if(p>=3 || p<6)
  68.     {
  69.         p-=3;
  70.        
  71.         if(i%2==0) array[1][p]='X';
  72.         else array[1][p]='O';
  73.     }
  74.     else if(p>=6 || p<9)
  75.     {
  76.         p-=6;
  77.         if( array[2][p] == null )
  78.         if(i%2==0) array[2][p]='X';
  79.         else array[2][p]='O';
  80.     }
  81. }
  82.  
  83. /*Controllo se ha fatto tris. invocato in stop*/
  84. char controllo(char array[size_vet][size_vet])
  85. {
  86.     for(int i=0; i!=size_vet; ++i)
  87.     {
  88.         for(int j=0; j!=size_vet; ++j)
  89.         {
  90.             if(array[i][j]!=' ')
  91.             {
  92.                 /*Controllo orizzontale*/
  93.                 if(array[i][0]!=' ')
  94.                     if(array[i][0]==array[i][1])
  95.                         if(array[i][1]==array[i][2]) return array[i][j];
  96.                
  97.                 /*Controllo diagonale*/
  98.                 if(array[0][0]!=' ')
  99.                     if(array[0][0]==array[1][1])
  100.                         if(array[1][1]==array[2][2]) return array[0][0];
  101.                
  102.                 if(array[0][2]!=' ')
  103.                     if(array[0][2]==array[1][1])
  104.                         if(array[1][1]==array[2][0]) return array[0][2];
  105.                
  106.                 /*Controllo verticale*/
  107.                 if(array[0][i]==array[1][i])
  108.                     if(array[1][i]==array[2][i]) return array[j][i];
  109.             }
  110.         }
  111.     }
  112.     return null;
  113. }
  114.  
  115. /*Termina la partita*/
  116. bool stop(char array[size_vet][size_vet], int i, int *punti)
  117. {
  118.     char c=controllo(array);
  119.     switch(c)
  120.     {
  121.         case 'X':
  122.             cout<<"Giocata finita. Ha vinto: "<<c<<"\n";
  123.             punti[0]++;
  124.             return true;
  125.         case 'O':
  126.             cout<<"Giocata finita. Ha vinto: "<<c<<"\n";
  127.             punti[1]++;
  128.             return true;
  129.         case null:
  130.             return false;
  131.     }
  132.     if(i<10) return false;
  133.     return true;
  134. }
  135.  
  136. void benvenuto(string firm)
  137. {
  138.     for(int i=0; i!=firm.size(); ++i)
  139.         cout<<"  "<<firm[i]<<"\n";
  140. }
  141.  
  142. char riapri()
  143. {
  144.     int i=0;
  145.     char c;
  146.     cout<<"Vuoi ripetere il gioco? Y/N\n";
  147.     do{
  148.         if(i!=0) cout<<"Errore di input. ";
  149.         cin>>c;
  150.         switch(c)
  151.         {
  152.             case 'y':
  153.             case 'Y':
  154.                 return 'Y';
  155.             case 'N':
  156.             case 'n':
  157.                 return 'N';
  158.         }
  159.         ++i;
  160.     }while(true);
  161. }
  162.  
  163. void mostra_punti(int *punti)
  164. {
  165.     cout<<"\nPunti di X: "<<punti[0];
  166.     cout<<"\nPunti di O: "<<punti[1];
  167.     cout<<"\n";
  168. }
  169.  
  170. bool pulisci(int *punti)
  171. {
  172.     char c=riapri();
  173.     if(c=='N')
  174.     {
  175.         cout<<"\nFine gioco!\n";
  176.         mostra_punti(punti);
  177.         cout<<"\n\n";
  178.         return false;
  179.     }
  180.     else if(c=='Y')
  181.     {
  182.         system("cls");
  183.         return true;
  184.     }
  185. }
  186.  
  187. int main()
  188. {
  189.     vector<int> pos;
  190.     int punti[2]={0,0};
  191.     string firm;
  192.     firm="By Peppe";
  193.     int i=0;
  194.     char matrix[size_vet][size_vet];
  195.     benvenuto(firm);
  196.     cout<<"benvenuto nel programma di tris!\n";
  197.     do{
  198.         i=0;
  199.         mostra_punti(punti);
  200.         wipe(matrix);
  201.         stampa(matrix);
  202.         do{
  203.             inserisci(matrix, i, pos);
  204.             stampa(matrix);
  205.             ++i;
  206.         }while(!stop(matrix,i,punti));
  207.         pos.clear();
  208.     }while(pulisci(punti));
  209.     system("PAUSE");
  210.     return 0;
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement