From 54fb2799b893a7fe62ded03911b053cf29d7c72c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Mon, 29 Aug 2022 16:01:46 +0200 Subject: [PATCH] Add game end check --- android/gradle.properties | 4 ++-- .../metadata/android/en-US/changelogs/7.txt | 1 + .../metadata/android/fr-FR/changelogs/7.txt | 1 + lib/layout/game.dart | 8 ++++--- lib/provider/data.dart | 22 +++++++++++++++++-- lib/utils/game_utils.dart | 3 +++ 6 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/7.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/7.txt diff --git a/android/gradle.properties b/android/gradle.properties index 135006f..85b94f8 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.6 -app.versionCode=6 +app.versionName=0.0.7 +app.versionCode=7 diff --git a/fastlane/metadata/android/en-US/changelogs/7.txt b/fastlane/metadata/android/en-US/changelogs/7.txt new file mode 100644 index 0000000..8011497 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/7.txt @@ -0,0 +1 @@ +Add check end game \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/changelogs/7.txt b/fastlane/metadata/android/fr-FR/changelogs/7.txt new file mode 100644 index 0000000..a290942 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/7.txt @@ -0,0 +1 @@ +Ajout du test de fin de partie \ No newline at end of file diff --git a/lib/layout/game.dart b/lib/layout/game.dart index aeeeab7..1b13727 100644 --- a/lib/layout/game.dart +++ b/lib/layout/game.dart @@ -5,7 +5,7 @@ import 'package:solitaire_game/utils/game_utils.dart'; class Game { static Container buildGameWidget(Data myProvider) { - bool gameIsFinished = myProvider.isGameFinished; + bool gameIsFinished = myProvider.gameIsFinished; return Container( child: Column( @@ -28,6 +28,8 @@ class Game { } static Widget buildTopIndicatorWidget(Data myProvider) { + int allowedMovesCount = myProvider.allowedMovesCount; + return Table( children: [ TableRow( @@ -47,7 +49,7 @@ class Game { Column( children: [ Text( - GameUtils.countAllowedMoves(myProvider).toString(), + allowedMovesCount.toString(), style: TextStyle( fontSize: 20, fontWeight: FontWeight.w600, @@ -79,7 +81,7 @@ class Game { if (myProvider.gameWon()) { decorationImageAssetName = 'assets/icons/game_win.png'; } else { - decorationImageAssetName = 'assets/icons/game_fail.png'; + decorationImageAssetName = 'assets/icons/placeholder.png'; } Image decorationImage = Image( diff --git a/lib/provider/data.dart b/lib/provider/data.dart index 4dbc65c..a1c0aa6 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -24,11 +24,13 @@ class Data extends ChangeNotifier { // Game data bool _assetsPreloaded = false; bool _gameIsRunning = false; + bool _gameIsFinished = false; List<List<Tile?>> _board = []; int _boardSize = 0; double _tileSize = 0; int _movesCount = 0; int _remainingPegsCount = 0; + int _allowedMovesCount = 0; String _currentState = ''; void updateParameterSkin(String parameterSkin) { @@ -152,6 +154,7 @@ class Data extends ChangeNotifier { _board = board; updateBoardSize(board.length); updateRemainingPegsCount(GameUtils.countRemainingPegs(this)); + updateAllowedMovesCount(GameUtils.countAllowedMoves(this)); notifyListeners(); } @@ -180,19 +183,34 @@ class Data extends ChangeNotifier { notifyListeners(); } + int get allowedMovesCount => _allowedMovesCount; + void updateAllowedMovesCount(int allowedMovesCount) { + _allowedMovesCount = allowedMovesCount; + if (allowedMovesCount == 0) { + updateGameIsFinished(true); + } + notifyListeners(); + } + bool get gameIsRunning => _gameIsRunning; - bool get isGameFinished => !_gameIsRunning; + bool get gameIsFinished => _gameIsFinished; void updateGameIsRunning(bool gameIsRunning) { _gameIsRunning = gameIsRunning; notifyListeners(); } + void updateGameIsFinished(bool gameIsFinished) { + _gameIsFinished = gameIsFinished; + notifyListeners(); + } + bool gameWon() { - return isGameFinished; + return gameIsFinished && (remainingPegsCount == 1); } void resetGame() { _gameIsRunning = false; + _gameIsFinished = false; _movesCount = 0; _remainingPegsCount = 0; notifyListeners(); diff --git a/lib/utils/game_utils.dart b/lib/utils/game_utils.dart index 2d7d7cc..78b2154 100644 --- a/lib/utils/game_utils.dart +++ b/lib/utils/game_utils.dart @@ -124,6 +124,8 @@ class GameUtils { myProvider.incrementMovesCount(); // update remaining pegs count myProvider.updateRemainingPegsCount(GameUtils.countRemainingPegs(myProvider)); + // update allowed moves count + myProvider.updateAllowedMovesCount(GameUtils.countAllowedMoves(myProvider)); } static List<Tile> listRemainingPegs(Data myProvider) { @@ -165,6 +167,7 @@ class GameUtils { } }); }); + return allowedMovesCount; } } -- GitLab