#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
#include <string>

using namespace std;

int main()
{
    cout << "Bienvenue dans le programme de baston développé par du mais !!! XD" << endl;

    /// Initialisation
    // Initialisation du random
    srand(time(0));

    // Tableau de caractéristiques
    int Caracteristique[2][4]; // [joueur][caracteristique]

    /*
    Caracteristique == Vitesse
    Caracteristique == Defense en %
    Caracteristique == Vie
    Caracteristique == Attaque
    */

    // Chaines de caracteres
    string nomPerso1;
    string nomPerso2;
    string phraseDeVictime;
    string nomPari;

    // Variables
    int nbRand1;
    int taille;
    char lettre;
    const char refe('-');

    // Ouverture du fichier des noms
    ifstream monFlux("Perso.txt");
    monFlux.seekg(0, ios::end);
    taille = monFlux.tellg() ;

    /// Choix des noms
    // Joueur 1
    nbRand1 = rand () % (taille-7);
    monFlux.seekg(nbRand1, ios::beg);

    do{
        monFlux.seekg(0, ios::cur);
        monFlux.get(lettre);
    } while(lettre != refe);

    getline( monFlux, nomPerso1 );

    // Joueur 2
    nbRand1 = rand () % (taille-7);
    monFlux.seekg(nbRand1, ios::beg);

    do{
        monFlux.seekg(0, ios::cur);
        monFlux.get(lettre);
    } while(lettre != refe);

    getline( monFlux, nomPerso2 );

    monFlux.close();

    // Affichage de début
    cout << "Les paris sont ouverts !!!" << endl;
    cout << nomPerso1;
    cout << " (1) va se battre contre ";
    cout << nomPerso2;
    cout << " (2)" << endl << endl;

    /// Pari
    // Choix joueur
    do{
        cout << "Sur qui voulez-vous parier ?" << endl;
        cin >> nomPari;
        if( nomPari != "1" && nomPari != "2" ) {
            cout << "Ce nombre ne correspond a aucuns des combattants..." << endl;
        }
    } while (nomPari != "1" && nomPari != "2");

    // Choix des caractéristiques
    for (int i=0; i<4;i++){
        Caracteristique[0][i] = rand() % 21;
    }
    for (int i=0; i<4;i++){
        Caracteristique[1][i] = rand() % 21;
    }

    //Cheat Perso
    if(nomPerso1 == "CeciEstCoderEnC++ParMariusEtBruce" || nomPerso1 == "°°°°°°°°"){
        Caracteristique[0][0] = 666;
        Caracteristique[0][1] = 666;
        Caracteristique[0][2] = 666;
        Caracteristique[0][3] = 666;
    }
    if(nomPerso2 == "CeciEstCoderEnC++ParMariusEtBruce" || nomPerso2 == "°°°°°°°°"){
        Caracteristique[1][0] = 666;
        Caracteristique[1][1] = 666;
        Caracteristique[1][2] = 666;
        Caracteristique[1][3] = 666;
    }

    //Affichage des caractéristiques
    cout << endl;
    cout << "Stats pour " << nomPerso1 << endl;
    cout << endl;
    cout << "Vitesse : " << Caracteristique[0][0] << endl;
    cout << "Defense : " << Caracteristique[0][1] << endl;
    cout << "Vie : " << Caracteristique[0][2] << endl;
    cout << "Attaque : " << Caracteristique[0][3] << endl;
    cout << endl;
    cout << "Stats pour " << nomPerso2 << endl;
    cout << endl;
    cout << "Vitesse : " << Caracteristique[1][0] << endl;
    cout << "Defense : " << Caracteristique[1][1] << endl;
    cout << "Vie : " << Caracteristique[1][2] << endl;
    cout << "Attaque : " << Caracteristique[1][3] << endl;
    cout << endl;
    cout << nomPerso1 << ": Prepare toi a mourrir !" << endl;
    cout << nomPerso2 << ": Tu mourras avant moi !" << endl;
    cout << endl;

    /// Boucle de combat
    int Ordre = 0;

    while(Caracteristique[1][2] > 0 && Caracteristique[0][2] > 0)
    {
        int Prems = 0;
        do
        {
            if ( (Caracteristique[0][0]<Caracteristique[1][0] && Ordre == 0) || Ordre == 2 )
            {
                int Degats1 = Caracteristique[1][3] - Caracteristique[0][1]*0.4;

                if (Degats1 <= 0)
                {
                    Degats1 = 1 ;
                }

                Caracteristique[0][2] = Caracteristique[0][2] - Degats1;
                Prems = 1;

                cout << nomPerso2 << " inflige " << Degats1 << " a " << nomPerso1 << endl;

                if (Caracteristique [0][2] <= 0)
                {
                    Caracteristique [0][2] = 0;
                }

                cout << "Il reste " << Caracteristique [0][2] << " PV a " << nomPerso1 << endl;
                Ordre = 1;
            }
            else if ((Caracteristique[0][0]>Caracteristique[1][0] && Ordre == 0) || Ordre == 1)
            {
                int Degats1 = Caracteristique[0][3] - Caracteristique[1][1]*0.4;

                if (Degats1 <= 0)
                {
                    Degats1 = 1 ;
                }

                Caracteristique[1][2] = Caracteristique[1][2] - Degats1;
                Prems = 1;
                cout << nomPerso1 << " inflige " << Degats1 << " a " << nomPerso2 << endl;

                if (Caracteristique [1][2] <= 0)
                {
                    Caracteristique [1][2] = 0;
                }

                cout << "Il reste " << Caracteristique [1][2] << " PV a " << nomPerso2 << endl;
                Ordre = 2 ;
            }
            else
            {
                int nki = rand() % 2;
                Caracteristique[nki][0] =- 1;
            }
        } while(Prems == 0);
    }

    // Choix de la mort
    ifstream fileStream("Phrases.txt");
    fileStream.seekg(0,ios::end);
    taille = fileStream.tellg() ;
    nbRand1 = rand () % (taille-11);
    fileStream.seekg(nbRand1, ios::beg);

    do{
        fileStream.seekg(0, ios::cur);
        fileStream.get(lettre);
    } while(lettre != refe);

    getline(fileStream,phraseDeVictime);

    // Test de la mort pour affichage
    if( Caracteristique[1][2] <= 0 ){
        cout << nomPerso1 << " " << phraseDeVictime  << nomPerso2 << endl;
        if(nomPari == "1"){
            cout << "Vous avez reussi votre pari ! Bravo !" << endl;
        }
        else{
            cout << "Vous avez perdu votre pari... Dommage..." << endl;
        }
    }
    else{
        cout << nomPerso2 << " " << phraseDeVictime << nomPerso1 << endl;
        if(nomPari == "2"){
            cout << "Vous avez reussi votre pari ! Bravo !" << endl;
        }
        else{
            cout << "Vous avez perdu votre pari... Dommage..." << endl;
        }
    }

    fileStream.close();

    return 0;
}