diff --git a/main.c b/main.c new file mode 100755 index 0000000..0b8f186 --- /dev/null +++ b/main.c @@ -0,0 +1,222 @@ +#include "tris.h" +int main (){ + int vittoria; + int difficolta; + do{ + giocatore=1,vittoria=0; + scelta=0,difficolta=0,mossa=0; + system(clear); //menu d'inizio + 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"); + if(!os) + 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"); + scanf("%d",&scelta); + switch(scelta) { + + case 1:{ //case per la partita con 2 giocatori + vuota(); + system(clear); + stampa(); + do{ //ciclo che contiene la partita. dura fino alla vittoria + leggimossa(); //richiama la funzione che legge la mossa + system(clear); + mossa++; //conteggio delle mossa,assegnazione del simbolo alle coordinate scelte e stampa della tabella + tabella[i][k]=giocatore; + stampa(); + if (controlla(1)){ //richiama la funzione controlla che verifica se qualcuno ha vinto + vittoria=1; + break; + } + if(giocatore==1) //cambia il turno del giocatore + giocatore=2; + else + giocatore=1; + } + while(!vittoria && mossa3) + printf(GRASSETTO ROSSO"\n Scelta non valida.\n\n" RESET BIANCO); + }while(difficolta<1||difficolta>3); + system(clear); + stampa(); + do{ //ciclo che contiene la partita fino alla vittoria/pareggio + if (giocatore==1){ + leggimossa(); //richiama la funzione che legge la mossa + tabella[i][k]=1; + system(clear); + stampa(); + aspetta(1); + } + else{ //turno del computer + system(clear); + printf(ROSSO"\n Gioco io ora...\n" RESET BIANCO); + spinner(1); + switch(difficolta){ //switch che contiene la mossa del computer + //richiama le funzione in base alla difficoltà + case 1:{ + facile(); + break; + } + case 2:{ + medio(); + break; + } + case 3:{ + difficile(); + break; + } + } + printf( ROSSO "\n Ok, ho scelto.\n" RESET BIANCO); + stampa(); + aspetta(2); + system(clear); + } + mossa++; //conteggio delle mossa,assegnazione del simbolo alle coordinate scelte e stampa della tabella + stampa(); + if (controlla(1)||controlla(2)){ //richiama la funzione controlla che verifica se qualcuno ha vinto + vittoria=1; + break; + } + if(giocatore==1){ //cambia il turno del giocatore + giocatore=2; + } + else { + giocatore=1; + } + } + while(!vittoria && mossa + #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)