From 2049ce55e38f4bd2c1fa89018f5d77b7096a8a27 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Wed, 28 Sep 2022 00:06:23 +0200
Subject: [PATCH] Add initial tip, repeat found letters on new guess

---
 android/gradle.properties                        |  4 ++--
 .../metadata/android/en-US/changelogs/20.txt     |  1 +
 .../metadata/android/fr-FR/changelogs/20.txt     |  1 +
 lib/layout/board.dart                            | 16 ++++++++++++++--
 lib/provider/data.dart                           | 12 ++++++++++++
 lib/utils/game_utils.dart                        |  1 +
 6 files changed, 31 insertions(+), 4 deletions(-)
 create mode 100644 fastlane/metadata/android/en-US/changelogs/20.txt
 create mode 100644 fastlane/metadata/android/fr-FR/changelogs/20.txt

diff --git a/android/gradle.properties b/android/gradle.properties
index 6c1d873..24add27 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,5 +1,5 @@
 org.gradle.jvmargs=-Xmx1536M
 android.useAndroidX=true
 android.enableJetifier=true
-app.versionName=0.0.19
-app.versionCode=19
+app.versionName=0.0.20
+app.versionCode=20
diff --git a/fastlane/metadata/android/en-US/changelogs/20.txt b/fastlane/metadata/android/en-US/changelogs/20.txt
new file mode 100644
index 0000000..e7ad04f
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/20.txt
@@ -0,0 +1 @@
+Add initial tip, repeat found letters on new guess
diff --git a/fastlane/metadata/android/fr-FR/changelogs/20.txt b/fastlane/metadata/android/fr-FR/changelogs/20.txt
new file mode 100644
index 0000000..ef2973d
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/20.txt
@@ -0,0 +1 @@
+Propose la première lettre et répète les lettres trouvées à chaque nouvelle ligne
diff --git a/lib/layout/board.dart b/lib/layout/board.dart
index 82313c5..5be81f4 100644
--- a/lib/layout/board.dart
+++ b/lib/layout/board.dart
@@ -10,7 +10,8 @@ class Board {
     int maxGuessesCount = myProvider.maxGuessesCount;
     int wordLength = int.parse(myProvider.length);
 
-    Widget buildCellWidget(String cellValue, String cellTip, bool hasFocus) {
+    Widget buildCellWidget(
+        String cellValue, String cellTip, bool hasFocus, String foundLetter) {
       Color textColor = Colors.white;
       Color focusBorderColor = Colors.yellow.shade700;
       Color defaultBorderColor = Colors.white;
@@ -20,6 +21,11 @@ class Board {
         cellImage = cellTip;
       }
 
+      if ((foundLetter != ' ') && (cellValue == ' ')) {
+        cellValue = foundLetter;
+        cellImage = 'good';
+      }
+
       Image imageWidget = Image(
         image: AssetImage('assets/skins/' + skin + '_' + cellImage + '.png'),
         fit: BoxFit.fill,
@@ -84,7 +90,13 @@ class Board {
             (lineIndex == guesses.length) &&
             (colIndex == word.length);
 
-        tableCells.add(TableCell(child: buildCellWidget(cellValue, cellTip, hasFocus)));
+        String foundLetter = ((!myProvider.gameWon) && (lineIndex == guesses.length))
+            ? myProvider.foundLetters.substring(colIndex, colIndex + 1)
+            : ' ';
+
+        tableCells.add(TableCell(
+          child: buildCellWidget(cellValue, cellTip, hasFocus, foundLetter),
+        ));
       }
 
       tableRows.add(TableRow(children: tableCells));
diff --git a/lib/provider/data.dart b/lib/provider/data.dart
index eb2462f..6086912 100644
--- a/lib/provider/data.dart
+++ b/lib/provider/data.dart
@@ -31,6 +31,7 @@ class Data extends ChangeNotifier {
   List _recentWords = [];
   List<String> _guesses = [];
   String _currentGuess = '';
+  String _foundLetters = '';
   int _maxGuessesCount = 7;
 
   String get lang => _lang;
@@ -100,6 +101,16 @@ class Data extends ChangeNotifier {
     _currentGuess = '';
   }
 
+  String get foundLetters => _foundLetters;
+  void initFoundLetters() {
+    _foundLetters = _word.substring(0, 1).padRight(_word.length, ' ');
+  }
+
+  void addFoundLetter(String letter, int i) {
+    _foundLetters = _foundLetters.substring(0, i) + letter + _foundLetters.substring(i + 1);
+    print('Found a "' + letter + '" => "' + _foundLetters + '".');
+  }
+
   bool get gameWon => _foundWord;
 
   getParameterValue(String parameterCode) {
@@ -204,6 +215,7 @@ class Data extends ChangeNotifier {
       _recentWords.insert(0, word);
       _recentWords = _recentWords.take(_recentWordsCount).toList();
     }
+    initFoundLetters();
     notifyListeners();
   }
 
diff --git a/lib/utils/game_utils.dart b/lib/utils/game_utils.dart
index 83a2cc1..69d5b5d 100644
--- a/lib/utils/game_utils.dart
+++ b/lib/utils/game_utils.dart
@@ -76,6 +76,7 @@ class GameUtils {
     for (int i = 0; i < wordLength; i++) {
       if ((tips[i] == '') && (word[i] == candidate[i])) {
         print('Found "' + word[i] + '" on the right place: ' + (i + 1).toString());
+        myProvider.addFoundLetter(word[i], i);
         word = replaceCharAt(word, i, ' ');
         candidate = replaceCharAt(candidate, i, ' ');
         tips[i] = 'good';
-- 
GitLab