From 2cb4e009b3fd1aea0d8b1762e5d58ae65ed1eab1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Sun, 25 Jul 2021 22:22:27 +0200 Subject: [PATCH] Ensure first cell is not mined (postone put mines on board) --- android/gradle.properties | 4 ++-- .../metadata/android/en-US/changelogs/6.txt | 1 + .../metadata/android/fr-FR/changelogs/6.txt | 1 + lib/entities/cell.dart | 5 ++++ lib/provider/data.dart | 7 ++++++ lib/utils/board_utils.dart | 24 +++++++++++++------ lib/utils/game_utils.dart | 8 +------ 7 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/6.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/6.txt diff --git a/android/gradle.properties b/android/gradle.properties index aa51064..135006f 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.5 -app.versionCode=5 +app.versionName=0.0.6 +app.versionCode=6 diff --git a/fastlane/metadata/android/en-US/changelogs/6.txt b/fastlane/metadata/android/en-US/changelogs/6.txt new file mode 100644 index 0000000..9ff6c06 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/6.txt @@ -0,0 +1 @@ +Ensure first cell is not mined (postone put mines on board) diff --git a/fastlane/metadata/android/fr-FR/changelogs/6.txt b/fastlane/metadata/android/fr-FR/changelogs/6.txt new file mode 100644 index 0000000..0c8a46b --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/6.txt @@ -0,0 +1 @@ +Impossibilité de tomber sur une mine au premier coup (reporte la génération de la grille) diff --git a/lib/entities/cell.dart b/lib/entities/cell.dart index 30b0e1b..8a0984d 100644 --- a/lib/entities/cell.dart +++ b/lib/entities/cell.dart @@ -34,6 +34,11 @@ class Cell { fit: BoxFit.fill, ), onTap: () { + if (!myProvider.isBoardMined) { + myProvider.updateCells(BoardUtils.createBoard(myProvider, row, col)); + myProvider.updateIsBoardMined(true); + } + if (!(myProvider.gameWin || myProvider.gameFail)) { if (myProvider.reportMode) { BoardUtils.reportCell(myProvider, row, col); diff --git a/lib/provider/data.dart b/lib/provider/data.dart index a0ecdf2..ffe9042 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -16,6 +16,7 @@ class Data extends ChangeNotifier { // Game data bool _gameRunning = false; + bool _isBoardMined = false; bool _gameWin = false; bool _gameFail = false; bool _reportMode = false; @@ -102,6 +103,12 @@ class Data extends ChangeNotifier { notifyListeners(); } + bool get isBoardMined => _isBoardMined; + void updateIsBoardMined(bool isBoardMined) { + _isBoardMined = isBoardMined; + notifyListeners(); + } + 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 7aeb55d..88da048 100644 --- a/lib/utils/board_utils.dart +++ b/lib/utils/board_utils.dart @@ -85,22 +85,32 @@ class BoardUtils { return minesCount; } - static List createBoard(int sizeHorizontal, int sizeVertical, String level) { - List cells = createEmptyBoard(sizeHorizontal, sizeVertical); + static List createInitialEmptyBoard(Data myProvider) { + myProvider.updateIsBoardMined(false); + myProvider.updateCells(createEmptyBoard(myProvider.sizeHorizontal, myProvider.sizeVertical)); + } + + static List createBoard(Data myProvider, int forbiddenRow, int forbiddenCol) { + List cells = myProvider.cells; + int sizeHorizontal = myProvider.sizeHorizontal; + int sizeVertical = myProvider.sizeVertical; + String level = myProvider.level; - // Shuffle cells to put random mines - List cellsArray = []; + // Shuffle cells to put random mines, expect on currently selected one + List allowedCells = []; for (var row = 0; row < sizeVertical; row++) { for (var col = 0; col < sizeHorizontal; col++) { - cellsArray.add([row, col]); + if (!((forbiddenRow == row) && (forbiddenCol == col))) { + allowedCells.add([row, col]); + } } } - cellsArray.shuffle(); + allowedCells.shuffle(); // Put random mines on board int minesCount = getMinesCount(sizeHorizontal, sizeVertical, level); for (var mineIndex = 0; mineIndex < minesCount; mineIndex++) { - cells[cellsArray[mineIndex][0]][cellsArray[mineIndex][1]].isMined = true; + cells[allowedCells[mineIndex][0]][allowedCells[mineIndex][1]].isMined = true; } // Compute all mines counts on cells diff --git a/lib/utils/game_utils.dart b/lib/utils/game_utils.dart index 909c1ed..d4e308f 100644 --- a/lib/utils/game_utils.dart +++ b/lib/utils/game_utils.dart @@ -11,13 +11,7 @@ class GameUtils { print('Starting game: ' + myProvider.size + ' - ' + myProvider.level); myProvider.updateSize(myProvider.size); myProvider.updateGameRunning(true); - myProvider.updateCells( - BoardUtils.createBoard( - myProvider.sizeHorizontal, - myProvider.sizeVertical, - myProvider.level - ) - ); + BoardUtils.createInitialEmptyBoard(myProvider); } } -- GitLab