From 2775d28d42db334ba859830fc0a88869d0d443bf Mon Sep 17 00:00:00 2001
From: Simon Jolibois <simon.jolibois@ecl19.ec-lyon.fr>
Date: Thu, 8 Apr 2021 22:23:21 +0200
Subject: [PATCH] ajout complet du sudoku depuis le gitlab de Thomas

---
 .gitignore                      |  73 -----
 Carre.qml                       | 244 +++++------------
 Case.qml                        |  49 ----
 Grille.qml                      | 120 ---------
 README.md                       |   3 +-
 Sudoku.pro                      |   8 +-
 erase.png                       | Bin 7567 -> 0 bytes
 grille.cpp                      | 381 ++++++++++++++++----------
 grille.h                        |  67 ++---
 grilles/grilleFacile.csv        |   1 -
 grilles/grilleIntermediaire.csv |   1 -
 main.cpp                        |  67 +----
 main.qml                        | 462 ++++++++++++++++++++++----------
 qml.qrc                         |   4 +-
 14 files changed, 668 insertions(+), 812 deletions(-)
 delete mode 100644 .gitignore
 delete mode 100644 Case.qml
 delete mode 100644 Grille.qml
 delete mode 100644 erase.png

diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index fab7372..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,73 +0,0 @@
-# This file is used to ignore files which are generated
-# ----------------------------------------------------------------------------
-
-*~
-*.autosave
-*.a
-*.core
-*.moc
-*.o
-*.obj
-*.orig
-*.rej
-*.so
-*.so.*
-*_pch.h.cpp
-*_resource.rc
-*.qm
-.#*
-*.*#
-core
-!core/
-tags
-.DS_Store
-.directory
-*.debug
-Makefile*
-*.prl
-*.app
-moc_*.cpp
-ui_*.h
-qrc_*.cpp
-Thumbs.db
-*.res
-*.rc
-/.qmake.cache
-/.qmake.stash
-
-# qtcreator generated files
-*.pro.user*
-
-# xemacs temporary files
-*.flc
-
-# Vim temporary files
-.*.swp
-
-# Visual Studio generated files
-*.ib_pdb_index
-*.idb
-*.ilk
-*.pdb
-*.sln
-*.suo
-*.vcproj
-*vcproj.*.*.user
-*.ncb
-*.sdf
-*.opensdf
-*.vcxproj
-*vcxproj.*
-
-# MinGW generated files
-*.Debug
-*.Release
-
-# Python byte code
-*.pyc
-
-# Binaries
-# --------
-*.dll
-*.exe
-
diff --git a/Carre.qml b/Carre.qml
index 9e8414e..dc596d6 100644
--- a/Carre.qml
+++ b/Carre.qml
@@ -1,191 +1,93 @@
-import QtQuick 2.0
+import QtQuick 2.11
+import QtQuick.Window 2.11
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 1.4
 
 Item {
-    id: monCarre
-    width: 154
-    height: 154
-    property alias case9: case9
-    property alias case8: case8
-    property alias case7: case7
-    property alias case6: case6
-    property alias case5: case5
-    property alias case4: case4
-    property alias case3: case3
-    property alias case2: case2
-    property alias case1: case1
-
-
-    Rectangle {
-        id: backgroudcarre
-        color: "#ffffff"
-        border.width: 2
-        anchors.fill: parent
-        focus: true
-
-        Case {
-            id: case1
-            anchors.left: parent.left
-            anchors.top: parent.top
-            chiffreText: qsTr("9")
-            anchors.leftMargin: 2
-            anchors.topMargin: 2
-
-            MouseArea {
-                id: mouseArea1
-                focus: true
-                anchors.fill: parent
-                onClicked: {
-                    console.log(Math.floor(monCarre.x/50)+1, Math.floor(monCarre.y/50)+1)
-                }
-            }
-        }
-
-        Case {
-            id: case2
-            x: 50
-            anchors.top: parent.top
-            chiffreText: qsTr("9")
-            anchors.topMargin: 2
-            anchors.horizontalCenter: parent.horizontalCenter
-            MouseArea {
-                id: mouseArea2
-                focus: true
-                anchors.fill: parent
-                onClicked: {
-                    console.log(Math.floor(monCarre.x/50)+2, Math.floor(monCarre.y/50)+1)
-                }
-            }
-        }
-
-        Case {
-            id: case3
-            x: 100
-            y: 0
-            anchors.right: parent.right
-            anchors.top: parent.top
-            chiffreText: qsTr("9")
-            anchors.rightMargin: 2
-            anchors.topMargin: 2
-            MouseArea {
-                id: mouseArea3
-                focus: true
-                anchors.fill: parent
-                onClicked: {
-                    console.log(Math.floor(monCarre.x/50)+3, Math.floor(monCarre.y/50)+1)
-                }
-            }
-        }
-
-        Case {
-            id: case4
-            x: 0
-            y: 50
-            anchors.verticalCenter: parent.verticalCenter
-            anchors.left: parent.left
-            chiffreText: qsTr("9")
-            anchors.leftMargin: 2
-            MouseArea {
-                id: mouseArea4
-                focus: true
-                anchors.fill: parent
-                onClicked: {
-                    console.log(Math.floor(monCarre.x/50)+1, Math.floor(monCarre.y/50)+2)
+    function envoyer_valeur(app){
+        var i;
+        var j;
+        for(i=0;i<9;i++){
+            for(j=0;j<9;j++){
+                var carr = repeater.itemAt(i).rep.itemAt(j).input
+                if (app === carr){
+                    vueObjetCpt.changer_valeur(app.text,i,j);
                 }
             }
         }
-
-        Case {
-            id: case5
-            x: 50
-            y: 50
-            anchors.verticalCenter: parent.verticalCenter
-            chiffreText: "9"
-            anchors.horizontalCenter: parent.horizontalCenter
-            MouseArea {
-                id: mouseArea5
-                focus: true
-                anchors.fill: parent
-                onClicked: {
-                    console.log(Math.floor(monCarre.x/50)+2, Math.floor(monCarre.y/50)+2)
-                }
+        var values = vueObjetCpt.values;
+        var l
+        var c
+        for(l=0;l<9;l++){
+            for(c=0;c<9;c++){
+                var v = repeater.itemAt(l).rep.itemAt(c).input
+                v.text=values[l][c];
             }
         }
-
-
-
-
-        Case {
-            id: case6
-            x: 0
-            y: 102
-            anchors.verticalCenter: parent.verticalCenter
-            anchors.right: parent.right
-            chiffreText: qsTr("9")
-            anchors.rightMargin: 2
-            MouseArea {
-                id: mouseArea6
-                focus: true
-                anchors.fill: parent
-                onClicked: {
-                    console.log(Math.floor(monCarre.x/50)+3, Math.floor(monCarre.y/50)+2)
-                }
+        var colors = vueObjetCpt.colors;
+        for(i=0;i<9;i++){
+            for(j=0;j<9;j++){
+                var w = repeater.itemAt(i).rep.itemAt(j)
+                w.color=colors[i][j];
             }
         }
+    }
 
-        Case {
-            id: case7
-            y: 106
-            anchors.left: parent.left
-            anchors.bottom: parent.bottom
-            anchors.leftMargin: 2
-            anchors.bottomMargin: 2
-            MouseArea {
-                id: mouseArea7
-                focus: true
-                anchors.fill: parent
-                onClicked: {
-                    console.log(Math.floor(monCarre.x/50)+1, Math.floor(monCarre.y/50)+3)
+    function changer_couleur(app, focus){
+        var i;
+        var j;
+        for(i=0;i<9;i++){
+            for(j=0;j<9;j++){
+                var carr = repeater.itemAt(i).rep.itemAt(j).input
+                if (app === carr){
+                    vueObjetCpt.colorer_voisins(i,j,focus);
                 }
             }
         }
-
-        Case {
-            id: case8
-            x: 68
-            y: 114
-            anchors.bottom: parent.bottom
-            anchors.horizontalCenterOffset: 0
-            anchors.horizontalCenter: parent.horizontalCenter
-            anchors.bottomMargin: 2
-            MouseArea {
-                id: mouseArea8
-                focus: true
-                anchors.fill: parent
-                onClicked: {
-                    console.log(Math.floor(monCarre.x/50)+2, Math.floor(monCarre.y/50)+3)
-                }
+        var colors = vueObjetCpt.colors;
+        for(i=0;i<9;i++){
+            for(j=0;j<9;j++){
+                var v = repeater.itemAt(i).rep.itemAt(j)
+                v.color=colors[i][j];
             }
         }
-
-        Case {
-            id: case9
-            x: 115
-            y: 122
-            anchors.right: parent.right
-            anchors.bottom: parent.bottom
-            anchors.bottomMargin: 2
-            anchors.rightMargin: 2
-            MouseArea {
-                id: mouseArea9
-                focus: true
-                anchors.fill: parent
-                onClicked: {
-                    console.log(Math.floor(monCarre.x/50)+3, Math.floor(monCarre.y/50)+3)
+    }
+    property alias rep : repeater1
+
+    Grid{
+        id : grid
+        x: 3; y:3
+        rows:3; columns:3; spacing :2
+
+
+        Repeater{ id : repeater1
+            model : 9
+
+            Rectangle{
+                color : "#ffffff"
+                width : 68; height: 68
+                property alias input : input
+                border.width : 2
+                border.color : "#000000"
+
+                TextInput{
+                    id:input
+                    color:'#333333'
+                    width : parent.width
+                    height:parent.height
+                    horizontalAlignment: Text.AlignHCenter
+                    verticalAlignment: Text.AlignVCenter
+                    readOnly: false
+                    font.pointSize: 24
+                    maximumLength: 1
+                    validator: RegExpValidator { regExp: /[1-9]+/ }
+                    onFocusChanged: {
+                        changer_couleur(this, focus)
+                    }
+                    onTextEdited : envoyer_valeur(this)
                 }
             }
         }
-
-
     }
-
 }
+
diff --git a/Case.qml b/Case.qml
deleted file mode 100644
index 38aa862..0000000
--- a/Case.qml
+++ /dev/null
@@ -1,49 +0,0 @@
-import QtQuick 2.0
-
-Item {
-    id: maCase
-    width: 50
-    height: 50
-    property alias backgroundCaseBordercolor: backgroundCase.border.color
-    property alias backgroundCaseColor: backgroundCase.color
-    property alias chiffreColor: chiffre.color
-    property alias chiffreText: chiffre.text
-
-    Rectangle {
-        id: backgroundCase
-        color: "#ffffff"
-        radius: 0
-        border.width: 2
-        anchors.fill: parent
-        focus: true
-
-        MouseArea {
-            id: mouseArea
-            anchors.fill: parent
-            hoverEnabled: true
-            onEntered: {
-                parent.color = "#998c8c"
-            }
-            onExited: {
-                parent.color = "#ffffff"
-            }
-            onClicked: {
-                console.log(maCase.x, maCase.y)
-
-            }
-        }
-
-        Text {
-            id: chiffre
-            text: qsTr("9")
-            anchors.fill: parent
-            font.pixelSize: 25
-            horizontalAlignment: Text.AlignHCenter
-            verticalAlignment: Text.AlignVCenter
-            font.bold: true
-            font.family: "Verdana"
-        }
-
-    }
-
-}
diff --git a/Grille.qml b/Grille.qml
deleted file mode 100644
index 483ec26..0000000
--- a/Grille.qml
+++ /dev/null
@@ -1,120 +0,0 @@
-import QtQuick 2.0
-
-Item {
-    id: maGrille
-    width: 466
-    height: 466
-    property alias carre9: carre9
-    property alias carre8: carre8
-    property alias carre7: carre7
-    property alias carre6: carre6
-    property alias carre5: carre5
-    property alias carre4: carre4
-    property alias carre3: carre3
-    property alias carre2: carre2
-    property alias carre1: carre1
-
-    Rectangle {
-        id: backgroundGrille
-        color: "#ffffff"
-        border.width: 2
-        anchors.fill: parent
-
-        Carre {
-            id: carre1
-            anchors.left: parent.left
-            anchors.top: parent.top
-            case9.chiffreText: qsTr("9")
-            case8.chiffreText: qsTr("9")
-            case7.chiffreText: qsTr("9")
-            case6.chiffreText: qsTr("9")
-            case5.chiffreText: qsTr("9")
-            case4.chiffreText: qsTr("9")
-            case3.chiffreText: qsTr("9")
-            case2.chiffreText: qsTr("9")
-            case1.chiffreText: qsTr("9")
-            anchors.leftMargin: 2
-            anchors.topMargin: 2
-        }
-
-        Carre {
-            id: carre2
-            x: 178
-            anchors.top: parent.top
-            case9.chiffreText: qsTr("")
-            case8.chiffreText: qsTr("")
-            case7.chiffreText: qsTr("")
-            case6.chiffreText: qsTr("")
-            case5.chiffreText: qsTr("")
-            case4.chiffreText: qsTr("")
-            case3.chiffreText: qsTr("")
-            case2.chiffreText: qsTr("")
-            case1.chiffreText: qsTr("9")
-            anchors.horizontalCenter: parent.horizontalCenter
-            anchors.topMargin: 2
-        }
-
-        Carre {
-            id: carre3
-            x: 347
-            anchors.right: parent.right
-            anchors.top: parent.top
-            anchors.rightMargin: 2
-            anchors.topMargin: 2
-        }
-
-        Carre {
-            id: carre4
-            y: 191
-            anchors.verticalCenter: parent.verticalCenter
-            anchors.left: parent.left
-            anchors.leftMargin: 2
-        }
-
-        Carre {
-            id: carre5
-            x: 279
-            y: 219
-            anchors.verticalCenter: parent.verticalCenter
-            anchors.horizontalCenter: parent.horizontalCenter
-        }
-
-        Carre {
-            id: carre6
-            x: 361
-            y: 199
-            anchors.verticalCenter: parent.verticalCenter
-            anchors.right: parent.right
-            anchors.rightMargin: 2
-        }
-
-        Carre {
-            id: carre7
-            y: 338
-            anchors.left: parent.left
-            anchors.bottom: parent.bottom
-            anchors.leftMargin: 2
-            anchors.bottomMargin: 2
-        }
-
-        Carre {
-            id: carre8
-            x: 225
-            y: 330
-            anchors.bottom: parent.bottom
-            anchors.horizontalCenter: parent.horizontalCenter
-            anchors.bottomMargin: 2
-        }
-
-        Carre {
-            id: carre9
-            x: 316
-            y: 316
-            anchors.right: parent.right
-            anchors.bottom: parent.bottom
-            anchors.rightMargin: 2
-            anchors.bottomMargin: 2
-        }
-    }
-
-}
diff --git a/README.md b/README.md
index 41d84e8..428bce6 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,2 @@
-# Projet Sudoku
+# sudoku
 
-Le projet est en cours de développement
diff --git a/Sudoku.pro b/Sudoku.pro
index d4de670..623aa04 100644
--- a/Sudoku.pro
+++ b/Sudoku.pro
@@ -23,11 +23,7 @@ qnx: target.path = /tmp/$${TARGET}/bin
 else: unix:!android: target.path = /opt/$${TARGET}/bin
 !isEmpty(target.path): INSTALLS += target
 
+DISTFILES +=
+
 HEADERS += \
     grille.h
-
-DISTFILES += \
-    Carre.qml \
-    Case.qml \
-    Case.qml \
-    Grille.qml
diff --git a/erase.png b/erase.png
deleted file mode 100644
index 35c050e839b3c17d9ed89cebe90f916eb37c9500..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7567
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

diff --git a/grille.cpp b/grille.cpp
index b564f88..4cfc68f 100644
--- a/grille.cpp
+++ b/grille.cpp
@@ -1,191 +1,280 @@
-#include "grille.h"
-
-Grille::Grille(int vd)
-{
-    Alloc();
-    Init(vd);
-}
-
-
-Grille::Grille(const Grille &D)
-{
-    Alloc();
-
-    for(int i=0; i<9; i++)
-        for(int j=0; j<9; j++)
-            T[i][j] = D.T[i][j];
-}
-
+#include<iostream>
+#include <fstream>
+#include <typeinfo>
+#include <string>
 
-Grille::~Grille(){
-    if (T != NULL) {
-        Free();
-        T = NULL;
+#include "grille.h"
+using namespace std;
+
+Grille::Grille(QObject *parent) : QObject(parent){
+    ifstream myFile("../sudoku/grilles/grilleDebutant.csv"); //choisir la grille ici
+    string ligne[9];
+
+    int i = 0;
+
+    while(myFile.good() & (i<9)){
+        getline(myFile,ligne[0],'|');
+        getline(myFile,ligne[1],'|');
+        getline(myFile,ligne[2],'|');
+        getline(myFile,ligne[3],'|');
+        getline(myFile,ligne[4],'|');
+        getline(myFile,ligne[5],'|');
+        getline(myFile,ligne[6],'|');
+        getline(myFile,ligne[7],'|');
+        getline(myFile,ligne[8],'\n');
+        for(int k=0;k<9;k++){
+            if (ligne[k]!="."){
+                grille[i][k]=ligne[k];
+            }
+        }
+        i++;
     }
-}
+    Print();
+    matriceToVectors();
 
-
-void Grille::Free(){
-    for (int i=0; i<9; i++) {
-        delete [] T[i];
+    // coloriage des cases en blanc
+    QList<QString> colors_case;
+    for(int i =0;i<9;i++){
+        colors_case.push_back("white");
+    }
+    for(int j =0;j<9;j++){
+        colors.push_back(colors_case);
     }
-    delete [] T;
-}
-
-
-void Grille::Alloc(){
-    T = new int*[9];
-    for(int i=0; i<9; i++)
-        T[i] = new int[9];
 }
 
+void Grille::verif_matrice(){
+    // verifie si la grille remplie par le joueur vérifie les règles du sudoku ou non
+    bool victoire = true;
+    list<string> lok= {"1", "2", "3", "4", "5", "6","7","8", "9"};
 
-void Grille::Print(){
-    for(int i=0; i<9; i++) {
-        cout << endl;
-        for(int j=0; j<9; j++)
-            cout << T[i][j] << ", ";
+    // vérification par ligne
+    for(int i=0; i<9; i++){
+        list<string> L;
+        for(int j= 0; j<9; j++){
+            L.push_back(grille[i][j]);
+        }
+        L.sort();
+        victoire = victoire && (L==lok);
     }
-    cout <<endl<<endl;
-}
 
+    // vérification par colonne
+    for(int i=0; i<9; i++){
+        list<string> L;
+        for(int j= 0; j<9; j++){
+            L.push_back(grille[j][i]);
+        }
+        L.sort();
+        victoire = victoire && (L==lok);
+    }
+    // vérification par case 3x3
+    for(int l=0; l<3;l++){
+        for(int c = 0; c<3; c++){
+            list<string> L;
+            for(int i=3*l; i<3*l+3; i++){
+                for(int j=3*c; j<3*c+3; j++){
+                    L.push_back(grille[i][j]);
+                }
+            }
+            L.sort();
+            victoire = victoire && (L==lok);
+        }
+    }
 
-void Grille::Init(int value){
-    for(int i=0; i<9; i++)
-        for(int j=0; j<9; j++)
-            T[i][j]=value;
+    verif = victoire;
+    emit verifClicked();
 }
 
+void Grille::set_chiffre_actif(int i){
+    changer_valeur(i, caseselected[0], caseselected[1]);
+    emit chiffreActifChanged();
+}
 
-void Grille::Set(int x, int y, int value) {
-    /* Modifie la valeur de la grille aux coordonnées (x,y) par value*/
-
-    if (x<9 && 0<=x && 0<=y && y<9){
-        if (value<=9 && value>0)
-            T[x][y]=value;
-        else
-            cout << "La valeur n'est pas comprise entre 1 et 9." << endl << endl;
+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
+
+    for(int i=0;i<3;i++){
+        for (int j=0;j<3;j++){
+            case1.append(QString::fromStdString(grille[i][j]));
+            case2.append(QString::fromStdString(grille[i][j+3]));
+            case3.append(QString::fromStdString(grille[i][j+6]));
+            case4.append(QString::fromStdString(grille[i+3][j]));
+            case5.append(QString::fromStdString(grille[i+3][j+3]));
+            case6.append(QString::fromStdString(grille[i+3][j+6]));
+            case7.append(QString::fromStdString(grille[i+6][j]));
+            case8.append(QString::fromStdString(grille[i+6][j+3]));
+            case9.append(QString::fromStdString(grille[i+6][j+6]));
+        }
     }
-    else
-        cout << "Les coordonnées ne sont pas adaptées." << endl << endl;
+    valeurs = {case1,case2,case3,case4,case5,case6,case7,case8,case9};
 }
 
-
-int Grille::Get(int x, int y){
-    return T[x][y];
+void Grille::colorer_X(int i, int 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";
 }
 
+void Grille::colorer_Y(int i, int c){
+    // coloriage dans tous les carrés de la colonne i (entre 0 et 2) de la colonne l (entre 0 et 2 également)
+    for (int k=i;k<i+7;k+=3)
+        for (int m=c;m<c+7;m+=3)
+            colors[k][m]="#eaeaea";
+}
 
-void Grille::EssaiJoueur(){
-    /* Appelée quand le joueur à sélectionné à la fois une case et un chiffre
-     * on vérifie alors avec les règles du sudoku (ligne/colonne/case) que le coup est permit*/
-
-    bool essai=true;
+void Grille::colorer_voisins( int Carre,int Case,bool focus){
+    caseselected[0] = Carre;
+    caseselected[1]= Case;
 
-// on vérifie pour la colonne et la ligne
-        for (int i=0;i<9;i++){
-            if (chiffre_actif==T[x_actif][i] ){
-                essai = false;
-                cout << "Le chiffre " << chiffre_actif << " est déjà présent dans la ligne." << endl << endl;
-            }
-            else if (chiffre_actif==T[i][y_actif]){
-                essai = false;
-                cout << "Le chiffre " << chiffre_actif << " est déjà présent dans la colonne." << endl << endl;
+    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";
             }
         }
 
-//on vérifie pour la case de 3x3
-        int case_3_x=floor(x_actif/3);
-        int case_3_y=floor(y_actif/3);
-        for(int i=3*case_3_x;i<3*case_3_x+3;i++)
-            for (int j=3*case_3_y;j<3*case_3_y+3;j++){
-                if (T[i][j]==chiffre_actif){
-                    essai = false;
-                    cout << "Le chiffre " << chiffre_actif << " est déjà présent dans le carré 3x3." << endl << endl;
+        // recolore les cases du carré selectionné
+        for(int k =0;k<9;k++){
+            colors[Carre][k]="#eaeaea";
+        }
+
+        //colorer les lignes horizontales
+        switch(Carre/3){
+        case 0:
+            colorer_X(0,Case/3);
+            break;
+        case 1:
+            colorer_X(3,Case/3);
+            break;
+        case 2:
+            colorer_X(6,Case/3);
+            break;
+        }
+        // colorer les lignes verticales
+        switch(Carre%3){
+        case 0:
+            colorer_Y(0,Case%3);
+            break;
+        case 1:
+            colorer_Y(1,Case%3);
+            break;
+        case 2:
+            colorer_Y(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)]){
+                        colors[i][j]="#9eaac8";
+
+                    }
                 }
             }
-
-// On indique si l'on peut remplir la case ou non et si oui, on le fait
-        if (essai){
-            cout << "L'essai est réussi." << endl << endl;
-            Set(x_actif,y_actif,chiffre_actif);
-            x_actif=0;
-            y_actif=0;
-            chiffre_actif=0;
-
         }
+        Print();
 
-        else
-            cout << "L'essai a échoué." << endl << endl;
-}
-
-
-void Grille::SelectChiffre(int c){
-    /* On sélectionne le chiffre que l'on veut mettre par la suite.*/
-
-    if (1<=c && c<=9 && c!=chiffre_actif){
-        cout << "Le chiffre selectionné est " << c << "." << endl<<endl;
-        chiffre_actif = c;
-    }
-    else if(c==chiffre_actif){
-        chiffre_actif=0;        //on déselectionne en tapant une deuxième fois sur le chiffre
-    }
-    else{
-        cout << "Le chiffre selectionné n'est pas compris entre 1 et 9." << endl;
+        emit focusChanged();
     }
 }
 
+void Grille::changer_valeur(int valeur, int Carre,int Case){
+    string value =to_string(valeur);
+    if (value == "0"){
+        value="";
+    }
 
-void Grille::SelectCase(int x, int y){
-    /* On sélectionne la case que l'on veut mettre par la suite.*/
+    int ligne, colonne;
+    switch(Carre){
+    case 0:
+        colonne = Case%3;
+        ligne = Case/3;
+        break;
+    case 1:
+        colonne = Case%3+3;
+        ligne = Case/3;
+        break;
+    case 2:
+        colonne = Case%3+6;
+        ligne = Case/3;
+        break;
+    case 3:
+        colonne = Case%3;
+        ligne = Case/3+3;
+        break;
+    case 4:
+        colonne = Case%3+3;
+        ligne = Case/3+3;
+        break;
+    case 5:
+        colonne = Case%3+6;
+        ligne = Case/3+3;
+        break;
+    case 6:
+        colonne = Case%3;
+        ligne = Case/3+6;
+        break;
+    case 7:
+        colonne = Case%3+3;
+        ligne = Case/3+6;
+        break;
+    case 8:
+        colonne = Case%3+6;
+        ligne = Case/3+6;
+        break;
+    }
 
-    if (0<=x && x<9 && 0<=y && y<9 ){
-        // si on sélectionne la case déja active, on la déselectionne.
-        if (x_actif==x && y_actif==y){
-            x_actif=0;
-            y_actif=0;
-            cout << "La case a été désélectionnée."<<endl;
+    // on teste si les règles sont respectées
+    bool possible=true;
+
+    // test sur le carré
+    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;
+                }
+            }
         }
-        // si ce n'est pas le cas, on la sélectionne.
-        else{
-            x_actif=x;
-            y_actif=y;
-            cout << "La case sélectionnée est (" << x_actif << "," << y_actif <<")" << endl<<endl;
+        // test sur les lignes et colonnes
+        for (int j=0;j<9;j++){
+            if (grille[j][colonne]==value && j!=ligne){
+                possible=false;
+                colors[3*(j/3)+(colonne)/3][3*(j%3)+(colonne)%3]="#d14545";
+            }
+            else if (grille[ligne][j]==value && j!=colonne){
+                possible=false;
+                colors[3*(ligne/3)+(j)/3][3*(ligne%3)+(j)%3]="#d14545";
+            }
         }
     }
-}
 
-bool Grille::TestWin(){
-/* on teste juste que toute la grille soit remplie.*/
-    for (int i=0;i<9;i++)
-        for (int j=0;j<9;j++)
-            if (Get(i,j)==0)
-                return false;
-    return true;
-}
+    if(possible)
+        grille[ligne][colonne]=value;
+    else
+        cout << "impossible de modifier la valeur" << endl;
 
 
+    matriceToVectors();
 
-Grille& Grille::operator= (const Grille &D){
-    if ( this != &D) { // protection autoréférence
-        Free();
-        Alloc();
-        for(int i=0; i<9; i++)
-            for(int j=0; j<9; j++)
-                T[i][j] = D.T[i][j];
-    }
-    return *this;
-}
+    // affichage de la grille
+    Print();
 
+}
 
-ostream& operator<< (ostream& sortie, Grille& V)
-{
-    sortie << endl;
+void Grille::Print(){
     for(int i=0; i<9; i++) {
-        sortie << endl;
+        cout << endl;
         for(int j=0; j<9; j++)
-            sortie << V.T[i][j] << ", ";
+            cout << grille[i][j] << ", ";
     }
-    return sortie;
+    cout <<endl<<endl;
 }
-
diff --git a/grille.h b/grille.h
index 04e5cd2..999aec2 100644
--- a/grille.h
+++ b/grille.h
@@ -2,58 +2,47 @@
 #define GRILLE_H
 
 #include <QObject>
-#include <iostream>
-#include <math.h>
-
-#include <QFile>
-#include <QStringList>
-#include <QDebug>
-
-#include <algorithm>
-#include <string>
-
+#include<string>
 using namespace std;
 
-class Grille //: public QObject
+class Grille : public QObject
 {
-//    Q_OBJECT
-public:
-    Grille(int vd=0);
-    Grille(const Grille &D);
-    ~Grille();
-
-//    Q_PROPERTY(QList<QString> tableauQML READ readGrille NOTIFY grilleChanged)
+    Q_OBJECT
 
-    Grille& operator=  (const Grille &D); // opérateur d'affectation
-    friend ostream& operator<< (ostream& sortie, Grille& V);
+    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)
 
+public:
+    explicit Grille(QObject *parent = nullptr);
+    Q_INVOKABLE void changer_valeur(int valeur, int Carre,int Case);
+    Q_INVOKABLE void colorer_voisins( int Carre,int Case, bool focus);
+    Q_INVOKABLE void verif_matrice( );
+    Q_INVOKABLE void set_chiffre_actif(int i);
     void Print();
-    void Init(int value);
-    void Set(int x, int y, int value);
-    int Get(int x, int y);
-    void EssaiJoueur();             // on regarde si la case (x_actif,y_actif) a la valeur chiffre_actif
-    void SelectChiffre(int c);
-    void SelectCase(int x,int y);
-    bool TestWin();
 
 
 private:
-    int** T;            // c'est le tableau que l'on complète
-    int chiffre_actif;  //la valeur sélectionnée à l'écran
-    int x_actif;        //abscisse case active
-    int y_actif;        //ordonnée case active
-    bool win;           // la partie est gagnée ou non
+    void matriceToVectors();
+    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;
+    int chiffre_IsActif;
 
 
 
-    // Méthode privée (factorisation  de code)
-    void Alloc();
-    void Free();
+signals:
+    void valChanged();
+    void focusChanged();
+    void verifClicked();
+    void chiffreActifChanged();
 
-/*
-signals :
-    void grilleChanged();
-*/
 };
 
 #endif // GRILLE_H
diff --git a/grilles/grilleFacile.csv b/grilles/grilleFacile.csv
index 6347bf7..23fbe36 100644
--- a/grilles/grilleFacile.csv
+++ b/grilles/grilleFacile.csv
@@ -1,4 +1,3 @@
-# Grille extraite de https://qqwing.com/generate.html 
 4|.|.|2|7|5|.|8|.
 .|.|.|.|1|.|4|7|.
 .|.|.|.|.|.|9|.|5
diff --git a/grilles/grilleIntermediaire.csv b/grilles/grilleIntermediaire.csv
index 21ba5d0..857acac 100644
--- a/grilles/grilleIntermediaire.csv
+++ b/grilles/grilleIntermediaire.csv
@@ -1,4 +1,3 @@
-# Grille extraite de https://qqwing.com/generate.html 
 .|.|4|8|.|.|.|1|.
 .|.|.|9|.|1|.|2|.
 .|6|.|2|.|.|4|3|.
diff --git a/main.cpp b/main.cpp
index 9cac1fb..cbca0cb 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,71 +1,18 @@
 #include <QGuiApplication>
 #include <QQmlApplicationEngine>
-#include <QtQml>
-
-#include <QFile>
-#include <QStringList>
-#include <QDebug>
-
 #include <iostream>
-#include <math.h>
-#include "grille.h"
-
-#include <algorithm>
 #include <string>
+#include <QQmlContext>
 
+#include  "grille.h"
 
 
-int main(int argc, char *argv[]){
-
-// Lecture de la grille .csv de départ
-// SI POSSIBLE CHANGER CELA EN FCT, UTILE POUR ENREGISTRER UNE PARTIE EN COURS ET LA REOUVRIR
-// Pb avec QFile qui ne veut pas s'initialiser
-    Grille G;
-    QFile file("../Sudoku/grilles/grilleFacile.csv");
-    if (!file.open(QIODevice::ReadOnly)) {
-        qDebug() << file.errorString();
-        return 1;
-    }
-
-    QStringList matrice_List;
-    file.readLine(); // on ne veut pas la première ligne
-    int i=0;                                             // permet de savoir quelle ligne ou lit
-    while (!file.atEnd()) {
-        QByteArray line = file.readLine();               // on lit ligne par ligne le fichier
-        std::replace(line.begin(), line.end(), '.','0'); // on remplace les . du .csv par des 0
-        for (int j=0; j<9;j++){
-            if (int(line[2*j])-48>0)
-                G.Set(i,j,int(line[2*j])-48);           // on remplit le tableau avec les valeurs de départ
-        }
-        i+=1;
-    }
-    G.Print();
-
-
-// test sélection et remplissage de case
-    G.SelectCase(2,2);
-    G.SelectChiffre(4);
-    G.EssaiJoueur();
-
-    G.SelectCase(8,1); // pas besoin de reselectionner de nouveau le chiffre si on veut le mm
-    G.EssaiJoueur();
 
-    G.SelectCase(4,8);
-    G.SelectChiffre(7);
-    G.EssaiJoueur();
-
-    G.Print();
-
-// Updated upstream
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
-
-
-// Stashed changes
+int main(int argc, char *argv[]){
     QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
-#endif
 
     QGuiApplication app(argc, argv);
-
+    Grille aGrille ;
     QQmlApplicationEngine engine;
     const QUrl url(QStringLiteral("qrc:/main.qml"));
     QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
@@ -73,12 +20,8 @@ int main(int argc, char *argv[]){
         if (!obj && url == objUrl)
             QCoreApplication::exit(-1);
     }, Qt::QueuedConnection);
+    engine.rootContext()->setContextProperty("vueObjetCpt", &aGrille);
     engine.load(url);
 
     return app.exec();
-// Updated upstream
-
-
-    return(0);
-// Stashed changes
 }
diff --git a/main.qml b/main.qml
index 39c8864..fabb9d8 100644
--- a/main.qml
+++ b/main.qml
@@ -1,164 +1,348 @@
-import QtQuick 2.12
-import QtQuick.Window 2.12
+import QtQuick 2.11
+import QtQuick.Window 2.11
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.15
 
 Window {
-    width: 900
-    height: 700
+    id : root
+    color: "#e6ecfa"
+    width: 650+5
+    height: 712+5
     visible: true
     title: qsTr("Sudoku")
 
-    Rectangle {
-        id: rectangle
-        color: "#eae1c3"
-        anchors.fill: parent
-        focus: true
-        Keys.onPressed: {
-           switch (event.key) {
-              case Qt.Key_A:
-                 grille.carre4.case2.chiffreText=qsTr("0")
-                 break;
-           }
+    function check(){
+        vueObjetCpt.verif_matrice();
+        var verif = vueObjetCpt.verifier;
+        if(verif===1){
+            result.visible=true;
+            result.rectangle.color="#8ee637";
+            result.rectangle.text1.text="Bravo vous avez réussi la partie !";
         }
-
-        Grille {
-            id: grille
-            x: 217
-            y: 103
-            anchors.verticalCenter: parent.verticalCenter
-            anchors.horizontalCenter: parent.horizontalCenter
+        else{  result.visible=true;
+            result.rectangle.color="#666666";
+            result.rectangle.text1.text="Il y a une erreur, réessayez !";
         }
+    }
 
-        Text {
-            id: textdyn
-            x: 431
-            text: qsTr("Ici un texte pour les instructions et etc (Type : Bravo)")
-            anchors.top: parent.top
-            font.pixelSize: 30
-            font.weight: Font.DemiBold
-            font.family: "Tahoma"
-            anchors.topMargin: 30
-            anchors.horizontalCenter: parent.horizontalCenter
+    function set_chiffre_actif(i){
+        vueObjetCpt.set_chiffre_actif(i);
+        var chiffre_IsActif = vueObjetCpt.coloration
+        var values = vueObjetCpt.values;
+        var l
+        var c
+        for(l=0;l<9;l++){
+            for(c=0;c<9;c++){
+                var v = repeater.itemAt(l).rep.itemAt(c).input
+                v.text=values[l][c];
+            }
         }
+    }
 
-        Case {
-            id: bouton6
-            x: 425
-            y: 620
-            anchors.bottom: parent.bottom
-            chiffreText: "6"
-            anchors.horizontalCenterOffset: 30
-            anchors.bottomMargin: 30
-            anchors.horizontalCenter: parent.horizontalCenter
+    Component.onCompleted:{
+        var values=vueObjetCpt.values;
+        var i;
+        for(i=0;i<9;i++){
+            var t = repeater.itemAt(0).rep.itemAt(i).input
+            t.text=values[0][i]
+            if(values[0][i]!==''){
+                t.readOnly=true
+                t.color="#000000"
+                t.font.bold = true
+            }
         }
-
-        Case {
-            id: bouton5
-            x: 392
-            y: 620
-            anchors.bottom: parent.bottom
-            chiffreText: "5"
-            anchors.horizontalCenterOffset: -30
-            anchors.horizontalCenter: parent.horizontalCenter
-            anchors.bottomMargin: 30
+        for(i=0;i<9;i++){
+            var k = repeater.itemAt(1).rep.itemAt(i).input
+            k.text=values[1][i]
+            if(values[1][i]!==''){
+                k.readOnly=true
+                k.color="#000000"
+                k.font.bold = true
+            }
         }
-
-        Case {
-            id: bouton4
-            x: 331
-            y: 620
-            anchors.bottom: parent.bottom
-            chiffreText: "4"
-            anchors.horizontalCenterOffset: -90
-            anchors.horizontalCenter: parent.horizontalCenter
-            anchors.bottomMargin: 30
+        for(i=0;i<9;i++){
+            var l = repeater.itemAt(2).rep.itemAt(i).input
+            l.text=values[2][i]
+            if(values[2][i]!==''){
+                l.readOnly=true
+                l.color="#000000"
+                l.font.bold = true
+            }
         }
-
-        Case {
-            id: bouton3
-            x: 266
-            y: 620
-            anchors.bottom: parent.bottom
-            chiffreText: "3"
-            anchors.horizontalCenterOffset: -150
-            anchors.horizontalCenter: parent.horizontalCenter
-            anchors.bottomMargin: 30
+        for(i=0;i<9;i++){
+            var m = repeater.itemAt(3).rep.itemAt(i).input
+            m.text=values[3][i]
+            if(values[3][i]!==''){
+                m.readOnly=true
+                m.color="#000000"
+                m.font.bold = true
+            }
         }
-
-        Case {
-            id: bouton2
-            x: 201
-            y: 620
-            anchors.bottom: parent.bottom
-            chiffreText: "2"
-            anchors.horizontalCenterOffset: -210
-            anchors.horizontalCenter: parent.horizontalCenter
-            anchors.bottomMargin: 30
+        for(i=0;i<9;i++){
+            var n = repeater.itemAt(4).rep.itemAt(i).input
+            n.text=values[4][i]
+            if(values[4][i]!==''){
+                n.readOnly=true
+                n.color="#000000"
+                n.font.bold = true
+            }
         }
-
-        Case {
-            id: bouton1
-            x: 98
-            y: 627
-            anchors.bottom: parent.bottom
-            chiffreText: "1"
-            anchors.horizontalCenterOffset: -270
-            anchors.horizontalCenter: parent.horizontalCenter
-            anchors.bottomMargin: 30
+        for(i=0;i<9;i++){
+            var p = repeater.itemAt(5).rep.itemAt(i).input
+            p.text=values[5][i]
+            if(values[5][i]!==''){
+                p.readOnly=true
+                p.color="#000000"
+                p.font.bold = true
+            }
         }
-
-        Case {
-            id: bouton7
-            x: 545
-            y: 627
-            anchors.bottom: parent.bottom
-            chiffreText: "7"
-            anchors.horizontalCenterOffset: 90
-            anchors.horizontalCenter: parent.horizontalCenter
-            anchors.bottomMargin: 30
+        for(i=0;i<9;i++){
+            var q = repeater.itemAt(6).rep.itemAt(i).input
+            q.text=values[6][i]
+            if(values[6][i]!==''){
+                q.readOnly=true
+                q.color="#000000"
+                q.font.bold = true
+            }
         }
-
-        Case {
-            id: bouton8
-            x: 621
-            y: 627
-            anchors.bottom: parent.bottom
-            chiffreText: "8"
-            anchors.horizontalCenterOffset: 150
-            anchors.horizontalCenter: parent.horizontalCenter
-            anchors.bottomMargin: 30
+        for(i=0;i<9;i++){
+            var s = repeater.itemAt(7).rep.itemAt(i).input
+            s.text=values[7][i]
+            if(values[7][i]!==''){
+                s.readOnly=true
+                s.color="#000000"
+                s.font.bold = true
+            }
         }
-
-        Case {
-            id: bouton9
-            x: 699
-            y: 620
-            anchors.bottom: parent.bottom
-            anchors.horizontalCenterOffset: 210
-            anchors.horizontalCenter: parent.horizontalCenter
-            anchors.bottomMargin: 30
+        for(i=0;i<9;i++){
+            var j = repeater.itemAt(8).rep.itemAt(i).input
+            j.text=values[8][i]
+            if(values[8][i]!==''){
+                j.readOnly=true
+                j.color="#000000"
+                j.font.bold = true
+            }
         }
+    }
+    property alias repeater : repeater
+
+    Rectangle{
+        id : background
+        x:3
+        y:3
+        color : "black"
+        anchors.verticalCenter: parent.verticalCenter
+        anchors.verticalCenterOffset: -30
+        anchors.horizontalCenter: parent.horizontalCenter
+        width : childrenRect.width+6
+        height : childrenRect.height+6
+
+
+    Grid{
+        id : grid
+        x: 3
+        y:3
+        rows:3
+        columns:3
+        spacing :2
+        Repeater{
+            id : repeater
+            model : 9
 
-        Case {
-            id: bouton10
-            x: 781
-            y: 620
-            anchors.bottom: parent.bottom
-            chiffreText: " "
-            anchors.horizontalCenterOffset: 270
-            anchors.horizontalCenter: parent.horizontalCenter
-            anchors.bottomMargin: 30
-
-            Image {
-                id: gomme
-                anchors.fill: parent
-                source: "erase.png"
-                anchors.rightMargin: 2
-                anchors.leftMargin: 2
-                anchors.bottomMargin: 2
-                anchors.topMargin: 2
-                fillMode: Image.PreserveAspectFit
+            Carre{
+                id : case1
+                width : 213
+                height:213
             }
         }
     }
+}
+
+    Button {
+        id: button_check
+        x: 8
+        y: 660
+        width: 132
+        height: 40
+        text: qsTr("Vérifier la grille")
+        anchors.bottom: parent.bottom
+        highlighted: false
+        anchors.horizontalCenterOffset: -250
+        anchors.horizontalCenter: parent.horizontalCenter
+        anchors.bottomMargin: 10
+        font.weight: Font.ExtraLight
+        font.pointSize: 12
+        onClicked:{ check();
+            button_check.highlighted = true
+        }
+    }
+
+    Resultat{
+        id :result
+        visible: false
+    }
+
+    Button {
+        id: button1
+        x: 200
+        y: 660
+        width: 40
+        height: 40
+        text: qsTr("1")
+        anchors.bottom: parent.bottom
+        anchors.horizontalCenterOffset: -120
+        anchors.horizontalCenter: parent.horizontalCenter
+        anchors.bottomMargin: 10
+        font.weight: Font.ExtraLight
+        font.pointSize: 12
+        onPressed: {highlighted = true}
+        onReleased: {highlighted= false}
+        onClicked:set_chiffre_actif(1)
+    }
+
+    Button {
+        id: button2
+        x: 250
+        y: 660
+        width: 40
+        height: 40
+        text: qsTr("2")
+        anchors.bottom: parent.bottom
+        anchors.horizontalCenterOffset: -70
+        anchors.horizontalCenter: parent.horizontalCenter
+        anchors.bottomMargin: 10
+        font.weight: Font.ExtraLight
+        font.pointSize: 12
+        onPressed: {highlighted = true}
+        onReleased: {highlighted= false}
+        onClicked: set_chiffre_actif(2)
+    }
+
+    Button {
+        id: button3
+        x: 300
+        y: 660
+        width: 40
+        height: 40
+        text: qsTr("3")
+        anchors.bottom: parent.bottom
+        anchors.horizontalCenterOffset: -20
+        anchors.horizontalCenter: parent.horizontalCenter
+        anchors.bottomMargin: 10
+        font.weight: Font.ExtraLight
+        font.pointSize: 12
+        onPressed: {highlighted = true}
+        onReleased: {highlighted= false}
+        onClicked: set_chiffre_actif(3)
+    }
+
+    Button {
+        id: button4
+        x: 350
+        y: 660
+        width: 40
+        height: 40
+        text: qsTr("4")
+        anchors.bottom: parent.bottom
+        anchors.horizontalCenterOffset: 30
+        anchors.horizontalCenter: parent.horizontalCenter
+        anchors.bottomMargin: 10
+        font.weight: Font.ExtraLight
+        font.pointSize: 12
+        onPressed: {highlighted = true}
+        onReleased: {highlighted= false}
+        onClicked: set_chiffre_actif(4)
+    }
+
+    Button {
+        id: button5
+        x: 400
+        y: 660
+        width: 40
+        height: 40
+        text: qsTr("5")
+        anchors.bottom: parent.bottom
+        anchors.horizontalCenterOffset: 80
+        anchors.horizontalCenter: parent.horizontalCenter
+        anchors.bottomMargin: 10
+        font.weight: Font.ExtraLight
+        font.pointSize: 12
+        onPressed: {highlighted = true}
+        onReleased: {highlighted= false}
+        onClicked: set_chiffre_actif(5)
+    }
+
+    Button {
+        id: button6
+        x: 450
+        y: 660
+        width: 40
+        height: 40
+        text: qsTr("6")
+        anchors.bottom: parent.bottom
+        anchors.horizontalCenterOffset: 130
+        anchors.horizontalCenter: parent.horizontalCenter
+        anchors.bottomMargin: 10
+        font.weight: Font.ExtraLight
+        font.pointSize: 12
+        onPressed: {highlighted = true}
+        onReleased: {highlighted= false}
+        onClicked: set_chiffre_actif(6)
+    }
+
+    Button {
+        id: button7
+        x: 500
+        y: 660
+        width: 40
+        height: 40
+        text: qsTr("7")
+        anchors.bottom: parent.bottom
+        anchors.horizontalCenterOffset: 180
+        anchors.horizontalCenter: parent.horizontalCenter
+        anchors.bottomMargin: 10
+        font.weight: Font.ExtraLight
+        font.pointSize: 12
+        onPressed: {highlighted = true}
+        onReleased: {highlighted= false}
+        onClicked: set_chiffre_actif(7)
+    }
+
+    Button {
+        id: button8
+        x: 550
+        y: 660
+        width: 40
+        height: 40
+        text: qsTr("8")
+        anchors.bottom: parent.bottom
+        anchors.horizontalCenterOffset: 230
+        anchors.horizontalCenter: parent.horizontalCenter
+        anchors.bottomMargin: 10
+        font.weight: Font.ExtraLight
+        font.pointSize: 12
+        onPressed: {highlighted = true}
+        onReleased: {highlighted= false}
+        onClicked: set_chiffre_actif(8)
+    }
+
+    Button {
+        id: button9
+        x: 600
+        y: 660
+        width: 40
+        height: 40
+        text: qsTr("9")
+        anchors.bottom: parent.bottom
+        anchors.horizontalCenterOffset: 280
+        anchors.horizontalCenter: parent.horizontalCenter
+        anchors.bottomMargin: 10
+        font.weight: Font.ExtraLight
+        font.pointSize: 12
+        onPressed: {highlighted = true}
+        onReleased: {highlighted= false}
+        onClicked: set_chiffre_actif(9)
+    }
 
 }
+
diff --git a/qml.qrc b/qml.qrc
index 9d8b5a1..f68ca98 100644
--- a/qml.qrc
+++ b/qml.qrc
@@ -1,9 +1,7 @@
 <RCC>
     <qresource prefix="/">
         <file>main.qml</file>
-        <file>Case.qml</file>
-        <file>Grille.qml</file>
         <file>Carre.qml</file>
-        <file>erase.png</file>
+        <file>Resultat.qml</file>
     </qresource>
 </RCC>
-- 
GitLab