#ifndef _TRIS_H_ #define _TRIS_H_ /*Librerie Principali*/ #include #include #include #include /*Colori ANSI*/ #define NERO "\033[22;30m" #define BLU "\033[34m" #define GIALLO "\033[33m" #define BIANCO "\033[37m" #define ROSSO "\033[31m" #define RESET "\033[0m" #define GRASSETTO "\033[1m" #define SOTTOLINEATO "\033[4m" /*Definizioni*/ #define random(x) rand() % x #define randomize srand((unsigned)time(NULL)) #define M 3 /*Funzione specifiche degli os*/ #ifdef __WIN32__ #define os 0 #include #define clear "cls" #else #define os 1 #define clear "clear" #include #include int mgetchar(void); 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 /*Prototipi*/ void vuota(void); void stampa(void); int controlla(int giocatore); void spinner(int tempo); int minimax(int giocatore, int profondita); void facile(void); void medio(void); void difficile(void); void pausa(void); void leggimossa(void); void aspetta(int t); void beep(int t); /*Variabili globali*/ char a='a',c; int i,k; int giocatore,scelta,mossa; int tabella[M][M]; int tastierino=1; /*Funzioni*/ void stampa(){ int i,k; printf("\n\n\n"); for(i=0;ires) res=tmp; tabella[i][k]=0; } } } } return res; } 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; } 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; } } } stampa(); tabella[mi][mk]=2; } 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; } void pausa() { do{ getchar(); }while ((c= getchar()) != '\n' && c!= EOF); } void vuota() { for(i=0;i=M||k>=M){ system(clear); stampa(); printf(GRASSETTO ROSSO"\n Mossa non valida,riprova.\n\n"RESET BIANCO); } }while(tabella[i][k]==1||tabella[i][k]==2||i<0||k<0||i>=M||k>=M); } else{ do{ if(scelta==2) printf(GIALLO" Tocca a te.\n Inserisci coordinate della mossa"ROSSO"[Riga,colonna]:\n" RESET BIANCO); else printf(GIALLO" Gioca il giocatore %d.\n Inserisci coordinate della mossa"ROSSO"[Riga,colonna]:\n" RESET BIANCO,giocatore); 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(GRASSETTO ROSSO"\n\n Coordinate non valide,riprova.\n\n\n"RESET BIANCO); } }while(tabella[i][k]==1||tabella[i][k]==2||i<0||k<0||i>=M||k>=M); system(clear); } } void aspetta(int t){ time_t Ti,Tf; time(&Ti); do{ time(&Tf); }while(difftime(Tf,Ti)