/****************************************************************************
** ui.h extension file, included from the uic-generated form implementation.
**
** If you wish to add, delete or rename slots use Qt Designer whibool will
** update this file, preserving your code. Create an init() slot in place of
** a constructor, and a destroy() slot in place of a destructor.
*****************************************************************************/
//on inclu 3 bibliothèques
#include <stdlib.h>
#include <qstring.h> 
#include <qobjectlist.h>
////////////////////////////////////////////////////////////////fonction init()//////////////////////////////////////////////////////////////////////

void Form1::init()
{
    //on initialise la fonction qui permet de trouver une nombre aléatoirement
    srand((uint) time(NULL));
    //lance la fonction jouer
    jouer();
}

///////////////////////////////////////////////////////////////////////fonction jouer()///////////////////////////////////////////////////////////////

void Form1::jouer()
{
    //on créer une variable aplha qui va nous permettre de dire au jouer
    //le nombre d'erreur qu'il a encore le droit de faire
    QString alpha="10";
    //on l'affiche 
    textLabelnbfalse->setText(alpha);
     //on créer une variable beta qui indique au joueur que l'on ne connait pas le mot à rechercher
    QString beta="?";
    //on l'affiche
    textLabelRechercher->setText(beta);
    //on déclare une variable qui va compter le nombre de mauvaise lettre que le joueur séléctionne
    nbfalse=10;
   //on déclare une variable qui va compter le nombre de bonne lettre que le joueur séléctionne
    nbok=0;
   //on rend le clavier du jeu actif
    ButtonGroup1->setEnabled(true);
      //ouverture du fichier qui contient les différents mots à rechercher
     FILE * fmot;
     fmot=fopen("fichierMots.txt","r");
          QTextIStream ficMot(fmot);
     QString ligneMots;
        //lecture du fichier
     //tant que l'on est pas à la fin du fichier
     while(!ficMot.atEnd())
    {
     ficMot>>ligneMots;
     SLMot.append(ligneMots);
    }//fin du while
    //on prend aléatoirement un mot dans le fichier
     j=rand()%29;
      //on séléctionne un mot selon j (notre variable aléatoire)
     motRech=SLMot[j];
     //la variable SLLettre prend la valeur de motRech
     SLLettre=motRech;
     //on compte le nombre de lettres qu'il y a dans le mot
     NbLettreListe=SLLettre.length();
     //on créer une variable texte afin de pouvoir afficher le nombre de lettre qu'il y a dans le mots
     QString valNbLettre;
     //on transforme la variable de type entier en variable de type texte afin de pouvoir l'afficher
     valNbLettre=valNbLettre.setNum(NbLettreListe);  
      //on affiche le nombre de lettre que contient le mot
     textLabelLettres->setText(valNbLettre);
     //on déclare un tableau de n éléments selon le nombres de lettres que contient le mot
     tableau->setNumCols(NbLettreListe);
     //on déclare le tableau à 1 seule ligne
     tableau->setNumRows(1);
     //on définie la taille de chaque colonne pour qu'elles soient de la taille de lettre et non immense
    	     tableau->setColumnWidth(0,25);
	      tableau->setColumnWidth(1,25);
	      tableau->setColumnWidth(2,25);
	      tableau->setColumnWidth(3,25);
	      tableau->setColumnWidth(4,25);
	      tableau->setColumnWidth(5,25);
	      tableau->setColumnWidth(6,25);
	      tableau->setColumnWidth(7,25);
	      tableau->setColumnWidth(8,25);
	      tableau->setColumnWidth(9,25);
	      tableau->setColumnWidth(10,25);
	      tableau->setColumnWidth(11,25);
	      tableau->setColumnWidth(12,25);
	      tableau->setColumnWidth(13,25);
	      tableau->setColumnWidth(14,25);
	      tableau->setColumnWidth(15,25);
	      tableau->setColumnWidth(16,25);
 }//fin de la fonction
 
//////////////////////////////////////////////////////////////fonction lettre()////////////////////////////////////////////////////////////////

void Form1::lettre()
{
    //on créer une variable po afin de savoir si la lettre tapé est fausse ou pas
    //afin de pouvoir décrémenter le nombre d'erreur encore possible (nbfalse)
   int po=0;
    //on prend la lettre du bouton sur lequel l'utilisateur a appuyer
    QPushButton *  bt = (QPushButton *) sender ();
    // on met dans la variable LChoisie la valeur du bouton que l'on viens de séléctionner afin de l'afficher
    QString Lchoisie=bt->text();
    //on affiche à l'écran la lettre qu'il a choisi
    textLabel4->setText(Lchoisie);
    //on met po part défaut à 2 avant de rentré dans la boucle
    po=2;
    //on test pour voir si la lettre est dans le mot à chercher
    for (uint n=0;n<NbLettreListe;n++)
   {
	
	//on met dans la variable liste une lettre du mot afin de voir si c'est celle choisie par l'utilisateur
	QChar chliste=SLLettre.at(n);
	//on créer une variable de type texte à laquelle on met le caractère chliste du mot
	QString liste(chliste); 
	//si les lettres coincides alors
	if (Lchoisie==liste)
	{
	    //  on met dans la case du tableau la lettre à son bon emplacement
	    tableau->setText(0,n,Lchoisie);
	    //on incrémente le nombre de bonnes lettres
	    nbok++;
	    //on met po à 1
	    po=1;
	}//fin de la condition if
} //fin du for
    //si la lettre choisie n'appartient pas au mot alors
    if (po==2)
    {
	//on décrémente le nombre de lettres mauvaises
	nbfalse--;
    }//fin du if
    //on créer une variable de type texte afin de pouvoir transformer la variable nbfalse et l'afficher
  QString nbfalse2;
  //on transforme la variable nbfalse en texte
  nbfalse2=nbfalse2.setNum(nbfalse);
  //on affiche le nombre d'erreur auquels le joueur à encore droit
textLabelnbfalse->setText(nbfalse2);
   //on bloque le bouton qu'il a selectionner afin qu'il le ne selectionne plus
   bt->setEnabled(false);  
   //si l'utilisateur à trouver touttes les lettres qu'il fallait pour le mot
   if (nbok==NbLettreListe)
   {
       //on lui affiche le mot
         textLabelRechercher->setText(motRech);
       //on met dans une variable texte le message à afficher
       QString resultat="BRAVO, <br>tu as le droit de rejouer<BR>";
       //on affiche le message
       textLabelResultat->setText(resultat);
       //on met les touches inutilisables 
       ButtonGroup1->setEnabled(false);
   }//fin du if
   //on créer une variable qui est initialisé à 0 et avec laquelle on va comparer la variable du nombre d'erreurs encore possible
   uint nb=0;
    //si l'utilisateur a tapé 10 mauvaises lettres alors
   if (nbfalse==nb)
   {
       //on lui affiche le mot
       textLabelRechercher->setText(motRech);
       //on créer une variable qui sera servis afin d'annoncé au joueur qu'il a perdu
       QString resultat=" PERDU, <br>mais tu as tout de même le droit de rejouer !<br>";
        //on lui affiche un message d'erreur
       textLabelResultat->setText(resultat);
       //on met les touches inutilisables 
       ButtonGroup1->setEnabled(false);
   }//fin du if
   
}//fin de la fonction
   
//////////////////////////////////////////////////////////////fonction nouvelle()///////////////////////////////////////////////////////////

void Form1::nouvelle()
{    
    //on créer une variable qui est nulle afin que s'efface le message de réussite ou de perte
    QString efface=" ";
    //on affiche la variable
     textLabelResultat->setText(efface);
    //on créer une liste d'objet de boutons
    QObjectList *l = topLevelWidget()->queryList( "QPushButton" );
   // iterateur sur la liste des boutons
    QObjectListIt it( *l ); 
    //un objet de la liste
    QObject *obj; 
//tant que l'on a pas fait le tour du clavier
    while ( (obj = it.current()) != 0 ) 
    {
        //pour chaque objet trouver
        ++it;
	//on remet le bouton de la lettre utilisable
        ((QPushButton*)obj)->setEnabled( TRUE);
    }//fin du while
    //on efface la liste mais pas l'objet
    delete l; 
 //on réalise une boucle jusuq'à 30 (aucun mot ne comporte plus de 30 lettres)
 for (int u=0;u<=30;u++)
 {
	//on met le tableau vide afin d'y mettre le nouveau mot
	tableau->clearCell (0,u);
 }//fin du for
 //on met à vide la case qui affiche la lettre saisie
textLabel4->setText(efface);
 //on envoie la fonction jouer()
 jouer();

}//fin de la fonction
