diff --git a/Motus/Main.qml b/Motus/Main.qml index 4ddcf86e0fae0e5b85f7969e6bdf582b698acc68..05af35defbbe22f1d1c68800261b9107eab7f458 100644 --- a/Motus/Main.qml +++ b/Motus/Main.qml @@ -1,4 +1,3 @@ - import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 2.12 @@ -42,13 +41,13 @@ Window { color: "#323232" focus: true - // Gestion des touches du clavier physique (déclarée sous forme de fonction) + // Gestion des touches du clavier physique Keys.onPressed: function(event) { - if (mot != ""){ + if (mot !== "") { // Saisie d'une lettre (de A à Z) if (/^[a-zA-Z]$/.test(event.text)) { if (indice_case < nb_lettres) { // On s'assure de ne pas dépasser la ligne - let cellIndex = current_essai * nb_lettres + indice_case; + var cellIndex = current_essai * nb_lettres + indice_case; caseArray[cellIndex]._textText = event.text.toUpperCase(); indice_case++; event.accepted = true; @@ -56,94 +55,65 @@ Window { } // Gestion de la touche Backspace else if (event.key === Qt.Key_Backspace) { - if (indice_case > 0) { // On peut effacer si on a déjà saisi une lettre + if (indice_case > 0) { indice_case--; - let cellIndex = current_essai * nb_lettres + indice_case; + var cellIndex = current_essai * nb_lettres + indice_case; caseArray[cellIndex]._textText = ""; event.accepted = true; } } // Passage à la ligne suivante avec la touche Entrée else if (event.key === Qt.Key_Return) { - // On ne passe à la ligne suivante que si la ligne est complètement remplie if (indice_case === nb_lettres) { // Construire le mot entré en majuscules var candidate = []; for (var i = 0; i < nb_lettres; i++){ candidate[i] = caseArray[current_essai * nb_lettres + i]._textText.toUpperCase(); } -<<<<<<< Updated upstream - console.log("Mot entré :", mot_entre.toUpperCase()); - if (motusGame.existWord(mot_entre.toUpperCase())){ - - // Vérification de la proposition sur la ligne actuelle -======= var mot_entre = candidate.join(""); console.log("Mot entré :", mot_entre); if (motusGame.existWord(mot_entre)) { - // Le mot existe, on procède à l'évaluation avec gestion des doublons + // Le mot existe, on procède à l'évaluation + // Préparer le mot cible en majuscules (mot_split contient le mot à deviner) var target = mot_split.map(function(letter) { return letter.toUpperCase(); }); // Construire un tableau de fréquence des lettres du mot cible var targetCounts = {}; ->>>>>>> Stashed changes for (var i = 0; i < nb_lettres; i++) { var letter = target[i]; targetCounts[letter] = (targetCounts[letter] || 0) + 1; } // Tableau pour stocker la couleur à appliquer pour chaque case. - // Par défaut, on ne change pas le style (chaine vide) + // Par défaut, on ne change pas le style (chaîne vide) var resultColors = new Array(nb_lettres); - // Première passe : marquer en vert les lettres bien placées + // Première passe : lettres bien placées (vert) for (var i = 0; i < nb_lettres; i++) { if (candidate[i] === target[i]) { resultColors[i] = "#42cc3d"; // vert targetCounts[candidate[i]]--; } else { -<<<<<<< Updated upstream - for (var j = 0; j < nb_lettres; j++) { - - if (lettre_verif === mot_split[j].toUpperCase()) { - case_verif.rectangleColor = "#f0d437"; - case_verif.rectangleBordercolor = "#f0d437"; - - break; - - - } - } - } - } - - if (mot_entre.toUpperCase() === mot.toUpperCase()) { - motusGame.setWinbool(true); - console.log("✅ Victoire !"); - } - - // Passage à la ligne suivante si possible -======= - resultColors[i] = ""; // ne pas modifier le style + resultColors[i] = ""; // ne change pas le style de base } } - // Deuxième passe : marquer en jaune les lettres présentes mais mal placées + // Deuxième passe : lettres présentes mais mal placées (jaune) for (var i = 0; i < nb_lettres; i++) { - if (resultColors[i] === "") { // lettre non marquée en vert + if (resultColors[i] === "") { var letter = candidate[i]; if (targetCounts[letter] && targetCounts[letter] > 0) { resultColors[i] = "#f0d437"; // jaune targetCounts[letter]--; } - // Sinon, resultColors[i] reste vide pour conserver le style de base + // Sinon, resultColors[i] reste vide et le style de base est conservé } } - // Appliquer les couleurs aux cases et aux touches uniquement si une couleur est définie + // Appliquer les couleurs aux cases et aux touches si une couleur a été définie for (var i = 0; i < nb_lettres; i++) { var case_verif = caseArray[current_essai * nb_lettres + i]; if (resultColors[i] !== "") { @@ -153,8 +123,13 @@ Window { } } + // Vérifier si le mot entré correspond exactement au mot à deviner + if (mot_entre.toUpperCase() === mot.toUpperCase()) { + motusGame.setWinbool(true); + console.log("✅ Victoire !"); + } + // Passage à la ligne suivante et mise à jour du focus ->>>>>>> Stashed changes if (current_essai < nb_essais - 1) { current_essai++; indice_case = 0; @@ -164,8 +139,7 @@ Window { mot = ""; } } else { - // Le mot n'existe pas dans le dictionnaire : - // Colorer toute la ligne en rouge + // Le mot n'existe pas dans le dictionnaire : colorer toute la ligne en rouge for (var i = 0; i < nb_lettres; i++) { var case_verif = caseArray[current_essai * nb_lettres + i]; case_verif.rectangleColor = "#cf1b2a"; @@ -176,31 +150,27 @@ Window { event.accepted = true; } } - } } - // Disposition globale en colonne + // Timer pour réinitialiser le style de la ligne en cas de mot inexistant Timer { - id: revertTimer - interval: 1000 // 1 seconde (1000 millisecondes) - repeat: false // Ne se répète pas - onTriggered: { - // Réinitialiser la couleur - console.log('coucou'); - for (var ind = 0; ind < nb_lettres; ind++) { - var case_verif = caseArray[current_essai * nb_lettres + ind]; - case_verif.rectangleColor = "#323232"; - case_verif.rectangleBordercolor = "#ffffff"; - } + id: revertTimer + interval: 1000 // 1 seconde + repeat: false + onTriggered: { + console.log("Réinitialisation du style de la ligne"); + for (var i = 0; i < nb_lettres; i++) { + var case_verif = caseArray[current_essai * nb_lettres + i]; + case_verif.rectangleColor = "#323232"; + case_verif.rectangleBordercolor = "#ffffff"; } } + } Row { id: main_row - anchors.fill: parent - spacing: 150 Rectangle { @@ -211,7 +181,7 @@ Window { border.width: 0 anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left - anchors.leftMargin: 0.05*Window.width + anchors.leftMargin: 0.05 * Window.width Column { id: column_buttons @@ -233,12 +203,13 @@ Window { MouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor - onClicked: { // début d'une game, il faut bloquer les boutons de régénération etc + onClicked: { + // Début d'une partie, désactivation des boutons de régénération, etc. mot = motusGame.getRandomWord(nb_lettres); motusGame.startTimer(); case3._textText = mot; mot_split = mot.split(""); - console.log(mot_split) + console.log(mot_split); } } } @@ -405,7 +376,6 @@ Window { } } - Rectangle { id: rectangle1 width: 600 @@ -418,7 +388,6 @@ Window { anchors.bottom: parent.bottom anchors.bottomMargin: 50 - Column { anchors.fill: parent anchors.margins: 10 @@ -439,11 +408,15 @@ Window { Repeater { model: modelData delegate: Rectangle { + id: keyRect + property string keyLetter: modelData // Stocke la lettre associée + property color keyColor: "#808080" // Couleur par défaut + width: (modelData === "Entrée" || modelData === "<") ? 80 : 50 height: 60 - color: keyColor // Lier la couleur affichée à keyColor + color: keyColor // Liaison dynamique avec keyColor radius: 5 - border.color: keyColor // Pareil pour la bordure + border.color: keyColor // Même couleur pour la bordure Text { anchors.centerIn: parent @@ -476,7 +449,7 @@ Window { } Component.onCompleted: { // Enregistrer chaque touche dans keysArray pour y accéder plus tard - mainWindow.keysArray.push(keyRect) + mainWindow.keysArray.push(keyRect); } } } @@ -495,7 +468,7 @@ Window { border.width: 0 anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right - anchors.rightMargin: 0.05*Window.width + anchors.rightMargin: 0.05 * Window.width Row { y: 50 @@ -520,7 +493,6 @@ Window { } } } - } } @@ -541,7 +513,6 @@ Window { visible: motusGame.loose color: "red" font.pixelSize: 30 - anchors.horizontalCenterOffset: 0 anchors.horizontalCenter: parent.horizontalCenter } @@ -551,8 +522,6 @@ Window { visible: motusGame.win color: "green" font.pixelSize: 30 - anchors.horizontalCenterOffset: 0 anchors.horizontalCenter: parent.horizontalCenter } - }