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

Merge branch '12-ensure-first-cell-is-not-mined' into 'master'

Resolve "Ensure first cell is not mined"

Closes #12

See merge request !7
parents b0327f21 2cb4e009
No related branches found
No related tags found
1 merge request!7Resolve "Ensure first cell is not mined"
Pipeline #1820 passed
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
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 {
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);
......
......@@ -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;
......
......@@ -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
......
......@@ -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);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment