Skip to content
Snippets Groups Projects
Commit 2cb4e009 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Ensure first cell is not mined (postone put mines on board)

parent b0327f21
No related branches found
No related tags found
1 merge request!7Resolve "Ensure first cell is not mined"
Pipeline #1815 passed
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=0.0.5 app.versionName=0.0.6
app.versionCode=5 app.versionCode=6
Ensure first cell is not mined (postone put mines on board)
Impossibilité de tomber sur une mine au premier coup (reporte la génération de la grille)
...@@ -34,6 +34,11 @@ class Cell { ...@@ -34,6 +34,11 @@ class Cell {
fit: BoxFit.fill, fit: BoxFit.fill,
), ),
onTap: () { onTap: () {
if (!myProvider.isBoardMined) {
myProvider.updateCells(BoardUtils.createBoard(myProvider, row, col));
myProvider.updateIsBoardMined(true);
}
if (!(myProvider.gameWin || myProvider.gameFail)) { if (!(myProvider.gameWin || myProvider.gameFail)) {
if (myProvider.reportMode) { if (myProvider.reportMode) {
BoardUtils.reportCell(myProvider, row, col); BoardUtils.reportCell(myProvider, row, col);
......
...@@ -16,6 +16,7 @@ class Data extends ChangeNotifier { ...@@ -16,6 +16,7 @@ class Data extends ChangeNotifier {
// Game data // Game data
bool _gameRunning = false; bool _gameRunning = false;
bool _isBoardMined = false;
bool _gameWin = false; bool _gameWin = false;
bool _gameFail = false; bool _gameFail = false;
bool _reportMode = false; bool _reportMode = false;
...@@ -102,6 +103,12 @@ class Data extends ChangeNotifier { ...@@ -102,6 +103,12 @@ class Data extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
bool get isBoardMined => _isBoardMined;
void updateIsBoardMined(bool isBoardMined) {
_isBoardMined = isBoardMined;
notifyListeners();
}
bool get gameWin => _gameWin; bool get gameWin => _gameWin;
void updateGameWin(bool gameWin) { void updateGameWin(bool gameWin) {
_gameWin = gameWin; _gameWin = gameWin;
......
...@@ -85,22 +85,32 @@ class BoardUtils { ...@@ -85,22 +85,32 @@ class BoardUtils {
return minesCount; return minesCount;
} }
static List createBoard(int sizeHorizontal, int sizeVertical, String level) { static List createInitialEmptyBoard(Data myProvider) {
List cells = createEmptyBoard(sizeHorizontal, sizeVertical); 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 // Shuffle cells to put random mines, expect on currently selected one
List cellsArray = []; List allowedCells = [];
for (var row = 0; row < sizeVertical; row++) { for (var row = 0; row < sizeVertical; row++) {
for (var col = 0; col < sizeHorizontal; col++) { 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 // Put random mines on board
int minesCount = getMinesCount(sizeHorizontal, sizeVertical, level); int minesCount = getMinesCount(sizeHorizontal, sizeVertical, level);
for (var mineIndex = 0; mineIndex < minesCount; mineIndex++) { 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 // Compute all mines counts on cells
......
...@@ -11,13 +11,7 @@ class GameUtils { ...@@ -11,13 +11,7 @@ class GameUtils {
print('Starting game: ' + myProvider.size + ' - ' + myProvider.level); print('Starting game: ' + myProvider.size + ' - ' + myProvider.level);
myProvider.updateSize(myProvider.size); myProvider.updateSize(myProvider.size);
myProvider.updateGameRunning(true); myProvider.updateGameRunning(true);
myProvider.updateCells( BoardUtils.createInitialEmptyBoard(myProvider);
BoardUtils.createBoard(
myProvider.sizeHorizontal,
myProvider.sizeVertical,
myProvider.level
)
);
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment