Skip to content
Snippets Groups Projects
Commit de9d4ac6 authored by Massies Alexandre's avatar Massies Alexandre
Browse files

virtual keaboard is functional

parent 2b9d684a
Branches
No related tags found
No related merge requests found
......@@ -478,20 +478,116 @@ Window {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
if (mot !== "" && !motusGame.loosetry && !motusGame.win && !motusGame.loosetime) {
// Gestion de la touche Backspace
if (modelData === "<") {
if (indice_case > 0) {
indice_case--;
caseArray[indice_case]._textText = "";
case_focus = caseArray[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 (modelData === "") {
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();
}
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
var target = mot_split.map(function(letter) {
return letter.toUpperCase();
});
// Construire un tableau de fréquence des lettres du mot cible
var targetCounts = {};
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 (chaîne vide)
var resultColors = new Array(nb_lettres);
// Première passe : marquer en vert les lettres bien placées
for (var i = 0; i < nb_lettres; i++) {
if (candidate[i] === target[i]) {
resultColors[i] = "#42cc3d"; // vert
targetCounts[candidate[i]]--;
} else {
resultColors[i] = "";
}
}
// Vérifier si le mot entré correspond exactement au mot à deviner
if (mot_entre.toUpperCase() === mot.toUpperCase()) {
motusGame.setWinbool(true);
console.log("✅ Victoire !");
}
// Deuxième passe : marquer en jaune les lettres présentes mais mal placées
for (var i = 0; i < nb_lettres; i++) {
if (resultColors[i] === "") {
var letter = candidate[i];
if (targetCounts[letter] && targetCounts[letter] > 0) {
resultColors[i] = "#f0d437"; // jaune
targetCounts[letter]--;
}
}
}
} else if (modelData === "") {
// Action pour la touche "↑" si nécessaire
// 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] !== "") {
case_verif.rectangleColor = resultColors[i];
case_verif.rectangleBorderColor = resultColors[i];
changeKeyColor(candidate[i], resultColors[i]);
}
}
// Passage à la ligne suivante et mise à jour du focus
if (current_essai < nb_essais - 1) {
current_essai++;
indice_case = 0;
case_focus = caseArray[current_essai * nb_lettres];
} else {
if (indice_case < caseArray.length) {
caseArray[indice_case]._textText = modelData.toUpperCase();
// Fin de partie : désactiver l'interface ou afficher un message
if (mot_entre.toUpperCase() !== mot.toUpperCase()) {
motusGame.setLoosetrybool(true);
console.log("loosetry=true");
}
}
}
else {
// 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";
case_verif.rectangleBorderColor = "#cf1b2a";
}
revertTimer.start();
}
}
}
// Saisie d'une lettre (de A à Z)
else{
if (indice_case < nb_lettres) {
var cellIndex = current_essai * nb_lettres + indice_case;
caseArray[cellIndex]._textText = modelData.toUpperCase();
indice_case++;
if (indice_case < caseArray.length)
case_focus = caseArray[indice_case];
}
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment