diff --git a/motus/Clavier.qml b/motus/Clavier.qml index a2f75157dd6c9e86f99903c0b95227555bc22a8e..5e9d0638d13642ce95c0683c0b051c47b3e1b748 100644 --- a/motus/Clavier.qml +++ b/motus/Clavier.qml @@ -7,7 +7,7 @@ Item { columns: 10 spacing: 5 - property string letters: "AZERTYUIOPQSDFGHJKLMWXCVBN" + property string letters: "AZERTYUIOPQSDFGHJKLMWXCVBN0!" Repeater { model: keyboardGrid.letters.length diff --git a/motus/brain.cpp b/motus/brain.cpp index d0513cf4a150f761daefe314541059a92f738f31..b1610c12e9153d1dbb734d90ac171c6e6ad375e0 100644 --- a/motus/brain.cpp +++ b/motus/brain.cpp @@ -4,6 +4,7 @@ #include <iostream> #include <filesystem> #include "grillemanager.h" +#include "fullligneexception.h" using namespace std; namespace fs = std::filesystem; @@ -35,8 +36,25 @@ vector<string> Brain::getTxtFiles() { } void Brain::entreLettre(char lettre) { - std::cout<<lettre<<std::endl; - lignes[nbEssais]->entreLettre(lettre); + if (lettre == '0') { + validateWord(); + return; + } + if (lettre == '!') { + supprLettre(); + lignes[nbEssais]->show(); + return; + } + try { + lignes[nbEssais]->entreLettre(lettre); + lignes[nbEssais]->show(); + } + catch (FullLigneException e) { + cout << e.what() <<endl; + } +} +void Brain::supprLettre() { + lignes[nbEssais]->supprLettre(); } void Brain::trouveMot() { @@ -53,7 +71,6 @@ void Brain::trouveMot() { while (std::getline(file, line)) { if (line.length() - 1 == mTailleMot) { listeMots.push_back(line); - } } @@ -78,6 +95,11 @@ void Brain::initGame() { // Appelé lorsqu'on appuie sur le bouton Start Game try { trouveMot(); + cout << "Réponse : ["; + cout << getMot(); + cout << "]"; + cout << endl; + for (int i=0;i<mNbEssaisMax;i++) { lignes.push_back(new Ligne(getMot())); lignes[i]->initLigne(); @@ -93,6 +115,8 @@ void Brain::initGame() { void Brain::validateWord() { // Appelé lorsqu'on appuie sur le bouton validate du clavier + cout << "Validation de la ligne !" << endl; + Ligne* laligne = lignes[nbEssais]; if (laligne->isGameCleared()) { onGameFinish(true); @@ -107,6 +131,9 @@ void Brain::validateWord() { // void Brain::onGameFinish(bool isWin) { + if (!isWin) { + cout << "Perdu !" << endl; + } // TODO : // Si isWin diff --git a/motus/brain.h b/motus/brain.h index 6308c633fc613df0fea3203a24ae2a1927c03fcb..957046cdb41fd5c19afd05a8777887ddae2d0d5c 100644 --- a/motus/brain.h +++ b/motus/brain.h @@ -23,6 +23,7 @@ public: void onGameFinish(bool isWin); vector<string> getTxtFiles(); void entreLettre(char lettre); + void supprLettre(); private: string dicodir; diff --git a/motus/grillemanager.cpp b/motus/grillemanager.cpp index d765f83ab3c69be180a26c325ede36ec6222e58d..094d663c1fcda3d7ade0f37d700752ddb18102c8 100644 --- a/motus/grillemanager.cpp +++ b/motus/grillemanager.cpp @@ -11,8 +11,8 @@ void GrilleManager::createGrid(int rows, int columns) { int totalCases = rows * columns; for (int i = 0; i < totalCases; ++i) { auto *vraieCase = new VraieCase(this); - vraieCase->setLetter('A' + (i % 26)); // Exemple : lettres de A à Z - vraieCase->setEtat(i % 3); // Exemple : état cyclique (0,1,2) + vraieCase->setLetter('_'); // Exemple : lettres de A à Z + vraieCase->setEtat(0); // Exemple : état cyclique (0,1,2) m_cases.append(vraieCase); } diff --git a/motus/jeu.cpp b/motus/jeu.cpp index 1f788ce662c5ec42727cba6a75f155295ff3dda9..087ccc6f2994376441f2bb8cfe54fc9ad4972065 100644 --- a/motus/jeu.cpp +++ b/motus/jeu.cpp @@ -20,7 +20,6 @@ QString Jeu::getMotAffiche() { } void Jeu::onClavierClick(QString lettre) { - std::cout << lettre.toStdString() << " est appuyée"<< std::endl; brain.entreLettre(lettre.toStdString()[0]); } diff --git a/motus/ligne.cpp b/motus/ligne.cpp index 8bd795bbf1992e39d4564f45204b3c45fbb51090..4f663f195e5c7e387f51da1b71394d0b2726c363 100644 --- a/motus/ligne.cpp +++ b/motus/ligne.cpp @@ -1,8 +1,11 @@ #include "ligne.h" #include "fullligneexception.h" #include "emptyligneexception.h" +#include "iostream" +#include <cctype> +using namespace std; -Ligne::Ligne(string bonmot) : bonmot(bonmot) {} +Ligne::Ligne(string bonmot) : bonmot(bonmot), positionCurseur(0) {} void Ligne::initLigne() { @@ -14,13 +17,26 @@ void Ligne::initLigne() { bool Ligne::isGameCleared() { int nbjustes = 0; for (int i=0;i<bonmot.length();i++) { - int etat = (contenu[i]->getLetter() == bonmot[i]) ? 0 : 1; - etat += Ligne::dansMot(contenu[i]->getLetter(), bonmot); + int etat = (tolower(contenu[i]->getLetter()) == bonmot[i]) ? 0 : 1; + etat += Ligne::dansMot(tolower(contenu[i]->getLetter()), bonmot); contenu[i]->setEtat(etat); + cout << contenu[i]->getLetter() << bonmot[i] << etat << endl; } + show(); return (nbjustes == 2*bonmot.length()); } +void Ligne::show() { + cout << "La ligne : |"; + for (int i=0;i<bonmot.length();i++) { + if (contenu[i]->getEtat() == 1) {cout << "\033[33m";} + if (contenu[i]->getEtat() == 2) {cout << "";} + cout << contenu[i]->getLetter(); + if (contenu[i]->getEtat() >= 1) cout << "\033[31m"; + } + cout << "|" << endl; +} + bool Ligne::dansMot(char lettre, string mot) { for (int i=0;i<mot.length();i++) { if (mot[i] == lettre) { @@ -42,6 +58,7 @@ void Ligne::supprLettre() { if (positionCurseur == 0) { throw EmptyLigneException(); } + cout << "Suppression d'une lettre" << endl; contenu[positionCurseur - 1]->setLetter(' '); positionCurseur--; } diff --git a/motus/ligne.h b/motus/ligne.h index 6f27e62ce5946419e273b478200e1965b72c8a1e..d1857af959db83aaf6d888b912f594e3c36e2489 100644 --- a/motus/ligne.h +++ b/motus/ligne.h @@ -21,6 +21,7 @@ public: bool isGameCleared(); void entreLettre(char lettre); void supprLettre(); + void show(); private: string bonmot;