#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=0; /*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)