diff --git a/grille.cpp b/grille.cpp index 4b1d0c042a864a37ad34507d4cbd860d52d415f0..0a8b92ac6e720df3c8ee058e211b7ca8757a9a64 100644 --- a/grille.cpp +++ b/grille.cpp @@ -7,11 +7,11 @@ using namespace std; Grille::Grille(QObject *parent) : QObject(parent){ - ifstream myFile("./grilles/grilleFacile.csv"); //choisir la grille ici - string ligne[9]; + // lecture d'un fichier + ifstream myFile("./grilles/grilleFacile.csv"); //choix de la grille pour l'instant, il faudrait le passer en argument + string ligne[9]; int i = 0; - while(myFile.good() & (i<9)){ getline(myFile,ligne[0],'|'); getline(myFile,ligne[1],'|'); @@ -22,15 +22,17 @@ Grille::Grille(QObject *parent) : QObject(parent){ getline(myFile,ligne[6],'|'); getline(myFile,ligne[7],'|'); getline(myFile,ligne[8],'\n'); - for(int k=0;k<9;k++){ - if (ligne[k]!="."){ + for(int k=0;k<9;k++) + if (ligne[k]!=".") grille[i][k]=ligne[k]; - } - } i++; } + + // affichage de la grille de départ dans la fenêtre de debug Print(); - matriceToVectors(); + + // définition de valeurs à partir de grille + grilleToValeurs(); // coloriage des cases en blanc QList<QString> colors_case; @@ -40,12 +42,15 @@ Grille::Grille(QObject *parent) : QObject(parent){ for(int j =0;j<9;j++){ colors.push_back(colors_case); } - isSaved = 0; } void Grille::save_grid(){ - //save the current play + /* save the current play */ + + // initialisation des variables + isSaved = 0; + // écriture d'un nouveau fichier - on ne peut pour l'instant pas choisir le nom du fichier ni le dossier de sauvegarde ofstream myFile("./grilles/grid_current.csv"); for (int i=0;i<9;i++){ for (int j=0;j<8;j++){ @@ -63,18 +68,20 @@ void Grille::save_grid(){ myFile << "\n"; } myFile.close(); - cout << "enregistrement en cours" << endl; isSaved = 1; + + // signal à la partie QML gameIsSaved(); - cout << "saved" << isSaved << endl; } void Grille::verif_matrice(){ - // verifie si la grille remplie par le joueur vérifie les règles du sudoku ou non + /* verifie si la grille remplie par le joueur vérifie les conditions de victoire du sudoku ou non */ + + // initialisation des variables bool victoire = true; - list<string> lok= {"1", "2", "3", "4", "5", "6","7","8", "9"}; + list<string> liste_test= {"1", "2", "3", "4", "5", "6","7","8", "9"}; // vérification par ligne for(int i=0; i<9; i++){ @@ -83,7 +90,7 @@ void Grille::verif_matrice(){ L.push_back(grille[i][j]); } L.sort(); - victoire = victoire && (L==lok); + victoire = victoire && (L==liste_test); } // vérification par colonne @@ -93,8 +100,9 @@ void Grille::verif_matrice(){ L.push_back(grille[j][i]); } L.sort(); - victoire = victoire && (L==lok); + victoire = victoire && (L==liste_test); } + // vérification par case 3x3 for(int l=0; l<3;l++){ for(int c = 0; c<3; c++){ @@ -105,25 +113,28 @@ void Grille::verif_matrice(){ } } L.sort(); - victoire = victoire && (L==lok); + victoire = victoire && (L==liste_test); } } - verif = victoire; + + // signal à la partie QML emit verifClicked(); } -void Grille::set_chiffre_actif(int i){ +void Grille::changer_valeur_bouton(int i){ + /* fait la même chose que changer_valeur mais à l'aide des boutons de la fenêtre graphique */ + changer_valeur(i, caseselected[0], caseselected[1]); + + // signal à la partie QML emit chiffreActifChanged(); } -void Grille::matriceToVectors(){ - //passage d'un array nommé grille de taille 9x9 de string à valeurs qui est une QList<QList<QString>> - QList<QString> case1,case2,case3,case4,case5,case6,case7,case8,case9; - - // on peut encore simplifier tout ca +void Grille::grilleToValeurs(){ + /*conversion d'un array nommé grille de taille 9x9 de string à valeurs qui est une QList<QList<QString>> */ + QList<QString> case1,case2,case3,case4,case5,case6,case7,case8,case9; for(int i=0;i<3;i++){ for (int j=0;j<3;j++){ case1.append(QString::fromStdString(grille[i][j])); @@ -141,7 +152,7 @@ void Grille::matriceToVectors(){ } void Grille::colorer_X(int i, int l){ - // coloriage dans les carrés i à i+3 de la ligne l + /* coloriage dans les carrés i à i+3 de la ligne l */ for(int k =i;k<i+3;k++) for(int m=l*3;m<l*3+3;m++) colors[k][m]="#eaeaea"; @@ -292,7 +303,7 @@ void Grille::changer_valeur(int valeur, int Carre,int Case){ cout << "impossible de modifier la valeur" << endl; - matriceToVectors(); + grilleToValeurs(); // affichage de la grille Print(); diff --git a/grille.h b/grille.h index 5407b140dd6d8ad7b6f5822b6071c544ce1ae0ee..4badef9dc0ac070ce44d4584bf4d7ae97df4e142 100644 --- a/grille.h +++ b/grille.h @@ -9,45 +9,41 @@ class Grille : public QObject { Q_OBJECT + Q_PROPERTY(bool saved MEMBER isSaved NOTIFY gameIsSaved) + Q_PROPERTY(int coloration MEMBER chiffre_IsActif NOTIFY chiffreActifChanged) Q_PROPERTY(QList<QList<QString>> values MEMBER valeurs NOTIFY valChanged) Q_PROPERTY(QList<QList<QString>> colors MEMBER colors NOTIFY focusChanged) Q_PROPERTY(int verifier MEMBER verif NOTIFY verifClicked) - Q_PROPERTY(int coloration MEMBER chiffre_IsActif NOTIFY chiffreActifChanged) - Q_PROPERTY(bool saved MEMBER isSaved NOTIFY gameIsSaved) public: explicit Grille(QObject *parent = nullptr); + void Print(); + + Q_INVOKABLE void save_grid(); Q_INVOKABLE void changer_valeur(int valeur, int Carre,int Case); + Q_INVOKABLE void changer_valeur_bouton(int i); Q_INVOKABLE void colorer_voisins( int Carre,int Case, bool focus); Q_INVOKABLE void verif_matrice( ); - Q_INVOKABLE void set_chiffre_actif(int i); - Q_INVOKABLE void save_grid(); - void Print(); - - private: - void matriceToVectors(); + void grilleToValeurs(); void colorer_X(int i, int l ); void colorer_Y(int i, int c ); QList<QList<QString>> colors; // contient les couleurs de chaque case QList<QList<QString>> valeurs; // contient les valeurs de chaque case sous forme de Qstring - string grille[9][9]; - int caseselected[2] = {0,0};// contient les valeurs de chaque case sous forme de string - int verif; - int chiffre_actif; + string grille[9][9]; // idem que valeurs mais sous forme de string + int caseselected[2] = {0,0}; // contient les valeurs de chaque case sous forme de string + int verif; // on sait si l'on a gagné ou pas + int chiffre_actif; // le chiffre qui est sélectionné avec les boutons int chiffre_IsActif; - int isSaved; - - + int isSaved; // le jeu a-t-il été sauvegardé ou non - pas utilisé pour l'instant signals: - void valChanged(); - void focusChanged(); + void valChanged(); // la valeur d'une case a été modifiée + void focusChanged(); // la sélection a changée void verifClicked(); - void chiffreActifChanged(); - void gameIsSaved(); - + void chiffreActifChanged(); // le chiffre actif a été modifié + void gameIsSaved(); // la partie actuelle a été enregistrée }; #endif // GRILLE_H diff --git a/main.qml b/main.qml index 9ddaf3355e4e00dc7a315417791e551d038c9173..b55798d3b2b194afb53aadde5576538df4948ea5 100644 --- a/main.qml +++ b/main.qml @@ -38,7 +38,7 @@ Window { } function set_chiffre_actif(i){ - vueObjetCpt.set_chiffre_actif(i); + vueObjetCpt.changer_valeur_bouton(i); var chiffre_IsActif = vueObjetCpt.coloration var values = vueObjetCpt.values; var l