From 632a71a0c556695c828bcbe388bca75c5ba64d89 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Mon, 26 Jul 2021 15:54:48 +0200
Subject: [PATCH] Display mines count indicator

---
 android/gradle.properties                     |  4 ++--
 .../metadata/android/en-US/changelogs/7.txt   |  1 +
 .../metadata/android/fr-FR/changelogs/7.txt   |  1 +
 lib/layout/board.dart                         | 23 ++++++++++++++++++-
 lib/provider/data.dart                        |  6 +++++
 lib/utils/board_utils.dart                    | 19 +++++++++++++--
 lib/utils/game_utils.dart                     |  1 +
 7 files changed, 50 insertions(+), 5 deletions(-)
 create mode 100644 fastlane/metadata/android/en-US/changelogs/7.txt
 create mode 100644 fastlane/metadata/android/fr-FR/changelogs/7.txt

diff --git a/android/gradle.properties b/android/gradle.properties
index 135006f..85b94f8 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.6
-app.versionCode=6
+app.versionName=0.0.7
+app.versionCode=7
diff --git a/fastlane/metadata/android/en-US/changelogs/7.txt b/fastlane/metadata/android/en-US/changelogs/7.txt
new file mode 100644
index 0000000..4266854
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/7.txt
@@ -0,0 +1 @@
+Display mines count indicator
diff --git a/fastlane/metadata/android/fr-FR/changelogs/7.txt b/fastlane/metadata/android/fr-FR/changelogs/7.txt
new file mode 100644
index 0000000..e3751c7
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/7.txt
@@ -0,0 +1 @@
+Affichage d'un compteur de mines
diff --git a/lib/layout/board.dart b/lib/layout/board.dart
index f333605..0c12899 100644
--- a/lib/layout/board.dart
+++ b/lib/layout/board.dart
@@ -1,6 +1,7 @@
 import 'package:flutter/material.dart';
 
 import '../provider/data.dart';
+import '../utils/board_utils.dart';
 
 class Board {
 
@@ -18,7 +19,12 @@ class Board {
           width: 2,
         ),
       ),
-      child: buildGameTileset(myProvider),
+      child: Column(
+        children: [
+          buildGameTileset(myProvider),
+          buildMinesCounterWidget(myProvider),
+        ],
+      ),
     );
   }
 
@@ -79,4 +85,19 @@ class Board {
     );
   }
 
+  static Container buildMinesCounterWidget(Data myProvider) {
+    String markedMinesCount = BoardUtils.countFlaggedCells(myProvider.cells).toString();
+    String placedMinesCount = myProvider.minesCount.toString();
+
+    return Container(
+      child: Text(
+        markedMinesCount + ' / ' + placedMinesCount,
+        style: TextStyle(
+          fontSize: 20,
+          color: Colors.white
+        ),
+      ),
+    );
+  }
+
 }
diff --git a/lib/provider/data.dart b/lib/provider/data.dart
index ffe9042..75cf513 100644
--- a/lib/provider/data.dart
+++ b/lib/provider/data.dart
@@ -17,6 +17,7 @@ class Data extends ChangeNotifier {
   // Game data
   bool _gameRunning = false;
   bool _isBoardMined = false;
+  int _minesCount = 0;
   bool _gameWin = false;
   bool _gameFail = false;
   bool _reportMode = false;
@@ -109,6 +110,11 @@ class Data extends ChangeNotifier {
     notifyListeners();
   }
 
+  int get minesCount => _minesCount;
+  void updateMinesCount(int minesCount) {
+    _minesCount = minesCount;
+  }
+
   bool get gameWin => _gameWin;
   void updateGameWin(bool gameWin) {
     _gameWin = gameWin;
diff --git a/lib/utils/board_utils.dart b/lib/utils/board_utils.dart
index 88da048..e7e7bb3 100644
--- a/lib/utils/board_utils.dart
+++ b/lib/utils/board_utils.dart
@@ -108,8 +108,7 @@ class BoardUtils {
     allowedCells.shuffle();
 
     // Put random mines on board
-    int minesCount = getMinesCount(sizeHorizontal, sizeVertical, level);
-    for (var mineIndex = 0; mineIndex < minesCount; mineIndex++) {
+    for (var mineIndex = 0; mineIndex < myProvider.minesCount; mineIndex++) {
       cells[allowedCells[mineIndex][0]][allowedCells[mineIndex][1]].isMined = true;
     }
 
@@ -234,4 +233,20 @@ class BoardUtils {
 
     return true;
   }
+
+  static int countFlaggedCells(List cells) {
+    int count = 0;
+
+    int sizeHorizontal = cells.length;
+    int sizeVertical = cells[0].length;
+    for (var row = 0; row < sizeVertical; row++) {
+      for (var col = 0; col < sizeHorizontal; col++) {
+        if (cells[row][col].isMarked == true) {
+          count++;
+        }
+      }
+    }
+
+    return count;
+  }
 }
diff --git a/lib/utils/game_utils.dart b/lib/utils/game_utils.dart
index d4e308f..904838a 100644
--- a/lib/utils/game_utils.dart
+++ b/lib/utils/game_utils.dart
@@ -10,6 +10,7 @@ class GameUtils {
   static void startGame(Data myProvider) {
     print('Starting game: ' + myProvider.size + ' - ' + myProvider.level);
     myProvider.updateSize(myProvider.size);
+    myProvider.updateMinesCount(BoardUtils.getMinesCount(myProvider.sizeHorizontal, myProvider.sizeVertical, myProvider.level));
     myProvider.updateGameRunning(true);
     BoardUtils.createInitialEmptyBoard(myProvider);
   }
-- 
GitLab