#include "tris.h"
int main (){
	int vittoria;
	int difficolta;
	tastierino=1;
	a='a';
	do{
		giocatore=1,vittoria=0;
        scelta=0,difficolta=0,mossa=0;
        /*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");
		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("\n%d",&scelta);
        switch(scelta){
			/*case per la partita con 2 giocatori*/
            case 1:{
				/*Vuota la tabella, pulisce lo schermo e la stampa*/
               	vuota();
               	system(clear);
               	stampa();
				/*ciclo che contiene la partita. Dura fino alla vittoria*/
               	do{
					/*Legge la mossa del giocatore*/
					leggimossa();
                   	system(clear);
                   	/*Conteggio delle mosse, assegnazione del simbolo alle coordinate scelte e stampa della tabella*/
					mossa++;
                   	tabella[i][k]=giocatore;
                   	stampa();
                   	/*Controlla se il giocatore ha vinto*/
					if(controlla(1)){
						vittoria=1;
                       	break;
                    }
					/*cambia il turno del giocatore*/
                   	if(giocatore==1)
                       	giocatore=2;
                   	else
                       	giocatore=1;
                }
                while(!vittoria && mossa<M*M);
				/*Stampa il risultato della partita, mette in pausa, rompe lo switch e ritorna al menu*/
                if((!controlla(1))&&(!controlla(2))){
                    printf(ROSSO "                                  Pareggio.\n");
                    pausa();
                }
                else{
                    printf(ROSSO "                              Partita terminata.\n                           Ha vinto il giocatore %d.\n\n",giocatore);
                    pausa();
                }
                break;
            }
                /*Case che contiene la partita singolo giocatore*/
           	case 2:{
               	vuota();
				/*ciclo per scegliere la difficolta del gioco*/
				system(clear);
               	do{
					
					if(!os)
                   		printf(SOTTOLINEATO GIALLO"\n                              Scegli la difficolt%c:\n\n"RESET BIANCO ,133);
                   	else
						printf(SOTTOLINEATO GIALLO"\n                              Scegli la difficoltà:                             \n\n" RESET BIANCO);
					printf(ROSSO"                                  [1]"RESET BIANCO" Facile\n");
					printf(ROSSO"                                  [2]"RESET BIANCO" Medio\n");
					printf(ROSSO"                                  [3]"RESET BIANCO" Difficile\n");
					getchar();
					scanf("%d",&difficolta);
                   	if(difficolta<1||difficolta>3){
						printf(GRASSETTO ROSSO"\n                             Scelta non valida.\n\n" RESET BIANCO);
						aspetta(2);
						
					}
				}while(difficolta<1||difficolta>3);
               	system(clear);
               	stampa();
				/*Ciclo che contiene la partita fino alla vittoria o al pareggio*/
               	do{
					/*Turno del giocatore umano*/
					if(giocatore==1){
                    	leggimossa();
                       	tabella[i][k]=1;
                       	system(clear);
                       	stampa();
                       	aspetta(1);
                   	}
					/*Turno del computer*/
					else{
                       	system(clear);
                       	printf(ROSSO"\n                                Gioco io ora...\n" RESET BIANCO);
                       	spinner(1);
	                   	/*switch che contiene la mossa del computer in base alla difficolta scelta*/
						switch(difficolta){
                            case 1:{
                                facile();
                                break;
                            }
                            case 2:{
                                medio();
                                break;
                            }
                            case 3:{
                                difficile();
                                break;
                            }
                        }
                        printf( ROSSO "\n                                Ok, ho scelto.\n" RESET BIANCO);
                        stampa();
                        aspetta(1);
                        system(clear);
                    }
					/*Conteggio delle mosse, assegnazione del simbolo alle coordinate scelte e stampa della tabella*/
                   	mossa++;
                   	stampa();
					/*Controlla se qualcuno ha vinto*/
                   	if(controlla(1)||controlla(2)){
                       	vittoria=1;
                       	break;
                    }
					/*Cambia il turno del giocatore*/
                   	if(giocatore==1)
						giocatore=2;
                    else
                   		giocatore=1;
               	}
               	while(!vittoria && mossa<M*M);
               	system(clear);
               	stampa();
				printf(ROSSO);
				/*Stampa il risultato della partita, mette in pausa, rompe lo switch e ritorna al menu*/
               	if((!controlla(1) && !controlla(2)) && difficolta==1)
                   	printf("                        Pareggio, potevi fare di meglio.\n\n");
				else{
					if((!controlla(1) && !controlla(2)) && difficolta==2)
						printf("                     Pareggio, ci eri quasi, riprova...\n\n");
					else{
						if((!controlla(1) && !controlla(2)) && difficolta==3){
							if(!os)
								printf("                Pareggio, ti %c andata gi%c bene...\n\n",138,133);
							else
								printf("                Pareggio, ti è andata già bene...\n\n");
                        }
                    }
                }
               	if(controlla(2) && difficolta==1)
                   	printf("   Hai perso. Ti sei fatto battere da delle mosse pseudocasuali, complimenti.\n\n");
                else {
                    if(controlla(2) && difficolta==2)
                        printf("                        Hai perso. Dai... lo potevi battere.\n\n");
                    
                    else{
                        if(controlla(2) && difficolta==3)
                            printf("                   Lo sai... non puoi battere il minimax.\n\n");
                    }
                }
                if(giocatore==1 && difficolta==1)
                    printf("                 Bravo, hai battuto uno che mette crocette a caso!\n\n");
                
                else{
                    if(giocatore==1 && difficolta==2){
                        if(!os)
                            printf("                            Bravo, non %c stato facile!\n\n",138);
                        else
                            printf("                            Bravo, non è stato facile!\n\n");
                    }
                    else{
                        if(giocatore==1 && difficolta==3){
                            printf("                      Impossibile!! Non hai vinto!!!\n");
                            if(!os)
                                printf("       Sei vedi questo messaggio sicuramente c'%c qualcosa che non va.\n\n",138);
                            else
                                printf("       Sei vedi questo messaggio sicuramente c'è qualcosa che non va.\n\n");
						}
					}
				}
				pausa();
				break;
			}
			case 3:{
				/*Case per la scelta delle modalità di input*/
				system(clear);
				do{
					system(clear);
					printf("\n	    Vuoi usare il tastierino numerico o le coordinate"ROSSO"[T,C]"RESET BIANCO"?\n");
					getchar();
                    scanf("\n%c",&a);
                }while(a!='T' && a!='C' && a!='t' && a!='c');
                if(a=='T'||a=='t')
                    tastierino=1;
                else
                    tastierino=0;
                if(tastierino==1){
                    system(clear);
					printf(SOTTOLINEATO GIALLO"\n                            Istruzioni per giocare:                             \n\n" RESET BIANCO);
                    printf(ROSSO"\n             *"RESET BIANCO" Usa il tastierino come se fosse la tabella del tris.\n");
					if (!os)
						printf(ROSSO"             *"RESET BIANCO" Ad esempio il tasto 5 %c il centro.\n",138);
                    else
						printf(ROSSO"             *"RESET BIANCO" Ad esempio il tasto 5 è il centro.\n");
					printf(ROSSO"             *"RESET BIANCO" Divertiti.\n\n");
                }
                else{
                    system(clear);
                    printf(SOTTOLINEATO GIALLO"\n                            Istruzioni per giocare:                             \n\n" RESET BIANCO);
                    if(!os)
                        printf(ROSSO"     * "RESET BIANCO"Il tris %c contenuto in una tabella numerica:\n",138);
                    else
                        printf(ROSSO"     * "RESET BIANCO"Il tris è contenuto in una tabella numerica:\n");
                    
                    printf("       Le coordinata della mosssa vanno in indicate con: x,y.\n");
                    printf("       x sono le righe e y le colonne.\n\n");
                    printf(ROSSO"     * "RESET BIANCO"Ricordati che stai parlando di un'array: quindi si conta da 0:\n");
                    if(!os)
                        printf("       la casella nella 1%c riga nella 1%c colonna ha quindi coordinate 0,0.\n\n",248,248);
                    else
                        printf("       la casella nella 1° riga nella 1° colonna ha quindi coordinate 0,0.\n\n");
                    printf(ROSSO"     * "RESET BIANCO"Divertiti.\n\n");
                }
                pausa();
                break;
            }
            case 4:{
				/*About*/
               	system(clear);
				printf(SOTTOLINEATO GIALLO"\n                                Tris in stile C                                 \n\n" RESET BIANCO);
                if (!os)
                    printf("\n  Questo gioco %c stato sviluppato da Michele Guerini Rocco in una fredda notte \n  di premiazioni e sistemato per l'intero anno successivo.\n\n",138);
                else
                    printf("\n  Questo gioco è stato sviluppato da Michele Guerini Rocco in una fredda notte \n  di premiazioni e sistemato per l'intero anno successivo.\n\n");
                pausa();
                break;
            }
        }
        
    }while (scelta!=5);
    return 0;
}