From 60462ac4a36a6a39cd221f8eedcb05f558168415 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Tue, 7 Jun 2022 16:57:12 +0200
Subject: [PATCH] Improve gameplay, add moves count limit

---
 android/gradle.properties  |  4 ++--
 lib/layout/game.dart       |  7 ++++++-
 lib/layout/parameters.dart |  4 ++--
 lib/provider/data.dart     | 14 ++++++++++++++
 lib/utils/board_utils.dart |  5 ++++-
 5 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/android/gradle.properties b/android/gradle.properties
index d9abd55..6638812 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.12
-app.versionCode=12
+app.versionName=0.0.13
+app.versionCode=13
diff --git a/lib/layout/game.dart b/lib/layout/game.dart
index 558cde4..1fd8e22 100644
--- a/lib/layout/game.dart
+++ b/lib/layout/game.dart
@@ -41,6 +41,11 @@ class Game {
       progressIndicator += ' (+' + myProvider.progressDelta.toString() + ')';
     }
 
+    Color maxMovesCountColor = Colors.grey;
+    if (myProvider.movesCount > myProvider.maxMovesCount) {
+      maxMovesCountColor = Colors.red;
+    }
+
     return Table(
       children: [
         TableRow(
@@ -60,7 +65,7 @@ class Game {
                   style: TextStyle(
                     fontSize: 15,
                     fontWeight: FontWeight.w600,
-                    color: Colors.grey,
+                    color: maxMovesCountColor,
                   ),
                 ),
               ]
diff --git a/lib/layout/parameters.dart b/lib/layout/parameters.dart
index c901d7b..30b9665 100644
--- a/lib/layout/parameters.dart
+++ b/lib/layout/parameters.dart
@@ -13,8 +13,8 @@ class Parameters {
         mainAxisSize: MainAxisSize.min,
         mainAxisAlignment: MainAxisAlignment.center,
         children: [
-          // Parameters.buildParameterSelector(myProvider, 'level'),
-          // SizedBox(height: 5),
+          Parameters.buildParameterSelector(myProvider, 'level'),
+          SizedBox(height: 5),
           Parameters.buildParameterSelector(myProvider, 'size'),
           SizedBox(height: 5),
           Parameters.buildParameterSelector(myProvider, 'colors'),
diff --git a/lib/provider/data.dart b/lib/provider/data.dart
index 07bbb17..2417899 100644
--- a/lib/provider/data.dart
+++ b/lib/provider/data.dart
@@ -142,6 +142,20 @@ class Data extends ChangeNotifier {
     return getColorsCountFromParameter(_parameterColorsDefault);
   }
 
+  int getMovesCountLimitDeltaFromLevelParameter(String parameterLevel) {
+    switch(parameterLevel) {
+      case 'easy': { return 5; }
+      break;
+      case 'medium': { return 3; }
+      break;
+      case 'hard': { return 1; }
+      break;
+      case 'nightmare': { return -1; }
+      break;
+    }
+    return getMovesCountLimitDeltaFromLevelParameter(_parameterLevelDefault);
+  }
+
   int get boardSize => _boardSize;
   void updateBoardSize(int boardSize) {
     _boardSize = boardSize;
diff --git a/lib/utils/board_utils.dart b/lib/utils/board_utils.dart
index 3f1ef2f..029cbed 100644
--- a/lib/utils/board_utils.dart
+++ b/lib/utils/board_utils.dart
@@ -50,7 +50,10 @@ class BoardUtils {
     int boardSize = myProvider.boardSize;
     int colorsCount = myProvider.colorsCount;
 
-    return (30 * (boardSize * colorsCount) / (17 * 6)).round();
+    int baseMaxMovesCount = (30 * (boardSize * colorsCount) / (17 * 6)).round();
+    int deltaFromLevel = myProvider.getMovesCountLimitDeltaFromLevelParameter(myProvider.parameterLevel);
+
+    return baseMaxMovesCount + deltaFromLevel;
   }
 
   static fillBoardFromFirstCell(Data myProvider, int value) {
-- 
GitLab