int partita() { int gioco=1; int m[DIM][DIM],turni=(DIM*DIM-1),giocatore; do { //inizializzo matrice e matrice di controllo if (turni==(DIM*DIM-1)) { printf("\n######### TRIS #########\n"); inizializza(m); mostra_aggiornata(m); //finchè ho mosse da fare che sono al massimo DIM*DIM giocatore=richiestagiocatore(); } else { mostra_aggiornata(m); printf("\nGiocatore %i tocca a te\n",giocatore); } int cod,x,y; switch (giocatore) { case 1:mossavivente(m,giocatore); break; case 2:f2(m,giocatore); break; default: errore(); } turni--; giocatore=giocatore%2+1; int c=0; if (controllatutto(m,giocatore)) { gioco=vittoria(giocatore); c++; } if(!turni) { gioco=patta(); c++; } if (c>=1) turni=DIM*DIM; }while (gioco==1); return 0; }
/*MAIN*/ int main() { struct mossa *testa; /*Puntator to list's head*/ struct mossa *nuova; /*Puntator to list's tail*/ struct mossa *nuova_da_ordinare; /*Puntator to new move BEFORE is sorted*/ struct mossa *testa_da_ordinare; /*Puntator to tail's head to be sorted*/ struct mossa *temp; /*Puntator to temporary structure*/ struct mossa *puntatore_ad_array_struct; /*Puntator to structure's array*/ testa=NULL;/*Initializing head to NULL*/ testa_da_ordinare=NULL;/*Initializing head to be sorted to NULL*/ char name1[31], name2[31], *name, rigioca, deb[51]; char r4[201]=MENU; int i, controlli, sottoScacco=0, partita=1, player=0, numero_celle, contatore3=0; time_t prima_della_mossa=0; pedina pedine[33]; pedina *board[8][8], *testBoard[8][8], *toTest; posizione pos1, pos2; presentazione(); name=name1; daCapo(pedine, board, name1, name2, name, &numero_celle); /*----------*/ do { i=0, controlli=0; while (controlli==0) { printf("\n%s\n", r4); switch (userInput()) { case 'n': clear(); daCapo(pedine, board, name1, name2, name, &numero_celle); showBoard(board); player=0; continue; case 'q': uscita(); showBoard(board); continue; case 'h': help(); showBoard(board); continue; #ifndef _WIN32 case 'x': save(pedine, board, name1, name2, player, numero_celle, testa); continue; case 'c': testa = load(pedine, board, name1, name2, name, &player, &numero_celle); debug("Initializing head's test"); temp=testa; while(temp != NULL) { sprintf(deb, "player: %s\n", (temp->player==0)?name1:name2); debug(deb); sprintf(deb, "move: %s\n", temp->coordinate); debug(deb); sprintf(deb, "duration: %.2lf secs\n", temp->durata_mossa); debug(deb); temp=temp->next; contatore3++; } debug("End head's test"); continue; #endif case 's': stallo(); showBoard(board); continue; } showBoard(board); if(prima_della_mossa==0) { time(&prima_della_mossa); } if (getCoordinate(board, &pos1, &pos2, name, player) && pos1.loc->player==player && checkMove(pedine, board, &pos1, &pos2, player, 0)) { numero_celle=conteggio_celle(numero_celle); testa=newtime(player, testa, nuova, &pos1, &pos2, prima_della_mossa, numero_celle, name1, name2); prima_della_mossa=0; controlli = 1; } else { printf("\nWrong coordinates, re-enter\n"); } } toTest = (player==0)? pedine+27 : pedine+3; //Re avversario if (scacco(toTest->l, toTest->n, player, board, pedine, player)) {sottoScacco=1; printf("\nScacco al RE\n"); } if (sottoScacco) { debug("UNDER CHECK"); if(roundRe(toTest->l, toTest->n, player, board, pedine, player)) { debug("maybe mate??\n"); if(checkMatto(toTest->l, toTest->n, board, pedine, player)) { clear(); printf("\nCheck mate!!!!!\n"); rigioca=vittoria(player,name1,name2,testa,puntatore_ad_array_struct,numero_celle); if(rigioca=='y') { clear(); daCapo(pedine, board, name1, name2, name, &numero_celle); showBoard(board); player=0; continue; } else { printf("\nThank for playing! Have a nice day."); getch(); exit(0); } } else {debug("not mate..");} } } sprintf(deb, "%c --> moved=%d", pos1.loc->tipo, pos1.loc->moved); debug(deb); sprintf(deb, "%c (%d,%d) in %c (%d,%d)", pos1.loc->tipo, pos1.l+1, pos1.n+1, (*board[pos2.n][pos2.l]).tipo, pos2.l+1, pos2.n+1); debug(deb); sottoScacco=0; clear(); nexTurn(&player); name=(player==0)?name1:name2; } while(partita != 0); return 0; }