diff --git a/Carre.qml b/Carre.qml index dc596d6de0d2d820d2f67bf8d6613d7f50c2a452..6c0697d7008b4abcc7f69a7d6703641cdd7d4c3c 100644 --- a/Carre.qml +++ b/Carre.qml @@ -5,25 +5,28 @@ import QtQuick.Controls 1.4 Item { function envoyer_valeur(app){ - var i; - var j; - for(i=0;i<9;i++){ - for(j=0;j<9;j++){ + /* appelle changer_valeur et met à jour les valeurs et couleurs de la grille*/ + + // appel de la fonction changer_valeur + for(var i=0;i<9;i++){ + for(var j=0;j<9;j++){ var carr = repeater.itemAt(i).rep.itemAt(j).input if (app === carr){ vueObjetCpt.changer_valeur(app.text,i,j); } } } + + // signal de retour avec les valeurs var values = vueObjetCpt.values; - var l - var c - for(l=0;l<9;l++){ - for(c=0;c<9;c++){ + for(var l=0;l<9;l++){ + for(var c=0;c<9;c++){ var v = repeater.itemAt(l).rep.itemAt(c).input v.text=values[l][c]; } } + + // signal de retour avec les couleurs var colors = vueObjetCpt.colors; for(i=0;i<9;i++){ for(j=0;j<9;j++){ @@ -34,16 +37,19 @@ Item { } function changer_couleur(app, focus){ - var i; - var j; - for(i=0;i<9;i++){ - for(j=0;j<9;j++){ + /* appelle la fonction colorer_voisins et met à jour les couleurs de la grille*/ + + // appel de la fonction colorer_voisins + for(var i=0;i<9;i++){ + for(var j=0;j<9;j++){ var carr = repeater.itemAt(i).rep.itemAt(j).input if (app === carr){ vueObjetCpt.colorer_voisins(i,j,focus); } } } + + // signal de retour avec les couleurs var colors = vueObjetCpt.colors; for(i=0;i<9;i++){ for(j=0;j<9;j++){ @@ -52,6 +58,7 @@ Item { } } } + property alias rep : repeater1 Grid{ diff --git a/debug/grille.o b/debug/grille.o index 1f2e0a8a098f4fc071d1ffa09c885bfc9e333bc0..d52b1e49189753aa63ee4367db56fd85b1a38002 100644 Binary files a/debug/grille.o and b/debug/grille.o differ diff --git a/debug/sudoku.exe b/debug/sudoku.exe index f5741655d50bd35baf1b74b5489c1f934a554072..b9552f7ec608632c298756fc86d36bff4e0b50fa 100644 Binary files a/debug/sudoku.exe and b/debug/sudoku.exe differ diff --git a/grille.cpp b/grille.cpp index 434ac3a76d2e26dd58ef9701e7f197a86cd280c5..3f89625c9469fb147471ccf6af65a8e1dd496ad6 100644 --- a/grille.cpp +++ b/grille.cpp @@ -122,15 +122,6 @@ void Grille::verif_matrice(){ emit verifClicked(); } -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::grilleToValeurs(){ /*conversion d'un array nommé grille de taille 9x9 de string à valeurs qui est une QList<QList<QString>> */ @@ -177,20 +168,20 @@ void Grille::colorer_voisins( int Carre,int Case,bool focus){ caseselected[0] = Carre; caseselected[1]= Case; + // reset des couleurs de toute la grille en blanc if(focus){ - // reset les couleurs de toute la grille au blanc for(int k =0;k<9;k++){ for(int j =0;j<9;j++){ colors[k][j]="white"; } } - // recolore les cases du carré selectionné + // coloriage des cases du carré selectionné for(int k =0;k<9;k++){ colors[Carre][k]="#eaeaea"; } - //colorer les lignes horizontales + //coloriage de la ligne horizontale switch(Carre/3){ case 0: coloriage_ligne(0,Case/3); @@ -202,7 +193,8 @@ void Grille::colorer_voisins( int Carre,int Case,bool focus){ coloriage_ligne(6,Case/3); break; } - // colorer les lignes verticales + + // coloriage de la ligne verticale switch(Carre%3){ case 0: coloriage_colonne(0,Case%3); @@ -214,30 +206,33 @@ void Grille::colorer_voisins( int Carre,int Case,bool focus){ coloriage_colonne(2,Case%3); break; } - // coloriage des cases avec le même chiffre -- ne fonctionne pour l'instant - if (grille[3*(Carre/3)+(Case/3)][3*(Carre%3)+(Case%3)]!= "" && grille[3*(Carre/3)+(Case/3)][3*(Carre%3)+(Case%3)]!="0"){ - for (int i=0;i<9;i++){ - for (int j=0;j<9;j++){ - if (grille[3*(i/3)+(j/3)][3*(i%3)+(j%3)]==grille[3*(Carre/3)+(Case/3)][3*(Carre%3)+(Case%3)]){ + + // coloriage des cases de la grille avec le même chiffre que celui sélectionné quand c'est possible + if (grille[3*(Carre/3)+(Case/3)][3*(Carre%3)+(Case%3)]!= "" && grille[3*(Carre/3)+(Case/3)][3*(Carre%3)+(Case%3)]!="0") + for (int i=0;i<9;i++) + for (int j=0;j<9;j++) + if (grille[3*(i/3)+(j/3)][3*(i%3)+(j%3)]==grille[3*(Carre/3)+(Case/3)][3*(Carre%3)+(Case%3)]) colors[i][j]="#9eaac8"; - } - } - } - } + // affichage de la grille actualisée dans la fenêtre de debug Print(); + // signal à la partie QML emit focusChanged(); } } void Grille::changer_valeur(int valeur, int Carre,int Case){ + /* modification de la valeur de la case grille[Carre][Case] */ + + //initialisation des valeurs string value =to_string(valeur); - if (value == "0"){ + if (value == "0") value=""; - } - int ligne, colonne; + bool possible=true; + + // passage d'un système de coordonnée [Carre][Case] à un autre [ligne][colonne] switch(Carre){ case 0: colonne = Case%3; @@ -277,22 +272,19 @@ void Grille::changer_valeur(int valeur, int Carre,int Case){ break; } - // on teste si les règles sont respectées - bool possible=true; - - // test sur le carré + // evaluation du respect des règles dans le carré et coloration des cases qui empêchent l'écriture si c'est le cas if(value!=""){ for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ if (grille[3*(ligne/3)+i][3*(colonne/3)+j]==value){ possible=false; - cout <<3*((3*(ligne/3)+i)/3)+(3*(colonne/3)+j)/3<<3*((3*(ligne/3)+i)%3)+(3*(colonne/3)+j)%3<<endl; colors[3*((3*(ligne/3)+i)/3)+(3*(colonne/3)+j)/3][3*((3*(ligne/3)+i)%3)+(3*(colonne/3)+j)%3]="#d14545"; break; } } } - // test sur les lignes et colonnes + + // evaluation sur les lignes et colonnes et coloration des cases qui empêchent l'écriture si c'est le cas for (int j=0;j<9;j++){ if (grille[j][colonne]==value && j!=ligne){ possible=false; @@ -305,20 +297,28 @@ void Grille::changer_valeur(int valeur, int Carre,int Case){ } } + // remplissage de la case si c'est possible if(possible) grille[ligne][colonne]=value; - else - cout << "impossible de modifier la valeur" << endl; - + // update de valeurs grilleToValeurs(); - // affichage de la grille + // affichage de la grille mise à jour dans la fenêtre de debug Print(); +} +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::Print(){ + /* affichage de la grille actuelle dans la fenêtre de debug*/ for(int i=0; i<9; i++) { cout << endl; for(int j=0; j<9; j++)