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

Add counters (moves and remaining pegs)

parent 7eedd09c
No related branches found
No related tags found
1 merge request!5Resolve "Add moves and remaining pegs counts"
Pipeline #3296 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.4 app.versionName=0.0.5
app.versionCode=4 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 { ...@@ -35,27 +35,19 @@ class Game {
Column( Column(
children: [ children: [
Text( Text(
'SCORE', '♟️ ' + myProvider.remainingPegsCount.toString(),
style: TextStyle( style: TextStyle(
fontSize: 40, fontSize: 40,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Colors.black, color: Colors.black,
), ),
), ),
Text(
'TARGET',
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.w600,
color: Colors.grey,
),
),
], ],
), ),
Column( Column(
children: [ children: [
Text( Text(
'INFOS', myProvider.movesCount.toString(),
style: TextStyle( style: TextStyle(
fontSize: 20, fontSize: 20,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
......
...@@ -3,6 +3,7 @@ import 'dart:convert'; ...@@ -3,6 +3,7 @@ import 'dart:convert';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:solitaire_game/entities/tile.dart'; import 'package:solitaire_game/entities/tile.dart';
import 'package:solitaire_game/utils/game_utils.dart';
class Data extends ChangeNotifier { class Data extends ChangeNotifier {
// Configuration available values // Configuration available values
...@@ -26,6 +27,8 @@ class Data extends ChangeNotifier { ...@@ -26,6 +27,8 @@ class Data extends ChangeNotifier {
List<List<Tile?>> _board = []; List<List<Tile?>> _board = [];
int _boardSize = 0; int _boardSize = 0;
double _tileSize = 0; double _tileSize = 0;
int _movesCount = 0;
int _remainingPegsCount = 0;
String _currentState = ''; String _currentState = '';
void updateParameterSkin(String parameterSkin) { void updateParameterSkin(String parameterSkin) {
...@@ -84,6 +87,7 @@ class Data extends ChangeNotifier { ...@@ -84,6 +87,7 @@ class Data extends ChangeNotifier {
var currentState = { var currentState = {
'skin': _parameterSkin, 'skin': _parameterSkin,
'movesCount': _movesCount.toString(),
'boardValues': boardValues, 'boardValues': boardValues,
}; };
...@@ -147,6 +151,7 @@ class Data extends ChangeNotifier { ...@@ -147,6 +151,7 @@ class Data extends ChangeNotifier {
void updateBoard(List<List<Tile?>> board) { void updateBoard(List<List<Tile?>> board) {
_board = board; _board = board;
updateBoardSize(board.length); updateBoardSize(board.length);
updateRemainingPegsCount(GameUtils.countRemainingPegs(this));
notifyListeners(); notifyListeners();
} }
...@@ -159,6 +164,22 @@ class Data extends ChangeNotifier { ...@@ -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 gameIsRunning => _gameIsRunning;
bool get isGameFinished => !_gameIsRunning; bool get isGameFinished => !_gameIsRunning;
void updateGameIsRunning(bool gameIsRunning) { void updateGameIsRunning(bool gameIsRunning) {
...@@ -172,6 +193,8 @@ class Data extends ChangeNotifier { ...@@ -172,6 +193,8 @@ class Data extends ChangeNotifier {
void resetGame() { void resetGame() {
_gameIsRunning = false; _gameIsRunning = false;
_movesCount = 0;
_remainingPegsCount = 0;
notifyListeners(); notifyListeners();
} }
} }
...@@ -2,6 +2,7 @@ import 'dart:math'; ...@@ -2,6 +2,7 @@ import 'dart:math';
import 'package:solitaire_game/entities/tile.dart'; import 'package:solitaire_game/entities/tile.dart';
import 'package:solitaire_game/provider/data.dart'; import 'package:solitaire_game/provider/data.dart';
import 'package:solitaire_game/utils/game_utils.dart';
class BoardUtils { class BoardUtils {
static printGrid(List cells) { static printGrid(List cells) {
......
import 'package:solitaire_game/entities/tile.dart'; 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/provider/data.dart';
import 'package:solitaire_game/utils/board_utils.dart'; import 'package:solitaire_game/utils/board_utils.dart';
...@@ -24,6 +25,7 @@ class GameUtils { ...@@ -24,6 +25,7 @@ class GameUtils {
if (savedState.isNotEmpty) { if (savedState.isNotEmpty) {
try { try {
myProvider.setParameterValue('skin', savedState['skin']); myProvider.setParameterValue('skin', savedState['skin']);
myProvider.updateMovesCount(int.parse(savedState['movesCount']));
myProvider.updateBoard( myProvider.updateBoard(
BoardUtils.createBoardFromSavedState(myProvider, savedState['boardValues'])); BoardUtils.createBoardFromSavedState(myProvider, savedState['boardValues']));
...@@ -101,5 +103,26 @@ class GameUtils { ...@@ -101,5 +103,26 @@ class GameUtils {
myProvider.updatePegValue(targetRow, targetCol, true); myProvider.updatePegValue(targetRow, targetCol, true);
// remove peg from middle tile // remove peg from middle tile
myProvider.updatePegValue(middleRow, middleCol, false); 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