#include "tris.h" #if os /*Legge dalla tastiera senza usare il buffer*/ int mgetchar(){ char buf=0; struct termios old={0}; if(tcgetattr(0,&old)<0) perror("tcsetattr()"); old.c_lflag&=~ICANON; old.c_lflag&=~ECHO; old.c_cc[VMIN]=1; old.c_cc[VTIME]=0; if(tcsetattr(0,TCSANOW,&old)<0) perror("tcsetattr ICANON"); if(read(0,&buf,1)<0) perror("read()"); old.c_lflag|=ICANON; old.c_lflag|=ECHO; if(tcsetattr(0,TCSADRAIN,&old)<0) perror("tcsetattr ~ICANON"); return (buf); } #endif /*Funzioni*/ /*Stampa la tabella del tris*/ void stampa(){ int i,k; printf("\n\n\n"); for(i=0;i=M || k>=M){ system(clear); stampa(); printf("%-59s%s%s\n\n", GRASSETTO ROSSO, "Mossa non valida, riprova.", RESET BIANCO); } }while(tabella[i][k]==1 || tabella[i][k]==2 || i<0 || k<0 || i>=M || k>=M); } /*Mossa con coordinate*/ else{ do{ /*Giocatore singolo*/ if(scelta==2) printf("%-63s%s\n%-40s%s%s %s%s\n", GIALLO, "Tocca a te.", "", "Inserisci coordinate della mossa", ROSSO, "[Riga,colonna]:", BIANCO); /*2 giocatori*/ else printf("%-58s%s %d\n%-40s%s %s%s%s\n", GIALLO, "Gioca il giocatore", giocatore, "", "Inserisci coordinate della mossa", ROSSO, "[Riga,colonna]:", BIANCO); scanf("%d,%d",&i,&k); if(tabella[i][k]==1 || tabella[i][k]==2 || i<0 || k<0 || i>=M || k>=M){ system(clear); stampa(); printf("\n\n%-56s%s%s\n\n\n", GRASSETTO ROSSO, "Coordinate non valide, riprova.", RESET BIANCO); } }while(tabella[i][k]==1 || tabella[i][k]==2 || i<0 || k<0 || i>=M || k>=M); system(clear); } } /*Controlla se il giocatore ha vinto*/ int controlla(int giocatore){ /*Diagonali*/ for(i=0;i=0;k--) if((tabella[i][k]==giocatore && tabella[i+1][k-1]==giocatore && tabella[i+2][k-2]==giocatore) && (i+2res) || (tmp==INT_MAX)) res=tmp; tabella[i][k]=0; } } } } return res; } /*Mossa del computer a difficoltà facile*/ void facile() { int a,b; do{ randomize; a=random(M); b=random(M); }while(tabella[a][b]==1 || tabella[a][b]==2); tabella[a][b]=2; } /*Mossa del computer a difficoltà media*/ void medio(){ int max=INT_MIN,mi=1,mk=1,t; for(i=0;imax){ max=t; mi=i; mk=k; } tabella[i][k]=0; } } } tabella[mi][mk]=2; } /*Mossa del computer a difficoltà difficile*/ void difficile(){ int max=INT_MIN,mi=1,mk=1,t; for(i=0;imax){ max=t; mi=i; mk=k; } tabella[i][k]=0; } } } tabella[mi][mk]=2; } /* Blocca l'esecuzione finchè non viene premuto invio*/ void pausa() { do getchar(); while ((c= getchar()) != '\n' && c!= EOF); } /*Replica di Sleep()*/ void aspetta(int t){ time_t Ti,Tf; time(&Ti); do{ time(&Tf); }while(difftime(Tf,Ti)