#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <FMOD/fmod.h>

void Color(int couleurDuTexte,int couleurDeFond);

void sleep( int nbr_seconds );

int main ( int argc, char** argv )
{
    FMUSIC_MODULE *musique = NULL;
    FSOUND_SAMPLE *gagne = NULL;
    FSOUND_SAMPLE *perd = NULL;


    FSOUND_Init(44100, 32, 0);

    musique = FMUSIC_LoadSong("musiquefond.mid");
    gagne = FSOUND_Sample_Load(FSOUND_FREE, "gagne.wav", 0, 0, 0);
    perd = FSOUND_Sample_Load(FSOUND_FREE, "perdu.wav", 0, 0, 0);

    FMUSIC_SetLooping(musique, 1); // Répétition infinie
    FMUSIC_PlaySong(musique);


    srand(time(NULL));
    long nombreMystere = 0, nombreEntre = 0, refaireparti = 1;

    do
    {

    int x;
    int wait = 3;
    long choixmenu = 1;
    long coup = 0;
    const long  MIN = 1;
    long MAX = 100;
    long multi = 0;
    long essai = 10;
    Color(14,0);
    printf(" ------------------------------------------------------------------------------ ");
    printf("|                  Bienvenue dans le Jeu plus ou moins !                      |\n");
    printf(" ------------------------------------------------------------------------------ \n\n\n");

    printf("Regle du jeu. Trouvez le nombre mystere entre 1 et 100, 1 et 500 ou 1 et 1000.\n\n");
    printf("=======Menu=======\n");
    printf("Choisissez votre option:\n");
    printf("1.)Niveau1 1 a 100(9 essais)\n2.)Niveau2 1 a 500(10 essais)\n3.)Niveau3 1 a 1000(14 essais)\n4.)Mode 2joueur\n");
    scanf(" %ld", &choixmenu);
    system("CLS");

    switch(choixmenu)
     {
         case 1:
            MAX = 100;
            nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
            printf("\n");
            printf("Selection d'un nombre aleatoire |");

            for (x = 1; x <= wait; x++)
            {
                printf(".");
                fflush(stdout);

                sleep( (int) 1 );
            }
                        printf("|");
                        system("CLS");

         break;

         case 2:
            MAX = 500;
            nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
            printf("\n");
            printf("Selection d'un nombre aleatoire |");
            for (x = 1; x <= wait; x++)
            {
                printf(".");
                fflush(stdout);

                sleep( (int) 1 );
            }
            printf("|");
            system("CLS");
            essai = 10;
         break;

         case 3:
            MAX = 1000;
            nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
            printf("\n");
            printf("Selection d'un nombre aleatoire |");
            for (x = 1; x <= wait; x++)
            {
                printf(".");
                fflush(stdout);

                sleep( (int) 1 );
            }
            printf("|");
            system("CLS");
            essai = 14;
         break;

         case 4:
         system("CLS");
         printf("\n");
         printf("Joueur 1, fermez les yeux ou partez. 1.) pour ok\n");
         scanf("%ld", &multi);
         system("CLS");
         printf("\n");
         printf("Joueur 1, rentrez un nombre entre 1 et un autre nombre convenu\navec le joueur2(le joueur 2 a 12 essais).");
         Color(0,0);
         scanf("%ld", &nombreMystere);
         essai = 12;
        system("CLS");

         break;

         default:
         system("CLS");
         printf("\n");
         printf("Vous n'avez pas entre un niveau, nous allons vous mettre au niveau1.\n");
         break;
     }


    Color(14,0);
    printf("\nA vous de jouer!!\n");


    do
    {

        Color(12,0);
        printf("Quel est le nombre ? \n");
        scanf("%ld", &nombreEntre);
        coup++;
        essai--;

        if (nombreMystere > nombreEntre)
        {
            printf("C'est plus !Il vous reste %d essai\n\n", essai);
        }
        else if(nombreMystere < nombreEntre)
        {
            printf("C'est moins !Il vous reste %d essai\n\n", essai);
        }
        else
        {
            printf ("");
        }
        if (essai == 0 && nombreMystere != nombreEntre)
        {
            system("CLS");
            Color(12, 0);
            FSOUND_PlaySound(FSOUND_FREE, perd);
            printf("Desole, vous avez perdu!\n");
            nombreMystere = nombreEntre;
        }

        else if(nombreMystere == nombreEntre)
        {
            system("CLS");
            Color(10, 0);

            printf ("Bravo, vous avez trouve le nombre mystere !!!\n\n");
            FSOUND_PlaySound(FSOUND_FREE, gagne);
            printf("Vous avez reussi en %ld coups!\n", coup);
            system("CLS");
        }
        else
        {

        printf("");
        }



            } while (nombreEntre != nombreMystere);

        printf ("Voulez-vous refaire une partie?\n1 pour oui. 0 pour non:\n");
        scanf("%ld", &refaireparti);
        system("CLS");

        Color(14,0);
     }while (refaireparti == 1) ;
    FMUSIC_FreeSong(musique); // Déchargement de la chanson
    FSOUND_Sample_Free(gagne);
    FSOUND_Sample_Free(perd);
    FSOUND_Close();

    }

void Color(int couleurDuTexte,int couleurDeFond) // fonction d'affichage de couleurs
{
        HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute(H,couleurDeFond*16+couleurDuTexte);
}

void sleep( int nbr_seconds)
{
    clock_t goal;

    goal = (nbr_seconds * CLOCKS_PER_SEC ) + clock();

    while(goal > clock() )
    {
        ;
    }
}