diff --git a/Documentations/Diagramme_de_classe.mdj b/Documentations/Diagramme_de_classe.mdj index 34978e8..d8b0ca1 100644 --- a/Documentations/Diagramme_de_classe.mdj +++ b/Documentations/Diagramme_de_classe.mdj @@ -2960,7 +2960,7 @@ "_parent": { "$ref": "AAAAAAFuOxVwFhhvcas=" }, - "font": "Arial;13;1", + "font": "Arial;13;3", "left": 2093, "top": 1319, "width": 149.931640625, @@ -6153,7 +6153,8 @@ } ] } - ] + ], + "isAbstract": true }, { "_type": "UMLClass", diff --git a/TheGameExtreme/model/GameMode.cs b/TheGameExtreme/model/GameMode.cs index 9576b3b..cd3cafe 100644 --- a/TheGameExtreme/model/GameMode.cs +++ b/TheGameExtreme/model/GameMode.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using TheGameExtreme.model.card; using TheGameExtreme.model.rule; using TheGameExtreme.model.rule.endRule; using TheGameExtreme.model.rule.playRules; @@ -33,11 +34,14 @@ namespace TheGameExtreme.model commonRule?.Add(rule); } - public bool testPlayRule() + public bool checkPlayRule(Card card, Stack orderedStack, bool bottomUp) { foreach(PlayRule rule in playRule) { - + if (!rule.Test(card, orderedStack, bottomUp)) // Gestion des messages pour savoir qu'elle règle n'est pas respecter. + { + return false; + } } foreach (Rule rule in commonRule) { @@ -46,11 +50,14 @@ namespace TheGameExtreme.model return true; } - public bool testEndTurnRule() + public bool checkEndTurnRule() { foreach (EndTurnRule rule in endTurnRule) { - + if (!rule.Test()) // Gestion des messages pour savoir qu'elle règle n'est pas respecter. + { + return false; + } } foreach (Rule rule in commonRule) { diff --git a/TheGameExtreme/model/manager/GameManager.cs b/TheGameExtreme/model/manager/GameManager.cs index 1e8dc48..9b348ba 100644 --- a/TheGameExtreme/model/manager/GameManager.cs +++ b/TheGameExtreme/model/manager/GameManager.cs @@ -3,6 +3,8 @@ using System.Collections.Generic; using TheGameExtreme.model.card; using TheGameExtreme.model.deck; using TheGameExtreme.model.@event; +using TheGameExtreme.model.rule.endRule; +using TheGameExtreme.model.rule.playRules; namespace TheGameExtreme.model.manager { @@ -24,6 +26,8 @@ namespace TheGameExtreme.model.manager protected List CurrentCardPlayed = new List(); protected string langue; + protected GameMode gameMode; + protected GameManager(int nbPlayer, List players) { @@ -51,6 +55,14 @@ namespace TheGameExtreme.model.manager } } + gameMode = new GameMode(); + gameMode.addPlayRule(new Ascendant()); + gameMode.addPlayRule(new Descendant()); + gameMode.addPlayRule(new PasDeDix()); + gameMode.addEndTurnRule(new EndGame(ListOrderedStacks)); + gameMode.addEndTurnRule(new VoidDeck()); + gameMode.addEndTurnRule(new VoidHand()); + createDeck(); defineNbMaxCard(); distribueCard(); @@ -134,18 +146,36 @@ namespace TheGameExtreme.model.manager protected void testPossibility(Card card, Stack orderedStack, bool bottomUp) { - if ((bottomUp && card.Value > orderedStack.Peek().Value) || (!bottomUp && card.Value < orderedStack.Peek().Value) || card.Value == orderedStack.Peek().Value + 10 || card.Value == orderedStack.Peek().Value - 10) + if (gameMode.checkPlayRule(card, orderedStack, bottomUp)) { Card oldCard = orderedStack.Peek(); playerList[currentIndexPlayer].joue(card); CurrentCardPlayed.Add(card); orderedStack.Push(card); OnTopRangeChanged(new TopRangeChangedEventArgs(card, oldCard, ListOrderedStacks.IndexOf(orderedStack))); + if (CurrentHand.Count == 0) + { + endTurn(); // Presque bon, oublie juste d'afficher les nouvelles cartes + } } else { throw new Exception(AppRessource.StrWrongStack); } + + + //if ((bottomUp && card.Value > orderedStack.Peek().Value) || (!bottomUp && card.Value < orderedStack.Peek().Value) || card.Value == orderedStack.Peek().Value + 10 || card.Value == orderedStack.Peek().Value - 10) + //{ + // Card oldCard = orderedStack.Peek(); + // playerList[currentIndexPlayer].joue(card); + // CurrentCardPlayed.Add(card); + // orderedStack.Push(card); + // OnTopRangeChanged(new TopRangeChangedEventArgs(card, oldCard, ListOrderedStacks.IndexOf(orderedStack))); + //} + //else + //{ + // throw new Exception(AppRessource.StrWrongStack); + //} } protected internal void OnTopRangeChanged(TopRangeChangedEventArgs args) diff --git a/TheGameExtreme/model/manager/SoloGameManager.cs b/TheGameExtreme/model/manager/SoloGameManager.cs index 28cbd15..fb4b0b3 100644 --- a/TheGameExtreme/model/manager/SoloGameManager.cs +++ b/TheGameExtreme/model/manager/SoloGameManager.cs @@ -17,9 +17,12 @@ namespace TheGameExtreme.model.manager public override bool endTurn() { - verifyNbCardPlay(); - pioche(); + //if (gameMode.checkEndTurnRule()) + //{ + verifyNbCardPlay(); + pioche(); + //} currentIndexPlayer += 1; if (currentIndexPlayer == playerList.Count) diff --git a/TheGameExtreme/model/rule/RapidEffect.cs b/TheGameExtreme/model/rule/RapidEffect.cs index 9b7d60f..ddf2d0e 100644 --- a/TheGameExtreme/model/rule/RapidEffect.cs +++ b/TheGameExtreme/model/rule/RapidEffect.cs @@ -6,5 +6,33 @@ namespace TheGameExtreme.model.rule public RapidEffect() { } + + // Checker les cartes du haut de pile et celle joué. + + //protected bool effectLose() + //{ + // foreach (Stack orderedStack in ListOrderedStacks) + // { + // if (Equals(orderedStack.Peek().getName(), EndGameCard.CARD_ENDGAME)) + // { + // return true; + // } + // } + // return false; + //} + + + //foreach (Card cardPlayed in CurrentCardPlayed) + //{ + // if (Equals(cardPlayed.GetType(), ThreeCard.CARD_THREE)) + // { + // if ((nbCardAtBeginOfTurn - CurrentHand.Count) < 3) + // { + // return true; + // } + // } + //} + + } } diff --git a/TheGameExtreme/model/rule/endRule/EndGame.cs b/TheGameExtreme/model/rule/endRule/EndGame.cs index 93e0d9c..6bc870f 100644 --- a/TheGameExtreme/model/rule/endRule/EndGame.cs +++ b/TheGameExtreme/model/rule/endRule/EndGame.cs @@ -1,11 +1,60 @@ using System; +using System.Collections.Generic; +using TheGameExtreme.model.card; +using TheGameExtreme.model.card.rapidCard; namespace TheGameExtreme.model.rule.endRule { public class EndGame : EndTurnRule { - public EndGame() + + public List> ListOrderedStacks { get; set; } + + public EndGame(List> ListOrderedStacks) + { + this.ListOrderedStacks = ListOrderedStacks; + } + + public override bool Test(List CurrentCardPlayed, int nbCardAtBeginOfTurn, List CurrentHand) + { + if (CurrentHand.Count != 0) + { + List playableCard = new List(); + tryToFindSoluce(playableCard, CurrentHand); + return testEndGame(playableCard); + } + return false; + } + + protected void tryToFindSoluce(List playableCard, List CurrentHand) + { + CurrentHand.ForEach(card => + { + if (card.Value > ListOrderedStacks[0].Peek().Value || card.Value > ListOrderedStacks[1].Peek().Value || card.Value < ListOrderedStacks[2].Peek().Value || card.Value < ListOrderedStacks[3].Peek().Value) + { + playableCard.Add(card); + } + }); + } + + protected bool testEndGame(List playableCard) { + if (playableCard.Count == 2) + { + foreach (Card c in playableCard) + { + if (Equals(c.getName(), ThreeCard.CARD_THREE)) + { + return true; + } + } + } + else if (playableCard.Count < 2) + { + return true; + } + return false; } + } } diff --git a/TheGameExtreme/model/rule/endRule/EndTurnRule.cs b/TheGameExtreme/model/rule/endRule/EndTurnRule.cs index 4b28fb1..11d35a1 100644 --- a/TheGameExtreme/model/rule/endRule/EndTurnRule.cs +++ b/TheGameExtreme/model/rule/endRule/EndTurnRule.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using TheGameExtreme.model.card; namespace TheGameExtreme.model.rule.endRule { @@ -7,5 +9,8 @@ namespace TheGameExtreme.model.rule.endRule public EndTurnRule() { } + + public abstract bool Test(List CurrentCardPlayed, int nbCardAtBeginOfTurn, List CurrentHand); + } } diff --git a/TheGameExtreme/model/rule/endRule/NbCardPlay.cs b/TheGameExtreme/model/rule/endRule/NbCardPlay.cs new file mode 100644 index 0000000..2b6ea35 --- /dev/null +++ b/TheGameExtreme/model/rule/endRule/NbCardPlay.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using TheGameExtreme.model.card; +using TheGameExtreme.model.card.rapidCard; + +namespace TheGameExtreme.model.rule.endRule +{ + public class NbCardPlay : EndTurnRule + { + + public NbCardPlay() + { + } + + override public bool Test(List CurrentCardPlayed, int nbCardAtBeginOfTurn, List CurrentHand) + { + if ((nbCardAtBeginOfTurn - CurrentHand.Count) < 2) + { + return true; + } + return false; + } + + } +} diff --git a/TheGameExtreme/model/rule/endRule/VoidDeck.cs b/TheGameExtreme/model/rule/endRule/VoidDeck.cs index fea39d1..4e96ada 100644 --- a/TheGameExtreme/model/rule/endRule/VoidDeck.cs +++ b/TheGameExtreme/model/rule/endRule/VoidDeck.cs @@ -1,4 +1,7 @@ using System; +using System.Collections.Generic; +using TheGameExtreme.model.card; + namespace TheGameExtreme.model.rule.endRule { public class VoidDeck : EndTurnRule @@ -6,5 +9,10 @@ namespace TheGameExtreme.model.rule.endRule public VoidDeck() { } + + public override bool Test(List CurrentCardPlayed, int nbCardAtBeginOfTurn, List CurrentHand) + { + throw new NotImplementedException(); + } } } diff --git a/TheGameExtreme/model/rule/endRule/VoidHand.cs b/TheGameExtreme/model/rule/endRule/VoidHand.cs index fa595e6..32601d8 100644 --- a/TheGameExtreme/model/rule/endRule/VoidHand.cs +++ b/TheGameExtreme/model/rule/endRule/VoidHand.cs @@ -1,4 +1,7 @@ using System; +using System.Collections.Generic; +using TheGameExtreme.model.card; + namespace TheGameExtreme.model.rule.endRule { public class VoidHand : EndTurnRule @@ -6,5 +9,10 @@ namespace TheGameExtreme.model.rule.endRule public VoidHand() { } + + public override bool Test(List CurrentCardPlayed, int nbCardAtBeginOfTurn, List CurrentHand) + { + throw new NotImplementedException(); + } } } diff --git a/TheGameExtreme/model/rule/playRules/Ascendant.cs b/TheGameExtreme/model/rule/playRules/Ascendant.cs index 109c3ce..209cab6 100644 --- a/TheGameExtreme/model/rule/playRules/Ascendant.cs +++ b/TheGameExtreme/model/rule/playRules/Ascendant.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using TheGameExtreme.model.card; namespace TheGameExtreme.model.rule.playRules @@ -12,9 +13,9 @@ namespace TheGameExtreme.model.rule.playRules { } - public bool Test(Card upStack, Card playedCard, bool bottomUp) + override public bool Test(Card playedCard, Stack stack, bool bottomUp) { - if (bottomUp && playedCard.Value > upStack.Value) + if (bottomUp && playedCard.Value > stack.Peek().Value) { return true; } diff --git a/TheGameExtreme/model/rule/playRules/Descendant.cs b/TheGameExtreme/model/rule/playRules/Descendant.cs index c114d8e..3a3d761 100644 --- a/TheGameExtreme/model/rule/playRules/Descendant.cs +++ b/TheGameExtreme/model/rule/playRules/Descendant.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using TheGameExtreme.model.card; namespace TheGameExtreme.model.rule.playRules @@ -12,9 +13,9 @@ namespace TheGameExtreme.model.rule.playRules { } - public bool Test(Card upStack, Card playedCard, bool bottomUp) + override public bool Test(Card playedCard, Stack stack, bool bottomUp) { - if (bottomUp && playedCard.Value > upStack.Value) + if (bottomUp && playedCard.Value > stack.Peek().Value) { return true; } diff --git a/TheGameExtreme/model/rule/playRules/PasDeDix.cs b/TheGameExtreme/model/rule/playRules/PasDeDix.cs index bc23085..ca3a98d 100644 --- a/TheGameExtreme/model/rule/playRules/PasDeDix.cs +++ b/TheGameExtreme/model/rule/playRules/PasDeDix.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using TheGameExtreme.model.card; namespace TheGameExtreme.model.rule.playRules @@ -12,9 +13,9 @@ namespace TheGameExtreme.model.rule.playRules { } - public bool Test(Card upStack, Card playedCard) + override public bool Test(Card playedCard, Stack stack, bool bottomUp) { - if ((upStack.Value + 10) == playedCard.Value || (upStack.Value - 10) == playedCard.Value) + if ((stack.Peek().Value + 10) == playedCard.Value || (stack.Peek().Value - 10) == playedCard.Value) { return true; } diff --git a/TheGameExtreme/model/rule/playRules/PlayRule.cs b/TheGameExtreme/model/rule/playRules/PlayRule.cs index c239bd3..50a393a 100644 --- a/TheGameExtreme/model/rule/playRules/PlayRule.cs +++ b/TheGameExtreme/model/rule/playRules/PlayRule.cs @@ -1,11 +1,16 @@ using System; +using System.Collections.Generic; +using TheGameExtreme.model.card; + namespace TheGameExtreme.model.rule.playRules { - public class PlayRule : Rule + public abstract class PlayRule : Rule { public PlayRule() { } + + public abstract bool Test(Card playedCard, Stack stack, bool bottomUp); } }