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

Merge branch '5-add-moves-and-remaining-pegs-counts' into 'master'

Resolve "Add moves and remaining pegs counts"

Closes #5

See merge request !5
parents 7eedd09c b00cc847
No related branches found
No related tags found
1 merge request!5Resolve "Add moves and remaining pegs counts"
Pipeline #3299 passed
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
app.versionName=0.0.4
app.versionCode=4
app.versionName=0.0.5
app.versionCode=5
Add counters: moves and remaining pegs
\ No newline at end of file
Ajout des compteurs : nombre de coups et pions restants
\ No newline at end of file
......@@ -35,27 +35,19 @@ class Game {
Column(
children: [
Text(
'SCORE',
'♟️ ' + myProvider.remainingPegsCount.toString(),
style: TextStyle(
fontSize: 40,
fontWeight: FontWeight.w600,
color: Colors.black,
),
),
Text(
'TARGET',
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.w600,
color: Colors.grey,
),
),
],
),
Column(
children: [
Text(
'INFOS',
myProvider.movesCount.toString(),
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
......
......@@ -3,6 +3,7 @@ import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:solitaire_game/entities/tile.dart';
import 'package:solitaire_game/utils/game_utils.dart';
class Data extends ChangeNotifier {
// Configuration available values
......@@ -26,6 +27,8 @@ class Data extends ChangeNotifier {
List<List<Tile?>> _board = [];
int _boardSize = 0;
double _tileSize = 0;
int _movesCount = 0;
int _remainingPegsCount = 0;
String _currentState = '';
void updateParameterSkin(String parameterSkin) {
......@@ -84,6 +87,7 @@ class Data extends ChangeNotifier {
var currentState = {
'skin': _parameterSkin,
'movesCount': _movesCount.toString(),
'boardValues': boardValues,
};
......@@ -147,6 +151,7 @@ class Data extends ChangeNotifier {
void updateBoard(List<List<Tile?>> board) {
_board = board;
updateBoardSize(board.length);
updateRemainingPegsCount(GameUtils.countRemainingPegs(this));
notifyListeners();
}
......@@ -159,6 +164,22 @@ class Data extends ChangeNotifier {
}
}
int get movesCount => _movesCount;
void updateMovesCount(int movesCount) {
_movesCount = movesCount;
notifyListeners();
}
void incrementMovesCount() {
updateMovesCount(movesCount + 1);
}
int get remainingPegsCount => _remainingPegsCount;
void updateRemainingPegsCount(int remainingPegsCount) {
_remainingPegsCount = remainingPegsCount;
notifyListeners();
}
bool get gameIsRunning => _gameIsRunning;
bool get isGameFinished => !_gameIsRunning;
void updateGameIsRunning(bool gameIsRunning) {
......@@ -172,6 +193,8 @@ class Data extends ChangeNotifier {
void resetGame() {
_gameIsRunning = false;
_movesCount = 0;
_remainingPegsCount = 0;
notifyListeners();
}
}
......@@ -2,6 +2,7 @@ import 'dart:math';
import 'package:solitaire_game/entities/tile.dart';
import 'package:solitaire_game/provider/data.dart';
import 'package:solitaire_game/utils/game_utils.dart';
class BoardUtils {
static printGrid(List cells) {
......
import 'package:solitaire_game/entities/tile.dart';
import 'package:solitaire_game/layout/game.dart';
import 'package:solitaire_game/provider/data.dart';
import 'package:solitaire_game/utils/board_utils.dart';
......@@ -24,6 +25,7 @@ class GameUtils {
if (savedState.isNotEmpty) {
try {
myProvider.setParameterValue('skin', savedState['skin']);
myProvider.updateMovesCount(int.parse(savedState['movesCount']));
myProvider.updateBoard(
BoardUtils.createBoardFromSavedState(myProvider, savedState['boardValues']));
......@@ -101,5 +103,26 @@ class GameUtils {
myProvider.updatePegValue(targetRow, targetCol, true);
// remove peg from middle tile
myProvider.updatePegValue(middleRow, middleCol, false);
// increment moves count
myProvider.incrementMovesCount();
// update remaining pegs count
myProvider.updateRemainingPegsCount(GameUtils.countRemainingPegs(myProvider));
}
static int countRemainingPegs(Data myProvider) {
int count = 0;
List<List<Tile?>> board = myProvider.board;
for (var rowIndex = 0; rowIndex < board.length; rowIndex++) {
for (var colIndex = 0; colIndex < board[rowIndex].length; colIndex++) {
Tile? tile = board[rowIndex][colIndex];
if (tile != null && tile.hasPeg == true) {
count++;
}
}
}
return count;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment