#include #include char sceltaColore; char *pcolore = &sceltaColore; int mosseEffettuateBianco = 0; int mosseEffettuateNero = 0; char coordinate[6]; int spostaDa; int spostaA; int *pSpostaDa = &spostaDa; int *pSpostaA = &spostaA; int pedineMangiateNere = 0; int pedineMangiateBianche = 0; int pedineRimasteBianche = 20; int pedineRimasteNere = 20; int rightPosition = 0; char avversario; char utente; int casellaAvversario = 0; char scacchiera[50] = { 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o' }; /*------------------------------------------------- FUNZIONE UTENTE---------------------------------------------------------------------------*/ /* Funzione Utente: Gestione delle mosse passate da input dell'utente: studia i casi di vittoria,mangiata o abbandono della partita * - Mangiata * - Spostamento * - Vittoria * - Stallo * - Abbandono (dopo almeno 30 mosse) * - Dama * */ /*verifica che le prime posizioni diagonali siano vuote*/ int canWalk() { switch (scacchiera[spostaDa]) { case 'b': if ((scacchiera[spostaDa - 4] == ' ' && spostaA == spostaDa - 4) || (scacchiera[spostaDa - 5] == ' ' && spostaA == spostaDa - 5)) return 1; break; case 'B': if ((scacchiera[spostaDa - 4] == ' ' && spostaA == spostaDa - 4) || (scacchiera[spostaDa - 5] == ' ' && spostaA == spostaDa - 5) || (scacchiera[spostaDa + 6] == ' ' && spostaA == spostaDa + 6) || (scacchiera[spostaDa + 5] == ' ' && spostaA == spostaDa + 5)) return 1; break; case 'n': if ((scacchiera[spostaDa + 6] == ' ' && spostaA == spostaDa + 6) || (scacchiera[spostaDa + 5] == ' ' && spostaA == spostaDa + 5)) return 1; break; case 'N': if ((scacchiera[spostaDa - 4] == ' ' && spostaA == spostaDa - 4) || (scacchiera[spostaDa - 5] == ' ' && spostaA == spostaDa - 5) || (scacchiera[spostaDa + 6] == ' ' && spostaA == spostaDa + 6) || (scacchiera[spostaDa + 5] == ' ' && spostaA == spostaDa + 5)) return 1; break; } return 0; } int canEat() { switch (scacchiera[spostaDa]) { case 'b': if (scacchiera[spostaDa - 4] == 'n' && scacchiera[spostaDa - 9] == ' ') { if (spostaA == spostaDa - 9) { casellaAvversario = spostaDa - 4; return 1; } else { printf( "devi mangiare la pedina, inserisci nuovamente le coordinate"); } } if (scacchiera[spostaDa - 5] == 'n' && scacchiera[spostaDa - 11] == ' ') { if (spostaA == spostaDa - 11) { casellaAvversario = spostaDa - 5; return 1; } else printf( "devi mangiare la pedina, inserisci nuovamente le coordinate"); } break; case 'B': if ((scacchiera[spostaDa - 4] == 'n' || scacchiera[spostaDa - 4] == 'N') && scacchiera[spostaDa - 9] == ' ') { if (spostaA == spostaDa - 9) { casellaAvversario = spostaDa - 4; return 1; } else printf( "devi mangiare la pedina, inserisci nuovamente le coordinate"); } if ((scacchiera[spostaDa - 5] == 'n' || scacchiera[spostaDa - 5] == 'N') && scacchiera[spostaDa - 11] == ' ') { if (spostaA == spostaDa - 11) { casellaAvversario = spostaDa - 5; return 1; } else printf( "devi mangiare la pedina, inserisci nuovamente le coordinate"); } if ((scacchiera[spostaDa + 5] == 'n' || scacchiera[spostaDa - 4] == 'N') && scacchiera[spostaDa + 9] == ' ') { if (spostaA == spostaDa + 9) { return 1; } else { printf( "devi mangiare la pedina, inserisci nuovamente le coordinate"); } } else if ((scacchiera[spostaDa + 6] == 'n' || scacchiera[spostaDa + 6] == 'N') && scacchiera[spostaDa + 11] == ' ') { if (spostaA == spostaDa + 11) { casellaAvversario = spostaDa + 6; return 1; } else { printf( "devi mangiare la pedina, inserisci nuovamente le coordinate"); } break; case 'n': if (scacchiera[spostaDa + 5] == 'b' && scacchiera[spostaDa + 9] == ' ') { if (spostaA == spostaDa + 9) { casellaAvversario = spostaDa + 5; return 1; } else { printf( "devi mangiare la pedina, inserisci nuovamente le coordinate"); } } if (scacchiera[spostaDa + 6] == 'b' && scacchiera[spostaDa + 11] == ' ') { if (spostaA == spostaDa + 11) { casellaAvversario = spostaDa + 11; return 1; } else printf( "devi mangiare la pedina, inserisci nuovamente le coordinate"); } break; case 'N': if ((scacchiera[spostaDa - 4] == 'b' || scacchiera[spostaDa - 4] == 'B') && scacchiera[spostaDa - 9] == ' ' && spostaA == spostaDa - 9) { casellaAvversario = spostaDa - 4; return 1; } if ((scacchiera[spostaDa - 5] == 'B' || scacchiera[spostaDa - 5] == 'b') && scacchiera[spostaDa - 11] == ' ' && spostaA == spostaDa - 11) { casellaAvversario = spostaDa - 5; return 1; } if ((scacchiera[spostaDa + 5] == 'b' || scacchiera[spostaDa - 4] == 'B') && scacchiera[spostaDa + 9] == ' ' && spostaA == spostaDa + 9) { casellaAvversario = spostaDa + 5; return 1; } if ((scacchiera[spostaDa + 6] == 'b' || scacchiera[spostaDa + 6] == 'B') && scacchiera[spostaDa + 11] == ' ' && spostaA == spostaDa + 11) { casellaAvversario = spostaDa + 6; return 1; } else return 0; } break; } return 0; } void mangiata() { int nuovospostaDa; while (canEat() == 1) { scacchiera[spostaA] = scacchiera[spostaDa]; scacchiera[casellaAvversario] = ' '; scacchiera[spostaDa] = ' '; nuovospostaDa = spostaA; if (*pcolore == 'B') pedineMangiateNere++; else pedineMangiateBianche++; mangiata(); } } void spostamento() { if (canWalk() == 1 && canEat() == 0) { scacchiera[spostaA] = scacchiera[spostaDa]; scacchiera[spostaDa] = ' '; } /*mangia*/ else { mangiata(scacchiera, spostaDa); } } /*--------------------------------------------STAMPA SCACCHIERA-------------------------------------------------------------------------------*/ void StampaScacchiera() { printf( "%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c\n", '|', 1, '|', scacchiera[0], '|', 2, '|', scacchiera[1], '|',3, '|', scacchiera[2], '|',4,'|',scacchiera[3], '|',5,'|',scacchiera[4],'|' ); printf("-------------------------------------------\n"); printf("%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c\n", '|', scacchiera[5], '|', 6, '|', scacchiera[6], '|', 7, '|',scacchiera[7], '|', 8, '|',scacchiera[8],'|',9, '|',scacchiera[9],'|',10,'|' ); printf("-------------------------------------------\n"); printf("%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c\n", '|', 11, '|', scacchiera[10], '|', 12, '|', scacchiera[11], '|',13, '|', scacchiera[12], '|',14,'|',scacchiera[13], '|',15,'|',scacchiera[14],'|' ); printf("-------------------------------------------\n"); printf("%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c\n", '|', scacchiera[15], '|', 16, '|', scacchiera[16], '|', 17, '|',scacchiera[17], '|', 18, '|',scacchiera[18],'|',19, '|',scacchiera[19],'|',20,'|' ); printf("-------------------------------------------\n"); printf("%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c\n", '|', 21, '|', scacchiera[20], '|', 22, '|', scacchiera[21], '|',23, '|', scacchiera[22], '|',24,'|',scacchiera[23], '|',25,'|',scacchiera[24],'|' ); printf("-------------------------------------------\n"); printf("%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c\n", '|', scacchiera[25], '|', 26, '|', scacchiera[26], '|', 27, '|',scacchiera[27], '|', 28, '|',scacchiera[28],'|',29, '|',scacchiera[29],'|',30,'|' ); printf("-------------------------------------------\n"); printf("%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c\n", '|', 31, '|', scacchiera[30], '|', 32, '|', scacchiera[31], '|',33, '|', scacchiera[32], '|',34,'|',scacchiera[33], '|',35,'|',scacchiera[34],'|' ); printf("-------------------------------------------\n"); printf("%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c\n", '|', scacchiera[35], '|', 36, '|', scacchiera[36], '|', 37, '|',scacchiera[37], '|', 38, '|',scacchiera[38],'|',39, '|',scacchiera[39],'|',40,'|' ); printf("-------------------------------------------\n"); printf("%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c\n", '|', 41, '|', scacchiera[40], '|', 42, '|', scacchiera[41], '|',43, '|', scacchiera[42], '|',44,'|',scacchiera[43], '|',45,'|',scacchiera[44],'|' ); printf("-------------------------------------------\n"); printf("%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c%2c%2c%2d%2c\n", '|', scacchiera[45], '|', 46, '|', scacchiera[46], '|', 47, '|',scacchiera[47], '|', 48, '|',scacchiera[48],'|',49, '|',scacchiera[49],'|',50,'|' ); printf("-------------------------------------------\n"); printf( "Il giocatore bianco ha effettuato un numero di mosse pari a: %d\nIl giocatore nero ha effettuato un numero di mosse pari a: %d \n", mosseEffettuateBianco, mosseEffettuateNero); printf( "Numero di pedine mangiate nere: %d\nNumero di pedine mangiate bianche: %d\n", pedineMangiateNere, pedineMangiateBianche); printf( "Numero di pedine rimanenti nere: %d\nNumero di pedine rimanenti bianche: %d\n", pedineRimasteNere, pedineRimasteBianche); } /*-----------------------------------------------------------MAIN-----------------------------------------------------------------------*/ int main() { StampaScacchiera(); while (*pcolore != 'B' && *pcolore != 'N') { printf("scelta del colore:(B bianco, N nero): \n"); scanf("%c", pcolore); } /*Utente==bianco*/ if (*pcolore == 'B') { utente = 'B'; avversario = 'N'; } else { utente = 'N'; avversario = 'B'; } while (rightPosition == 0) { char a; printf("fai la mossa (es.32-27):"); scanf("%d%c%d", &spostaDa, &a, &spostaA); if (scacchiera[spostaDa] == 'o' || scacchiera[spostaDa] == 'O') { spostamento(); mosseEffettuateBianco += 1; rightPosition = 1; } else { printf( "devi inserire il valore della casella che contiene una tua pedina"); rightPosition = 0; } } StampaScacchiera(); /*FunzionePc*/ return 0; }