From 93dde67e783b8680e89c1905744814efc1c1cd05 Mon Sep 17 00:00:00 2001 From: cldupland Date: Tue, 12 Nov 2019 17:26:45 +0100 Subject: [PATCH] Avancement sur les messages d'erreur de fin de tour et la fin de tour --- .../model/gameActions/GameAction.cs | 1 + .../model/gameActions/classic/GameMode.cs | 144 +++++------------- .../gameActions/classic/JouerUneCarte.cs | 13 +- .../gameActions/classic/TerminerSonTour.cs | 9 +- TheGameExtreme/model/manager/GameManager.cs | 32 +++- .../model/manager/SoloGameManager.cs | 3 - TheGameExtreme/viewmodel/Main.cs | 46 +++--- 7 files changed, 101 insertions(+), 147 deletions(-) diff --git a/TheGameExtreme/model/gameActions/GameAction.cs b/TheGameExtreme/model/gameActions/GameAction.cs index 62f408b..26af12d 100644 --- a/TheGameExtreme/model/gameActions/GameAction.cs +++ b/TheGameExtreme/model/gameActions/GameAction.cs @@ -7,6 +7,7 @@ namespace TheGameExtreme.model.gameActions public abstract class GameAction { protected Piles ListOrderedStacks { get; set; } + public String ErrorMessage { get; set; } protected GameAction(Piles listOrderedStacks) { diff --git a/TheGameExtreme/model/gameActions/classic/GameMode.cs b/TheGameExtreme/model/gameActions/classic/GameMode.cs index 17159ea..0c10966 100644 --- a/TheGameExtreme/model/gameActions/classic/GameMode.cs +++ b/TheGameExtreme/model/gameActions/classic/GameMode.cs @@ -15,6 +15,7 @@ namespace TheGameExtreme.model.gameActions.classic protected int nbCardAtBeginOfTurn = 7; protected Deck deck; private int nbMaxCard; + public String Message { get; set; } #region @@ -96,19 +97,26 @@ namespace TheGameExtreme.model.gameActions.classic public void pioche(List currentHand, Player player) { + Message = null; ((Piocher)gameActions[0]).pioche(currentHand, deck, player); } public void playCard(int valueCard, List currentHand, int orderedStackSelected, Player player, List CurrentCardPlayed) { + Message = null; if (((JouerUneCarte)gameActions[1]).play(valueCard, currentHand, orderedStackSelected, player, CurrentCardPlayed)) { OnTopRangeChanged(new TopRangeChangedEventArgs(piles.getStack(orderedStackSelected).Peek(), ((JouerUneCarte)gameActions[1]).OldCard, orderedStackSelected)); } + else + { + Message = ((JouerUneCarte)gameActions[1]).ErrorMessage; + } } public bool endTurn(List currentHand, List CurrentCardPlayed, Player player) { + Message = null; if (((TerminerSonTour)gameActions[2]).end(currentHand, nbCardAtBeginOfTurn, CurrentCardPlayed)) { pioche(currentHand, player); @@ -120,118 +128,46 @@ namespace TheGameExtreme.model.gameActions.classic } else { + Message = ((TerminerSonTour)gameActions[2]).ErrorMessage; return true; } - - //if (isEndGame()) // Ajouter le score en calculant les cartes restantes dans la pile et dans les mains des joueurs - //{ - // displayWinner(); - // return true; - //} - //else - //{ - // return true; - //} } - //protected void displayWinner() - //{ - // if (win) - // { - // EndMessage = "Le jeu est terminé!\n Bravo vous avez gagné!"; - // EndMessage = AppRessource.StrWin; - // } - //} - - - - - - - - - - - - - - - // private List playRule = new List(); - // private List beforeEndTurnRule = new List(); - // private List endTurnRule = new List(); - // private List commonRule = new List(); - - // public GameMode() - // { - // } - - // public void addPlayRule(PlayRule rule) - // { - // playRule?.Add(rule); - // } + #region Decaler dans un GameAction - // public void addEndTurnRule(EndTurnRule rule) - // { - // endTurnRule?.Add(rule); - // } - - // public void addBeforeEndTurnRule(BeforeEndTurnRule rule) - // { - // beforeEndTurnRule?.Add(rule); - // } - - // public void addCommonRule(Rule rule) - // { - // // Vérifier que se ne soit ni une PlayRule, ni une EndTurnRule ? - // commonRule?.Add(rule); - // } - - // public bool checkPlayRule(Card card, Stack orderedStack, bool bottomUp, List CurrentHand) - // { - // foreach(PlayRule rule in playRule) - // { - // if (rule.Test(card, orderedStack, bottomUp, CurrentHand)) // Gestion des messages pour savoir qu'elle règle n'est pas respecter. - // { - // return true; - // } - // } - // foreach (Rule rule in commonRule) - // { - - // } - // return false; - // } + public bool isEndGame(List currentHand) + { + if (currentHand.Count != 0) + { + List playableCard = new List(); + tryToFindSoluce(playableCard, currentHand); + return testEndGame(playableCard); + } + return false; + } - // public bool checkBeforeEndTurnRule(List CurrentCardPlayed, int nbCardAtBeginOfTurn, List CurrentHand) - // { - // foreach (BeforeEndTurnRule rule in beforeEndTurnRule) - // { - // if (!rule.Test(CurrentCardPlayed, nbCardAtBeginOfTurn, CurrentHand)) // Gestion des messages pour savoir qu'elle règle n'est pas respecter. - // { - // return false; - // } - // } - // foreach (Rule rule in commonRule) - // { + protected void tryToFindSoluce(List playableCard, List currentHand) + { + currentHand.ForEach(card => + { + if (card.Value > piles.getStack(0).Peek().Value || card.Value > piles.getStack(1).Peek().Value || card.Value < piles.getStack(2).Peek().Value || card.Value < piles.getStack(3).Peek().Value) + { + playableCard.Add(card); + } + }); + } - // } - // return true; - // } + protected bool testEndGame(List playableCard) + { + if (playableCard.Count < 2) + { + Message = "Le jeu est terminé!\n Désolé, vous avez perdu... Essayez encore!"; + return true; + } - // public bool checkEndTurnRule(List CurrentCardPlayed, int nbCardAtBeginOfTurn, List CurrentHand) - // { - // foreach (EndTurnRule rule in endTurnRule) - // { - // if (!rule.Test(CurrentCardPlayed, nbCardAtBeginOfTurn, CurrentHand)) // Gestion des messages pour savoir qu'elle règle n'est pas respecter. - // { - // return false; - // } - // } - // foreach (Rule rule in commonRule) - // { + return false; + } - // } - // return true; - // } + #endregion } } diff --git a/TheGameExtreme/model/gameActions/classic/JouerUneCarte.cs b/TheGameExtreme/model/gameActions/classic/JouerUneCarte.cs index 2ef14e2..ba07eec 100644 --- a/TheGameExtreme/model/gameActions/classic/JouerUneCarte.cs +++ b/TheGameExtreme/model/gameActions/classic/JouerUneCarte.cs @@ -9,6 +9,7 @@ namespace TheGameExtreme.model.gameActions.classic public Card OldCard { get; set; } + public JouerUneCarte(Piles ListOrderedStacks) : base(ListOrderedStacks) { } @@ -23,16 +24,18 @@ namespace TheGameExtreme.model.gameActions.classic { if (orderedStackSelected < 2) { + ErrorMessage = null; return rule(card, ListOrderedStacks.getStack(orderedStackSelected), true, player, CurrentCardPlayed); } else { + ErrorMessage = null; return rule(card, ListOrderedStacks.getStack(orderedStackSelected), false, player, CurrentCardPlayed); } } else { - throw new Exception(AppRessource.StrCantGetStack); + ErrorMessage = AppRessource.StrCantGetStack; } } } @@ -53,13 +56,9 @@ namespace TheGameExtreme.model.gameActions.classic } else { - throw new Exception(AppRessource.StrWrongStack); + ErrorMessage = AppRessource.StrWrongStack; + return false; } - //if (EndMessage != null) - //{ - // //throw new Exception("Le jeu est fini! Veuillez lancer une nouvelle partie!"); - // throw new Exception(AppRessource.StrEndOfGame); - //} } } } diff --git a/TheGameExtreme/model/gameActions/classic/TerminerSonTour.cs b/TheGameExtreme/model/gameActions/classic/TerminerSonTour.cs index 36d7140..2ad4c4c 100644 --- a/TheGameExtreme/model/gameActions/classic/TerminerSonTour.cs +++ b/TheGameExtreme/model/gameActions/classic/TerminerSonTour.cs @@ -7,6 +7,8 @@ namespace TheGameExtreme.model.gameActions.classic { public class TerminerSonTour : GameAction { + + public TerminerSonTour(Piles ListOrderedStacks) : base(ListOrderedStacks) { } @@ -19,7 +21,12 @@ namespace TheGameExtreme.model.gameActions.classic { // Ne pas oublié de gérer les ThreeCard return Test(CurrentHand); } - return false; + else + { + ErrorMessage = AppRessource.StrCardPlayedLessThanTwo; + return false; + } + } public bool Test(List CurrentHand) diff --git a/TheGameExtreme/model/manager/GameManager.cs b/TheGameExtreme/model/manager/GameManager.cs index 4798676..71ab396 100644 --- a/TheGameExtreme/model/manager/GameManager.cs +++ b/TheGameExtreme/model/manager/GameManager.cs @@ -2,13 +2,9 @@ using System.Collections.Generic; using System.ComponentModel; using TheGameExtreme.model.card; -using TheGameExtreme.model.deck; using TheGameExtreme.model.@event; using TheGameExtreme.model.gameActions; using TheGameExtreme.model.gameActions.classic; -using TheGameExtreme.model.rule.beforeEndTurnRules; -using TheGameExtreme.model.rule.endTurnRules; -using TheGameExtreme.model.rule.playRules; namespace TheGameExtreme.model.manager { @@ -74,7 +70,7 @@ namespace TheGameExtreme.model.manager protected GameManager(List playersNames, GameMode gameMode) { - nbPlayer = players.Count; + nbPlayer = playersNames.Count; playersNames.ForEach(playerName => players.Add(new Player(playerName))); this.gameMode = gameMode; @@ -89,12 +85,34 @@ namespace TheGameExtreme.model.manager public void joue(int valueCard, int orderedStackSelected) { - gameMode.playCard(valueCard, currentHand, orderedStackSelected, players[0], CurrentCardPlayed); // Mettre le joueur actif + gameMode.playCard(valueCard, currentHand, orderedStackSelected, players[currentIndexPlayer], CurrentCardPlayed); // Mettre le joueur actif + EndMessage = gameMode.Message; } public bool endTurn() { - return gameMode.endTurn(currentHand, CurrentCardPlayed, players[0]); + if(gameMode.endTurn(currentHand, CurrentCardPlayed, players[currentIndexPlayer])) + { + EndMessage = gameMode.Message; + if (isEndGame()) + { + EndMessage = gameMode.Message; + return true; + } + else + { + return false; + } + } + else + { + return false; + } + } + + private bool isEndGame() + { + return gameMode.isEndGame(currentHand); } diff --git a/TheGameExtreme/model/manager/SoloGameManager.cs b/TheGameExtreme/model/manager/SoloGameManager.cs index 04d1c9b..87f2bd6 100644 --- a/TheGameExtreme/model/manager/SoloGameManager.cs +++ b/TheGameExtreme/model/manager/SoloGameManager.cs @@ -1,8 +1,5 @@ using System; using System.Collections.Generic; -using TheGameExtreme.model.card; -using TheGameExtreme.model.card.rapidCard; -using TheGameExtreme.model.@event; using TheGameExtreme.model.gameActions.classic; namespace TheGameExtreme.model.manager diff --git a/TheGameExtreme/viewmodel/Main.cs b/TheGameExtreme/viewmodel/Main.cs index 34b9085..0793d25 100644 --- a/TheGameExtreme/viewmodel/Main.cs +++ b/TheGameExtreme/viewmodel/Main.cs @@ -82,21 +82,25 @@ namespace TheGameExtreme.viewmodel */ public bool played(int numStack, int valueCard) { - try - { + //try + //{ gameManager.joue(valueCard, numStack); - if (gameManager.EndMessage != null) - { - Alert = gameManager.EndMessage; - return true; - } - } - catch (Exception e) - { - // Faire un toast - Alert = e.Message; - } - return false; + + Alert = gameManager.EndMessage; + + //if (gameManager.EndMessage != null) + //{ + // Alert = gameManager.EndMessage; + // return true; + //} + return false; + //} + //catch (Exception e) + //{ + // // Faire un toast + // Alert = e.Message; + //} + //return false; @@ -115,17 +119,9 @@ namespace TheGameExtreme.viewmodel public bool endTurn() { - try - { - bool isEnd = gameManager.endTurn(); - Alert = gameManager.EndMessage; - return isEnd; - } - catch (Exception e) - { - Alert = e.Message; - return false; - } + bool isEnd = gameManager.endTurn(); + Alert = gameManager.EndMessage; + return isEnd; }