diff --git a/TheGameExtreme/TheGameExtreme.csproj b/TheGameExtreme/TheGameExtreme.csproj index f51a7d1..794e9f5 100644 --- a/TheGameExtreme/TheGameExtreme.csproj +++ b/TheGameExtreme/TheGameExtreme.csproj @@ -17,7 +17,8 @@ - + + diff --git a/TheGameExtreme/model/GameMode.cs b/TheGameExtreme/model/GameMode.cs index cd3cafe..0aeb0ae 100644 --- a/TheGameExtreme/model/GameMode.cs +++ b/TheGameExtreme/model/GameMode.cs @@ -2,7 +2,8 @@ using System.Collections.Generic; using TheGameExtreme.model.card; using TheGameExtreme.model.rule; -using TheGameExtreme.model.rule.endRule; +using TheGameExtreme.model.rule.beforeEndTurnRules; +using TheGameExtreme.model.rule.endTurnRules; using TheGameExtreme.model.rule.playRules; namespace TheGameExtreme.model @@ -11,6 +12,7 @@ namespace TheGameExtreme.model { private List playRule = new List(); + private List beforeEndTurnRule = new List(); private List endTurnRule = new List(); private List commonRule = new List(); @@ -28,17 +30,38 @@ namespace TheGameExtreme.model 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) + public bool checkPlayRule(Card card, Stack orderedStack, bool bottomUp, List CurrentHand) { foreach(PlayRule rule in playRule) { - if (!rule.Test(card, orderedStack, bottomUp)) // Gestion des messages pour savoir qu'elle règle n'est pas respecter. + 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 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; } @@ -50,11 +73,11 @@ namespace TheGameExtreme.model return true; } - public bool checkEndTurnRule() + public bool checkEndTurnRule(List CurrentCardPlayed, int nbCardAtBeginOfTurn, List CurrentHand) { foreach (EndTurnRule rule in endTurnRule) { - if (!rule.Test()) // Gestion des messages pour savoir qu'elle règle n'est pas respecter. + if (!rule.Test(CurrentCardPlayed, nbCardAtBeginOfTurn, CurrentHand)) // Gestion des messages pour savoir qu'elle règle n'est pas respecter. { return false; } diff --git a/TheGameExtreme/model/manager/GameManager.cs b/TheGameExtreme/model/manager/GameManager.cs index 9b348ba..d50d2ba 100644 --- a/TheGameExtreme/model/manager/GameManager.cs +++ b/TheGameExtreme/model/manager/GameManager.cs @@ -3,7 +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.beforeEndTurnRules; +using TheGameExtreme.model.rule.endTurnRules; using TheGameExtreme.model.rule.playRules; namespace TheGameExtreme.model.manager @@ -36,8 +37,22 @@ namespace TheGameExtreme.model.manager this.nbPlayer = nbPlayer; players.ForEach(player => playerList.Add(new Player(player))); - + + initStacks(); + + initRule(); + + createDeck(); + defineNbMaxCard(); + distribueCard(); + + CurrentHand = playerList[currentIndexPlayer].getCardList(); + nbCardAtBeginOfTurn = CurrentHand.Count; + } + + protected void initStacks() + { ListOrderedStacks.Add(new Stack()); ListOrderedStacks.Add(new Stack()); ListOrderedStacks.Add(new Stack()); @@ -54,21 +69,19 @@ namespace TheGameExtreme.model.manager ListOrderedStacks[i].Push(new ClassicCard(100)); } } + } + protected void initRule() + { gameMode = new GameMode(); gameMode.addPlayRule(new Ascendant()); gameMode.addPlayRule(new Descendant()); gameMode.addPlayRule(new PasDeDix()); + //gameMode.addPlayRule(new VoidHand()); + gameMode.addBeforeEndTurnRule(new NbCardPlay()); gameMode.addEndTurnRule(new EndGame(ListOrderedStacks)); - gameMode.addEndTurnRule(new VoidDeck()); - gameMode.addEndTurnRule(new VoidHand()); - - createDeck(); - defineNbMaxCard(); - distribueCard(); - - CurrentHand = playerList[currentIndexPlayer].getCardList(); - nbCardAtBeginOfTurn = CurrentHand.Count; + //gameMode.addEndTurnRule(new VoidDeck()); + //gameMode.addEndTurnRule(new CompleteHand()); } protected void createDeck() @@ -146,17 +159,17 @@ namespace TheGameExtreme.model.manager protected void testPossibility(Card card, Stack orderedStack, bool bottomUp) { - if (gameMode.checkPlayRule(card, orderedStack, bottomUp)) + if (gameMode.checkPlayRule(card, orderedStack, bottomUp, CurrentHand)) { 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 - } + //if (CurrentHand.Count == 0) + //{ + // endTurn(); // Presque bon, oublie juste d'afficher les nouvelles cartes + //} } else { diff --git a/TheGameExtreme/model/manager/SoloGameManager.cs b/TheGameExtreme/model/manager/SoloGameManager.cs index fb4b0b3..38d7b2b 100644 --- a/TheGameExtreme/model/manager/SoloGameManager.cs +++ b/TheGameExtreme/model/manager/SoloGameManager.cs @@ -18,29 +18,40 @@ namespace TheGameExtreme.model.manager public override bool endTurn() { - //if (gameMode.checkEndTurnRule()) - //{ - verifyNbCardPlay(); + if (gameMode.checkBeforeEndTurnRule(CurrentCardPlayed, nbCardAtBeginOfTurn, CurrentHand)) + { + //verifyNbCardPlay(); pioche(); - //} + currentIndexPlayer += 1; + if (currentIndexPlayer == playerList.Count) + { + currentIndexPlayer = 0; + } + CurrentHand = playerList[currentIndexPlayer].getCardList(); + OnPlayerChanged(new PlayerChangedEventArgs(CurrentHand, playerList[currentIndexPlayer].Pseudo)); + nbCardAtBeginOfTurn = CurrentHand.Count; + CurrentCardPlayed.Clear(); + if (gameMode.checkEndTurnRule(CurrentCardPlayed, nbCardAtBeginOfTurn, CurrentHand)) + { + //if (isEndGame()) // Ajouter le score en calculant les cartes restantes dans la pile et dans les mains des joueurs + //{ + // displayWinner(); + // return true; + //} - currentIndexPlayer += 1; - if (currentIndexPlayer == playerList.Count) - { - currentIndexPlayer = 0; + return false; + } + else + { + return true; + } } - CurrentHand = playerList[currentIndexPlayer].getCardList(); - OnPlayerChanged(new PlayerChangedEventArgs(CurrentHand, playerList[currentIndexPlayer].Pseudo)); - nbCardAtBeginOfTurn = CurrentHand.Count; - CurrentCardPlayed.Clear(); - - if (isEndGame()) // Ajouter le score en calculant les cartes restantes dans la pile et dans les mains des joueurs + else { - displayWinner(); - return true; + return false; } - return false; + } protected void verifyNbCardPlay() diff --git a/TheGameExtreme/model/rule/Rule.cs b/TheGameExtreme/model/rule/Rule.cs index 5d9d5ee..09f55ad 100644 --- a/TheGameExtreme/model/rule/Rule.cs +++ b/TheGameExtreme/model/rule/Rule.cs @@ -6,10 +6,6 @@ namespace TheGameExtreme.model.rule public abstract class Rule { - public Rule() - { - } - public bool Test() { throw new NotImplementedException(); diff --git a/TheGameExtreme/model/rule/beforeEndTurnRules/BeforeEndTurnRule.cs b/TheGameExtreme/model/rule/beforeEndTurnRules/BeforeEndTurnRule.cs new file mode 100644 index 0000000..fc4f267 --- /dev/null +++ b/TheGameExtreme/model/rule/beforeEndTurnRules/BeforeEndTurnRule.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using TheGameExtreme.model.card; + +namespace TheGameExtreme.model.rule.beforeEndTurnRules +{ + public abstract class BeforeEndTurnRule : Rule + { + + public abstract bool Test(List CurrentCardPlayed, int nbCardAtBeginOfTurn, List CurrentHand); + + } +} diff --git a/TheGameExtreme/model/rule/endRule/NbCardPlay.cs b/TheGameExtreme/model/rule/beforeEndTurnRules/NbCardPlay.cs similarity index 61% rename from TheGameExtreme/model/rule/endRule/NbCardPlay.cs rename to TheGameExtreme/model/rule/beforeEndTurnRules/NbCardPlay.cs index 2b6ea35..bc8faa4 100644 --- a/TheGameExtreme/model/rule/endRule/NbCardPlay.cs +++ b/TheGameExtreme/model/rule/beforeEndTurnRules/NbCardPlay.cs @@ -1,24 +1,23 @@ using System; using System.Collections.Generic; using TheGameExtreme.model.card; -using TheGameExtreme.model.card.rapidCard; -namespace TheGameExtreme.model.rule.endRule +namespace TheGameExtreme.model.rule.beforeEndTurnRules { - public class NbCardPlay : EndTurnRule + public class NbCardPlay : BeforeEndTurnRule { - public NbCardPlay() - { - } - override public bool Test(List CurrentCardPlayed, int nbCardAtBeginOfTurn, List CurrentHand) { - if ((nbCardAtBeginOfTurn - CurrentHand.Count) < 2) + if (CurrentHand.Count == 0) { return true; } - return false; + if ((nbCardAtBeginOfTurn - CurrentHand.Count) < 2) + { + return false; + } + return true; } } diff --git a/TheGameExtreme/model/rule/endRule/VoidHand.cs b/TheGameExtreme/model/rule/endRule/VoidHand.cs deleted file mode 100644 index 32601d8..0000000 --- a/TheGameExtreme/model/rule/endRule/VoidHand.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using TheGameExtreme.model.card; - -namespace TheGameExtreme.model.rule.endRule -{ - public class VoidHand : EndTurnRule - { - public VoidHand() - { - } - - public override bool Test(List CurrentCardPlayed, int nbCardAtBeginOfTurn, List CurrentHand) - { - throw new NotImplementedException(); - } - } -} diff --git a/TheGameExtreme/model/rule/endTurnRules/CompleteHand.cs b/TheGameExtreme/model/rule/endTurnRules/CompleteHand.cs new file mode 100644 index 0000000..6c73a77 --- /dev/null +++ b/TheGameExtreme/model/rule/endTurnRules/CompleteHand.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using TheGameExtreme.model.card; + +namespace TheGameExtreme.model.rule.endTurnRules +{ + public class CompleteHand : EndTurnRule + { + + public static readonly String REGLE_COMPLETEHAND = "Complete Hand"; + + public override bool Test(List CurrentCardPlayed, int nbCardAtBeginOfTurn, List CurrentHand) + { + // Si carte qui fait piocher que d'un vérifier la bonne pioche (penser si elle vient d'être recouverte) + // Sinon + if (nbCardAtBeginOfTurn == CurrentCardPlayed.Count) + { + return true; + } + return false; + } + + } +} diff --git a/TheGameExtreme/model/rule/endRule/EndGame.cs b/TheGameExtreme/model/rule/endTurnRules/EndGame.cs similarity index 88% rename from TheGameExtreme/model/rule/endRule/EndGame.cs rename to TheGameExtreme/model/rule/endTurnRules/EndGame.cs index 6bc870f..88e20f4 100644 --- a/TheGameExtreme/model/rule/endRule/EndGame.cs +++ b/TheGameExtreme/model/rule/endTurnRules/EndGame.cs @@ -3,11 +3,13 @@ using System.Collections.Generic; using TheGameExtreme.model.card; using TheGameExtreme.model.card.rapidCard; -namespace TheGameExtreme.model.rule.endRule +namespace TheGameExtreme.model.rule.endTurnRules { public class EndGame : EndTurnRule { + public static readonly String REGLE_ENDGAME = "End Game"; + public List> ListOrderedStacks { get; set; } public EndGame(List> ListOrderedStacks) @@ -45,15 +47,15 @@ namespace TheGameExtreme.model.rule.endRule { if (Equals(c.getName(), ThreeCard.CARD_THREE)) { - return true; + return false; } } } else if (playableCard.Count < 2) { - return true; + return false; } - return false; + return true; } } diff --git a/TheGameExtreme/model/rule/endRule/EndTurnRule.cs b/TheGameExtreme/model/rule/endTurnRules/EndTurnRule.cs similarity index 73% rename from TheGameExtreme/model/rule/endRule/EndTurnRule.cs rename to TheGameExtreme/model/rule/endTurnRules/EndTurnRule.cs index 11d35a1..d9670f7 100644 --- a/TheGameExtreme/model/rule/endRule/EndTurnRule.cs +++ b/TheGameExtreme/model/rule/endTurnRules/EndTurnRule.cs @@ -2,13 +2,10 @@ using System.Collections.Generic; using TheGameExtreme.model.card; -namespace TheGameExtreme.model.rule.endRule +namespace TheGameExtreme.model.rule.endTurnRules { public abstract class EndTurnRule : Rule { - public EndTurnRule() - { - } public abstract bool Test(List CurrentCardPlayed, int nbCardAtBeginOfTurn, List CurrentHand); diff --git a/TheGameExtreme/model/rule/endRule/VoidDeck.cs b/TheGameExtreme/model/rule/endTurnRules/VoidDeck.cs similarity index 73% rename from TheGameExtreme/model/rule/endRule/VoidDeck.cs rename to TheGameExtreme/model/rule/endTurnRules/VoidDeck.cs index 4e96ada..397af2d 100644 --- a/TheGameExtreme/model/rule/endRule/VoidDeck.cs +++ b/TheGameExtreme/model/rule/endTurnRules/VoidDeck.cs @@ -2,13 +2,12 @@ using System.Collections.Generic; using TheGameExtreme.model.card; -namespace TheGameExtreme.model.rule.endRule +namespace TheGameExtreme.model.rule.endTurnRules { public class VoidDeck : EndTurnRule { - public VoidDeck() - { - } + + public static readonly String REGLE_VOIDDECK = "Void Deck"; public override bool Test(List CurrentCardPlayed, int nbCardAtBeginOfTurn, List CurrentHand) { diff --git a/TheGameExtreme/model/rule/playRules/Ascendant.cs b/TheGameExtreme/model/rule/playRules/Ascendant.cs index 209cab6..6069687 100644 --- a/TheGameExtreme/model/rule/playRules/Ascendant.cs +++ b/TheGameExtreme/model/rule/playRules/Ascendant.cs @@ -9,11 +9,7 @@ namespace TheGameExtreme.model.rule.playRules public static readonly String REGLE_ASCENDANT = "Ascendant"; - public Ascendant() - { - } - - override public bool Test(Card playedCard, Stack stack, bool bottomUp) + override public bool Test(Card playedCard, Stack stack, bool bottomUp, List CurrentHand) { if (bottomUp && playedCard.Value > stack.Peek().Value) { diff --git a/TheGameExtreme/model/rule/playRules/Descendant.cs b/TheGameExtreme/model/rule/playRules/Descendant.cs index 3a3d761..4ebcfbc 100644 --- a/TheGameExtreme/model/rule/playRules/Descendant.cs +++ b/TheGameExtreme/model/rule/playRules/Descendant.cs @@ -9,13 +9,9 @@ namespace TheGameExtreme.model.rule.playRules public static readonly String REGLE_DESCENDANT = "Descendant"; - public Descendant() + override public bool Test(Card playedCard, Stack stack, bool bottomUp, List CurrentHand) { - } - - override public bool Test(Card playedCard, Stack stack, bool bottomUp) - { - if (bottomUp && playedCard.Value > stack.Peek().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 ca3a98d..699a6fa 100644 --- a/TheGameExtreme/model/rule/playRules/PasDeDix.cs +++ b/TheGameExtreme/model/rule/playRules/PasDeDix.cs @@ -9,11 +9,7 @@ namespace TheGameExtreme.model.rule.playRules public static readonly String REGLE_PASDEDIX = "PasDeDix"; - public PasDeDix() - { - } - - override public bool Test(Card playedCard, Stack stack, bool bottomUp) + override public bool Test(Card playedCard, Stack stack, bool bottomUp, List CurrentHand) { if ((stack.Peek().Value + 10) == playedCard.Value || (stack.Peek().Value - 10) == playedCard.Value) { diff --git a/TheGameExtreme/model/rule/playRules/PlayRule.cs b/TheGameExtreme/model/rule/playRules/PlayRule.cs index 50a393a..29289f2 100644 --- a/TheGameExtreme/model/rule/playRules/PlayRule.cs +++ b/TheGameExtreme/model/rule/playRules/PlayRule.cs @@ -6,11 +6,6 @@ namespace TheGameExtreme.model.rule.playRules { public abstract class PlayRule : Rule { - - public PlayRule() - { - } - - public abstract bool Test(Card playedCard, Stack stack, bool bottomUp); + public abstract bool Test(Card playedCard, Stack stack, bool bottomUp, List CurrentHand); } } diff --git a/TheGameExtreme/model/rule/playRules/VoidHand.cs b/TheGameExtreme/model/rule/playRules/VoidHand.cs new file mode 100644 index 0000000..88a1cc2 --- /dev/null +++ b/TheGameExtreme/model/rule/playRules/VoidHand.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using TheGameExtreme.model.card; + +namespace TheGameExtreme.model.rule.playRules +{ + public class VoidHand : PlayRule + { + + public static readonly String REGLE_VOIDHAND = "Void Hand"; + + override public bool Test(Card playedCard, Stack stack, bool bottomUp, List CurrentHand) + { + if (CurrentHand.Count == 0) + { + return false; + } + return true; + } + + } +} diff --git a/TheGameExtreme/view/MainPage.xaml b/TheGameExtreme/view/MainPage.xaml index 9c74626..8c1858a 100644 --- a/TheGameExtreme/view/MainPage.xaml +++ b/TheGameExtreme/view/MainPage.xaml @@ -1,4 +1,5 @@  +