Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- bool err4 = false;
- struct Pezzo
- {
- char tipo;
- char colore;
- int cx;
- int cy;
- };
- void riempi(const int,string [][9],Pezzo arr[],int j);
- void print(const int,string[][9]);
- bool errore1(Pezzo arr[],int);
- bool errore2(Pezzo arr[],int);
- bool errore3(Pezzo arr[],int);
- int main(){
- const int N = 9;
- string sc[N][N];
- Pezzo arr[32];
- int i = 0;
- //ciclo di inserimento dell'array di pezzi.
- do{
- cin >> arr[i].tipo;
- if(arr[i].tipo=='#') break;
- cin >> arr[i].colore;
- cin >> arr[i].cx;
- cin >> arr[i].cy;
- i++;
- }while(i<32);
- 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
- //se si verifica un errore non mi stampa la matrice ma mi stampa appunto "Errore X"
- if(errore1(arr,i)) cout << "Errore 1"<< endl;
- else if(errore2(arr,i)) cout << "Errore 2"<< endl;
- else if(errore3(arr,i)) cout << "Errore 3"<< endl;
- else if(err4) cout << "Errore 4" << endl;
- else print(N,sc);
- }
- void riempi(const int N,string sc[][9],Pezzo arr[],int j){
- //Riempie la matrice con quadrati neri e bianchi
- for(int i = 1; i < N; i++){
- for(int j = 1; j < N; j++){
- if((i+j)%2==0) sc[i][j]= "██";
- else sc[i][j]= " ";
- }
- }
- for(int i = 0; i < j;i++){
- //controlla se una casella è occupata da più pedine e mi aggiorna la variabile globale err4 nel caso fosse così
- if(sc[arr[i].cx][arr[i].cy]!= "██" && sc[arr[i].cx][arr[i].cy]!=" ") err4=true;
- //inserisce i pezzi dell'array nella scacchiera
- switch(arr[i].tipo){
- case 'K':
- if(arr[i].colore=='N') sc[arr[i].cx][arr[i].cy]="K ";
- if(arr[i].colore=='B') sc[arr[i].cx][arr[i].cy]="k ";
- break;
- case 'R':
- if(arr[i].colore=='N') sc[arr[i].cx][arr[i].cy]="R ";
- if(arr[i].colore=='B') sc[arr[i].cx][arr[i].cy]="r ";
- break;
- case 'P':
- if(arr[i].colore=='N') sc[arr[i].cx][arr[i].cy]="P ";
- if(arr[i].colore=='B') sc[arr[i].cx][arr[i].cy]="p ";
- break;
- case 'A':
- if(arr[i].colore=='N') sc[arr[i].cx][arr[i].cy]="A ";
- if(arr[i].colore=='B') sc[arr[i].cx][arr[i].cy]="a ";
- break;
- case 'T':
- if(arr[i].colore=='N') sc[arr[i].cx][arr[i].cy]="T ";
- if(arr[i].colore=='B') sc[arr[i].cx][arr[i].cy]="t ";
- break;
- case 'C':
- if(arr[i].colore=='N') sc[arr[i].cx][arr[i].cy]="C ";
- if(arr[i].colore=='B') sc[arr[i].cx][arr[i].cy]="c ";
- break;
- }
- }
- }
- //funzione di stampa della scacchiera
- void print(const int N, string sc[][9]){
- for(int i = 1; i < N; i++){
- for(int j = 1; j < N; j++){
- cout << sc[i][j];
- }
- cout << endl;
- }
- }
- bool errore1(Pezzo arr[],int j){
- int pb=0;
- int pn=0;
- int ab=0;
- int an=0;
- int cb=0;
- int cn=0;
- int tb=0;
- int tn=0;
- int kb=0;
- int kn=0;
- int rb=0;
- int rn=0;
- for(int i = 0; i < j; i++){
- if(arr[i].tipo=='P' && arr[i].colore=='N') pn++;
- if(arr[i].tipo=='P' && arr[i].colore=='B') pb++;
- if(arr[i].tipo=='A' && arr[i].colore=='N') an++;
- if(arr[i].tipo=='A' && arr[i].colore=='B') ab++;
- if(arr[i].tipo=='C' && arr[i].colore=='N') cn++;
- if(arr[i].tipo=='C' && arr[i].colore=='B') cb++;
- if(arr[i].tipo=='T' && arr[i].colore=='N') tn++;
- if(arr[i].tipo=='T' && arr[i].colore=='B') tb++;
- if(arr[i].tipo=='K' && arr[i].colore=='N') kn++;
- if(arr[i].tipo=='K' && arr[i].colore=='B') kb++;
- if(arr[i].tipo=='R' && arr[i].colore=='N') rn++;
- if(arr[i].tipo=='R' && arr[i].colore=='B') rb++;
- }
- 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;
- else return false;
- }
- bool errore3(Pezzo arr[],int j){
- int kb = 0;
- int kn = 0;
- for(int i = 0; i < j; i++){
- if(arr[i].tipo=='K' && arr[i].colore=='N') kn++;
- if(arr[i].tipo=='K' && arr[i].colore=='B') kb++;
- }
- if(kn<1 || kb < 1) return true;
- else return false;
- }
- bool errore2(Pezzo arr[],int j){
- for(int i = 0; i < j; i++){
- if(arr[i].tipo=='P'&& arr[i].colore=='B' && arr[i].cx==8) return true;
- if(arr[i].tipo=='P'&& arr[i].colore=='N' && arr[i].cx==1) return true;
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement