Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2020
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.10 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5. bool err4 = false;
  6.  
  7. struct Pezzo
  8. {
  9.     char tipo;
  10.     char colore;
  11.     int cx;
  12.     int cy;
  13. };
  14. void riempi(const int,string [][9],Pezzo arr[],int j);
  15. void print(const int,string[][9]);
  16. bool errore1(Pezzo arr[],int);
  17. bool errore2(Pezzo arr[],int);
  18. bool errore3(Pezzo arr[],int);
  19.  
  20.  
  21.  
  22. int main(){
  23.  
  24.     const int N = 9;
  25.     string sc[N][N];
  26.    
  27.  
  28.    
  29.     Pezzo arr[32];
  30.     int i = 0;
  31.     //ciclo di inserimento dell'array di pezzi.
  32.     do{
  33.         cin >> arr[i].tipo;
  34.         if(arr[i].tipo=='#') break;
  35.         cin >> arr[i].colore;
  36.         cin >> arr[i].cx;
  37.         cin >> arr[i].cy;
  38.         i++;
  39.     }while(i<32);
  40.     riempi(N,sc,arr,i); //prendo i in ingresso in modo che il ciclo nella funzione non si ripeta 32 volte e il programma risulti più veloce
  41.    
  42.     //se si verifica un errore non mi stampa la matrice ma mi stampa appunto "Errore X"
  43.     if(errore1(arr,i)) cout << "Errore 1"<< endl;
  44.     else if(errore2(arr,i)) cout << "Errore 2"<< endl;
  45.     else if(errore3(arr,i)) cout << "Errore 3"<< endl;
  46.     else if(err4) cout << "Errore 4" << endl;
  47.     else print(N,sc);
  48.  
  49. }
  50.  
  51.  
  52. void riempi(const int N,string sc[][9],Pezzo arr[],int j){
  53.     //Riempie la matrice con quadrati neri e bianchi
  54.     for(int i = 1;  i < N; i++){
  55.         for(int j = 1; j < N; j++){
  56.             if((i+j)%2==0) sc[i][j]= "██";
  57.             else sc[i][j]= "  ";
  58.         }
  59.     }
  60.  
  61.     for(int i = 0; i < j;i++){
  62.         //controlla se una casella  è occupata da più pedine e mi aggiorna la variabile globale err4 nel caso fosse così
  63.         if(sc[arr[i].cx][arr[i].cy]!= "██" && sc[arr[i].cx][arr[i].cy]!="  ") err4=true;
  64.         //inserisce i pezzi dell'array nella scacchiera
  65.         switch(arr[i].tipo){
  66.             case 'K':
  67.                 if(arr[i].colore=='N') sc[arr[i].cx][arr[i].cy]="K ";
  68.                 if(arr[i].colore=='B') sc[arr[i].cx][arr[i].cy]="k ";
  69.                 break;
  70.             case 'R':
  71.                 if(arr[i].colore=='N') sc[arr[i].cx][arr[i].cy]="R ";
  72.                 if(arr[i].colore=='B') sc[arr[i].cx][arr[i].cy]="r ";
  73.                 break;
  74.             case 'P':
  75.                 if(arr[i].colore=='N') sc[arr[i].cx][arr[i].cy]="P ";
  76.                 if(arr[i].colore=='B') sc[arr[i].cx][arr[i].cy]="p ";
  77.                 break;
  78.             case 'A':
  79.                 if(arr[i].colore=='N') sc[arr[i].cx][arr[i].cy]="A ";
  80.                 if(arr[i].colore=='B') sc[arr[i].cx][arr[i].cy]="a ";
  81.                 break;
  82.             case 'T':
  83.                 if(arr[i].colore=='N') sc[arr[i].cx][arr[i].cy]="T ";
  84.                 if(arr[i].colore=='B') sc[arr[i].cx][arr[i].cy]="t ";
  85.                 break;
  86.             case 'C':
  87.                 if(arr[i].colore=='N') sc[arr[i].cx][arr[i].cy]="C ";
  88.                 if(arr[i].colore=='B') sc[arr[i].cx][arr[i].cy]="c ";
  89.                 break;
  90.            
  91.         }
  92.     }
  93.  
  94.  
  95. }
  96. //funzione di stampa della scacchiera
  97. void print(const int N, string sc[][9]){
  98.     for(int i = 1;  i < N; i++){
  99.         for(int j = 1; j < N; j++){
  100.             cout << sc[i][j];
  101.         }
  102.         cout << endl;
  103.     }
  104. }
  105. bool errore1(Pezzo arr[],int j){
  106.     int pb=0;
  107.     int pn=0;
  108.     int ab=0;
  109.     int an=0;
  110.     int cb=0;
  111.     int cn=0;
  112.     int tb=0;
  113.     int tn=0;
  114.     int kb=0;
  115.     int kn=0;
  116.     int rb=0;
  117.     int rn=0;
  118.  
  119.     for(int i = 0; i < j; i++){
  120.         if(arr[i].tipo=='P' && arr[i].colore=='N') pn++;
  121.         if(arr[i].tipo=='P' && arr[i].colore=='B') pb++;
  122.         if(arr[i].tipo=='A' && arr[i].colore=='N') an++;
  123.         if(arr[i].tipo=='A' && arr[i].colore=='B') ab++;   
  124.         if(arr[i].tipo=='C' && arr[i].colore=='N') cn++;
  125.         if(arr[i].tipo=='C' && arr[i].colore=='B') cb++;
  126.         if(arr[i].tipo=='T' && arr[i].colore=='N') tn++;
  127.         if(arr[i].tipo=='T' && arr[i].colore=='B') tb++;       
  128.         if(arr[i].tipo=='K' && arr[i].colore=='N') kn++;
  129.         if(arr[i].tipo=='K' && arr[i].colore=='B') kb++;       
  130.         if(arr[i].tipo=='R' && arr[i].colore=='N') rn++;
  131.         if(arr[i].tipo=='R' && arr[i].colore=='B') rb++;   
  132.        
  133.     }  
  134.     if(pn>8||pb>8||an>2||ab>2||cn>2||cb>2||tn>2||tb>2||kn>1||kb>1||rn>1||rb>1) return true;
  135.     else return false;
  136.  
  137.  
  138. }
  139. bool errore3(Pezzo arr[],int j){
  140.     int kb = 0;
  141.     int kn = 0;
  142.     for(int i = 0; i < j; i++){
  143.         if(arr[i].tipo=='K' && arr[i].colore=='N') kn++;
  144.         if(arr[i].tipo=='K' && arr[i].colore=='B') kb++;
  145.     }
  146.     if(kn<1 || kb < 1) return true;
  147.     else return false;
  148. }
  149.  
  150.    
  151. bool errore2(Pezzo arr[],int j){
  152.     for(int i = 0; i < j; i++){
  153.         if(arr[i].tipo=='P'&& arr[i].colore=='B' && arr[i].cx==8) return true;
  154.         if(arr[i].tipo=='P'&& arr[i].colore=='N' && arr[i].cx==1) return true;
  155.     }
  156.     return false;
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement