From 17aa812f23d288210586fc67684d5494e9c0bbf6 Mon Sep 17 00:00:00 2001 From: Rnhmjoj Date: Mon, 19 Nov 2012 16:54:12 +0100 Subject: [PATCH] Sistemata al codice e supporto alla tabella di qualunque dimensione MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit *Ora funziona con una tabella di qualunque grandezza. Il lato della matrice quadrata è definito con #define M 3. Anche se la tabella è più grande per vincere basta comunque fare un tris; *Sistemati alcuni bug minori; *Reso il codice più pulito; --- main.c | 12 +- tris.h | 451 +++++++++++++++++++++++++++++---------------------------- 2 files changed, 232 insertions(+), 231 deletions(-) mode change 100644 => 100755 tris.h diff --git a/main.c b/main.c index 511ecb9..c306ada 100755 --- a/main.c +++ b/main.c @@ -8,14 +8,14 @@ int main (){ /*Menu d'inizio*/ system(clear); printf(SOTTOLINEATO GIALLO"\n Tris in stile C \n\n" RESET BIANCO); - printf(ROSSO " [1]"RESET BIANCO" Partita con 2 giocatori\n"); - printf(ROSSO " [2]"RESET BIANCO" Partita singolo giocatore\n"); + printf(ROSSO" [1]"RESET BIANCO" Partita con 2 giocatori\n"); + printf(ROSSO" [2]"RESET BIANCO" Partita singolo giocatore\n"); if(!os) - printf(ROSSO " [3]"RESET BIANCO" Modalit%c di input\n",133); + printf(ROSSO" [3]"RESET BIANCO" Modalit%c di input\n",133); else - printf(ROSSO " [3]"RESET BIANCO" Modalità di input \n"); - printf(ROSSO " [4]"RESET BIANCO" Informazioni\n"); - printf(ROSSO " [5]"RESET BIANCO" Esci\n"); + printf(ROSSO" [3]"RESET BIANCO" Modalità di input \n"); + printf(ROSSO" [4]"RESET BIANCO" Informazioni\n"); + printf(ROSSO" [5]"RESET BIANCO" Esci\n"); scanf("%d",&scelta); switch(scelta){ /*case per la partita con 2 giocatori*/ diff --git a/tris.h b/tris.h old mode 100644 new mode 100755 index 918d39d..8a3ed87 --- a/tris.h +++ b/tris.h @@ -1,13 +1,13 @@ #ifndef _TRIS_H_ - + #define _TRIS_H_ - + /*Librerie Principali*/ #include #include #include #include - + /*Colori ANSI*/ #define NERO "\033[22;30m" #define BLU "\033[34m" @@ -17,12 +17,12 @@ #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__ @@ -38,27 +38,27 @@ #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); + 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); @@ -72,266 +72,267 @@ 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; - + int tastierino=0; + /*Funzioni*/ void stampa(){ - int i,k; - printf("\n\n\n"); - for(i=0;ires) res=tmp; tabella[i][k]=0; } } } - } - else{ - res=-1; - for(i=0;ires) - res=tmp; - tabella[i][k]=0; - } - } - } } - return res; + 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; + 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; - } + 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; + 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; - } + for(i=0;imax){ + max=t; + mi=i; + mk=k; + } + tabella[i][k]=0; + } } } - tabella[mi][mk]=2; + tabella[mi][mk]=2; } void pausa() { do{ - getchar(); - }while ((c= getchar()) != '\n' && c!= EOF); + 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); + int tasto=0; + fflush(stdin); + if(tastierino==1){ + do{ + tasto=0; + fflush(stdin); + if(scelta==2) + printf(GIALLO" Fai la tua mossa:\n"RESET BIANCO); + else + printf(GIALLO" Gioca il giocatore %d.\n Fai la tua mossa:\n"RESET BIANCO,giocatore); + if(os) + tasto=mgetchar(); + else + do{ + tasto=getch(); + }while(kbhit()); + switch(tasto){ + case 49:{ + i=2; + k=0; + break; + } + case 50:{ + i=2; + k=1; + break; + } + case 51:{ + i=2; + k=2; + break; + } + case 52:{ + i=1; + k=0; + break; + } + case 53:{ + i=1; + k=1; + break; + } + case 54:{ + i=1; + k=2; + break; + } + case 55:{ + i=0; + k=0; + break; + } + case 56:{ + i=0; + k=1; + break; + } + case 57:{ + i=0; + k=2; + break; + } + } - }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){ + 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); + 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); - system(clear); - } - + }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)