#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main ( int argc, char** argv )
{
    long nombreMystere = 0, nombreEntre = 0, nombreCoups = 0, nombreParties = 1, nombreMin = 1, nombreMax, nombreLettre;
    long choixDifficulte = 0, choixFinPartie = 1, choixMode, choixTableauScore, choixContinuer;
    long continuerTableauScore = 0, continuerChoixMode = 1, continuerJeu = 1, continuerJoueur;
    long record[6], i, c, mode, joueur = 2, score, scoreJoueur1, scoreJoueur2;
    
    for (i = 0; i < 6; ++i)
        record[i]= 999;
    
    while (continuerJeu) // Tant que le joueur décide de jouer, il joue :p
    {         
        while (continuerChoixMode)
        {
            system("cls");
            
            printf("=============================\n");
            printf("= Le jeu du \"Plus ou moins\" =\n");
            printf("=============================\n");
            printf("\n");
            printf("Choissez le mode de jeu\n");
            printf("\n");
            printf("1.Mode solo\n");
            printf("2.Joueur1 VS Ordinateur\n");
            printf("3.Joueur1 VS Joueur2\n");
            printf("4.Regles\n");
            printf("\n");
            printf("Faites votre choix : ");
            scanf("%ld", &choixMode);
            printf("\n");
            
            if (choixMode < 4 && choixMode > 0)
                continuerChoixMode = 0;
            
            if (choixMode == 4)
            {
                system("cls");
                
                printf("==========\n");
                printf("= Regles =\n");
                printf("==========\n");
                printf("\n");
                printf("Le but du jeu est de trouver un nombre mystere genere part l'or-\n");
                printf("dinateur et qui est definit par des bornes. Celles-ci sont defi-\n");
                printf("ies avant de commencer a jouer.\n");
                printf("\n");
                system("pause");
            }
        } // Fin du while (continuerChoixMode)  
        
        system("cls"); // Efface le contenu de la console, pour pas se retrouver avec une barre de défilement de fou ^^
        
        // On affiche le menu
        
        if (!choixDifficulte)
        {
            printf("Avec quelle difficulte voulez vous jouer ?\n");
            printf("\n");
            printf("1.Tres Rapide -> de 1 a 10\n");
            printf("2.Rapide      -> de 1 a 100\n");
            printf("3.Moyen       -> de 1 a 1000\n");
            printf("4.Long        -> de 1 a 10000\n");
            printf("5.Tres long   -> de 1 a 100000\n");
            printf("6.Trop long   -> de 1 a 1000000\n");
            printf("\n");
            printf("7.Definir les limites soit meme\n");
            printf("8.Tableau des scores\n");
            printf("\n");
            printf("Faites votre choix : ");
            scanf("%ld", &choixDifficulte);
            printf("\n");
        }
        
        // A la demande, on affiche le tableau des scores
        
        if (choixDifficulte == 8)
        {
            continuerTableauScore = 1;
        
            while (continuerTableauScore)
            {            
                system("cls");
                
                printf("======================\n");
                printf("= Tableau des scores =\n");
                printf("======================\n");
                printf("\n");
                printf("1. Tres rapide %ld\n", record[0]);
                printf("2. Rapide      %ld\n", record[1]);
                printf("3. Moyen       %ld\n", record[2]);
                printf("4. Long        %ld\n", record[3]);
                printf("5. Tres long   %ld\n", record[4]);
                printf("6. Trop long   %ld\n", record[5]);
                printf("\n");
                printf("Options : \n");
                printf("\n");
                printf("1.Revenir au jeu\n");
                printf("2.Retablir les scores\n");
                printf("\n");
                printf("Faites votre choix : ");
                scanf("%ld", &choixTableauScore);
                
                // On traite la demande...
                
                if (choixTableauScore == 2)
                {
                    for (i = 0; i < 6; ++i)
                        record[i]= 999;
                    
                    continuerTableauScore = 1;
                }
                
                else if (choixTableauScore == 1)
                {
                    continuerTableauScore = 0;
                    choixDifficulte = 0;
                }
                else
                    continuerTableauScore = 1;
            } // Fin du while (continuerTableauScore)
        } // ^ Pareil sauf que c'est le if ^
        else
        {   
            continuerJoueur = 1;
            
            // Suivant le choix du joueur, on définit la limite supérieure
            do
            {
                switch (choixDifficulte)
                {   
                    case 1:
                    nombreMax = 10;
                    break;
                    
                    case 2:
                    nombreMax = 100;
                    break;
                    
                    case 3:
                    nombreMax = 1000;
                    break;
                    
                    case 4:
                    nombreMax = 10000;
                    break;
                    
                    case 5:
                    nombreMax = 100000;
                    break;
                    
                    case 6:
                    nombreMax = 1000000;
                    break;
                    
                    case 7:
                    printf("Borne inferieure : ");
                    scanf("%ld", &nombreMin);
                    printf("\nBorne superieure : ");
                    scanf("%ld", &nombreMax);
                    break;
                    
                    default:
                    nombreMax = 1000;
                    break;
                }
                system("cls");
                
                if (choixMode == 3)
                {
                    if (joueur == 2)
                    {   
                        joueur = 1;
                        choixFinPartie = 0;
                    }
                    
                    else
                    {
                        joueur = 2;
                        continuerJoueur = 0;
                    }
                    printf("Que le joueur %ld, prenne place.\n", joueur);
                    printf("\n");
                }
                else
                    continuerJoueur = 0;
                
                printf("Le nombre mystere se trouve entre %ld et %ld :\n", nombreMin, nombreMax);
                printf("\n");
                
                // Génération du nombre aléatoire
                
                srand(time(NULL));
                nombreMystere = (rand() % (nombreMax - nombreMin + 1)) + nombreMin;
            
                /* La boucle du programme. Elle se répète tant que l'utilisateur
                n'a pas trouvé le nombre mystère */
                
                do
                {
                    // On demande le nombre
                    printf("Quel est ce nombre ? ");
                    scanf("%ld", &nombreEntre);
                    
                    // On incrémente le nombre de coups
                    nombreCoups ++;
                    
                    // On compare le nombre entré avec le nombre mystère
            
                    if (nombreMystere > nombreEntre)
                        printf("C'est plus !\n\n");
                    
                    else if (nombreMystere < nombreEntre)
                        printf("C'est moins !\n\n");
                    
                    else
                    {   
                        printf("\n");
                        printf("Bravo, vous avez trouve le nombre mystere !!!\n\n");
                        
                        switch (nombreCoups)
                        {
                            case 1:
                            printf("Bravo, un seul coup vous a suffit a trouver le bon nombre !\n");
                            break;
        
                            default:
                            printf("Vous totalisez un score de : %ld coups.\n", nombreCoups);
                        }
                        sleep(2000);
                        
                        if (choixMode == 3)
                        {
                            if (joueur == 1)   
                                score = nombreCoups;
                            
                            else
                            {                                
                                if (score > nombreCoups)
                                {    
                                    printf("Bravo joueur 1 vous etes le plus fort de cette manche\n");
                                    scoreJoueur1 ++;
                                }
                                else
                                {   
                                    printf("Bravo joueur 2 vous etes le plus fort de cette manche\n");
                                    scoreJoueur2 ++;
                                }
                            }
                        }
                        
                        // On regarde si c'est un record, et on traite en fonction... biensûr
                        
                        if (nombreCoups < record[choixDifficulte - 1])
                        {  
                           
                           printf("Vous avez battu le record.\n");
                           printf("Nouveau record etabli : ");
                           printf("%ld => %ld\n\n", record[choixDifficulte - 1], nombreCoups);
                           
                           // On met a jour le nouveau record
                           
                           record[choixDifficulte - 1] = nombreCoups;
                        }
                        else
                        {
                           printf("Pas de nouveau record etabli.\n\n");
                        }
                        
                        system("pause");
                        
                        // On demande si on doit relancer une nouvelle part
                        
                        while (choixFinPartie, !continuerJoueur)
                        {
                            system("cls");
                            
                            printf("=================\n");
                            printf("= Fin de partie =\n");
                            printf("=================\n");
                            printf("\n");
                            
                            if (choixMode == 3)
                            {
                                if (joueur == 1)   
                                    score = nombreCoups;
                                
                                else
                                {  
                                    printf("Joueur 1 : %ld points\n", scoreJoueur1);
                                    printf("Joueur 2 : %ld points\n", scoreJoueur2);
                                    printf("\n");
                                    
                                    if (scoreJoueur1 > scoreJoueur2)
                                        printf("C'est le joueur 1 qui possede le plus de points.\n");
                                    
                                    else
                                        printf("C'est le joueur 2 qui possede le plus de points.\n");
                                }
                            }
                            
                            printf("Que voulez-vous faire ?\n");
                            printf("\n");
                            printf("1. Rejouer avec les meme options\n");
                            printf("2. Rejouer en changeant la difficulte\n");
                            printf("3. Rejouer en changeant le mode de jeu.\n");
                            printf("4. Voir le tableau des scores.\n");
                            printf("5. Quittez la partie.\n");
                            printf("\n");
                            printf("Faites votre choix : ");
                            scanf("%ld", &choixContinuer);
                            
                            system("cls");
                            
                            // On traite la demande
                            
                            switch (choixContinuer)
                            {
                                case 1:
                                continuerJeu = 1;
                                continuerJoueur = 1;
                                continuerChoixMode = 0;
                                choixFinPartie = 0;
                                break;
                                
                                case 2:
                                continuerJeu = 1;
                                continuerJoueur = 1;
                                choixDifficulte = 0;
                                continuerChoixMode = 0;
                                choixFinPartie = 0;
                                break;
                                
                                case 3:
                                continuerJeu = 1;
                                continuerJoueur = 1;
                                choixDifficulte = 0;
                                continuerChoixMode = 1;
                                choixFinPartie = 0;
                                break;
                                
                                case 4:
                                continuerJeu = 1;
                                continuerJoueur = 0;
                                continuerTableauScore = 1;
                                choixDifficulte = 8;
                                continuerChoixMode = 0;
                                choixFinPartie = 0;
                                break;
                                
                                case 5:
                                printf ("\n\nMerci d'avoir jouer.\n\n");
                                printf ("Vous avez joue %ld parties.\n\n", nombreParties);
                                printf ("Au revoir et a bientot.\n\n");
                                
                                sleep(3000);
                                return 0;
                                break;
                                
                                default:
                                choixFinPartie = 1;
                            }
                        } // fin du while(!choixFinPartie)
                        
                        // On ré-initialise les variables de jeu
                        nombreParties++;
                        nombreCoups = 0;
                        nombreMin = 1;
                    }
                } while (nombreEntre != nombreMystere);
            } while (continuerJoueur);
        } // fin du else qui lance la part
    } // fin du while (continuerJeu)
} // fin du main

