diff --git a/android/gradle.properties b/android/gradle.properties index aa51064abebb79ba519e600afb7af23779154d4e..135006f9c1386c8757595c43e890e911f732f5a3 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 0000000000000000000000000000000000000000..9ff6c06121da32c2c920f8bc13b6304cda653493 --- /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 0000000000000000000000000000000000000000..0c8a46bf50f92898aae7011440789c5eb94437d5 --- /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 30b0e1beba83884c68fef89f1799f31f548a4338..8a0984d17e68f5f5d589eff97bdc8af14b06cd91 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 a0ecdf2f7cb1bd8ee0772706dfbb25dc29944e2b..ffe9042873b0f1b3223fdfd6ff5e5be01128e58b 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 7aeb55d9c30deed467c4dd60bb298c96c72fbe84..88da0481d32a8cb8546d6036ab819b892034b6fd 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 909c1ed4a1ea9e202d456a8f1af854c664579eb5..d4e308f86df66afae9dfd0fdf939e0c9fc5d4279 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); } }