From 3af7a536c4e04d5b27e49a5ba5ab01da3e2c3fff Mon Sep 17 00:00:00 2001 From: Rnhmjoj Date: Tue, 20 Nov 2012 22:59:25 +0100 Subject: [PATCH] Aggiornamento maggiore *Spostate le funzioni in un file esterno(tris.c); *Rimosse cose inutili dalla licenza; *Risolto un bug nella funzione int controlla(int giocatore); *Aggiunti nuovi commenti; *Riordinate le funzioni; *Aggiornato il makefile; *Aggiornato il README.md. --- README.md | 5 +- license.txt | 4 - main.c | 2 + makefile | 7 +- tris.c | 307 ++++++++++++++++++++++++++++++++++++++++++++++++++++ tris.h | 293 +------------------------------------------------ 6 files changed, 321 insertions(+), 297 deletions(-) create mode 100755 tris.c diff --git a/README.md b/README.md index 9419fee..465372c 100644 --- a/README.md +++ b/README.md @@ -17,10 +17,7 @@ Link: http://github.com/adoxa/ansicon ### Installazione Per compilare il programma su UNIX usa _make_. -Su windows si può usare MinGW. Scrivi: - - gcc -std=c99 -c main.c -o "Tris in Stile C" - +Su windows usa un compilatore qualisasi o _make_ se hai MinGW Link: http://www.mingw.org ### Istruzioni diff --git a/license.txt b/license.txt index 040b4b8..cdeab82 100644 --- a/license.txt +++ b/license.txt @@ -5,10 +5,6 @@ * singolo contro il computer(3 difficoltà a scelta basate * sulla profondità dell'algoritmo minimax). * - * Richiede un terminale con supporto alle sequenze di - * escape ANSI. Per windows è possible usare ANSIcon: - * https://github.com/adoxa/ansicon - * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html diff --git a/main.c b/main.c index c306ada..66e4663 100755 --- a/main.c +++ b/main.c @@ -2,6 +2,8 @@ int main (){ int vittoria; int difficolta; + tastierino=0; + a='a'; do{ giocatore=1,vittoria=0; scelta=0,difficolta=0,mossa=0; diff --git a/makefile b/makefile index 2c5194c..72045ec 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,7 @@ -Tris-in-stile-c : main.c tris.h - gcc -std=c99 -c main.c -o "Tris in Stile C" +SHELL = /bin/sh +.SUFFIXES: +.SUFFIXES: .c .o +Tris-in-stile-c : main.c tris.c tris.h + gcc -std=c99 main.c tris.c -o "Tris in stile C" diff --git a/tris.c b/tris.c new file mode 100755 index 0000000..3f03810 --- /dev/null +++ b/tris.c @@ -0,0 +1,307 @@ +#include "tris.h" + +/*Funzioni*/ + +/*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); +} + +/*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(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); + } + /*Mossa con coordinate*/ + else{ + do{ + /*Giocatore singolo*/ + if(scelta==2) + printf(GIALLO" Tocca a te.\n Inserisci coordinate della mossa"ROSSO"[Riga,colonna]:\n" RESET BIANCO); + /*2 giocatori*/ + 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); + } + +} + +/*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+1][k-2]==giocatore) + return 1; + for(k=0;kres) + 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; + } + } + } + stampa(); + 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) #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); + void vuota(void); + void leggimossa(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 spinner(int tempo); void aspetta(int t); void beep(int t); /*Variabili globali*/ - char a='a',c; + char 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)