From a47e2b65fde06af2f7f1b51055d411a359d97a5a Mon Sep 17 00:00:00 2001 From: cldupland Date: Thu, 24 Oct 2019 17:54:09 +0200 Subject: [PATCH] =?UTF-8?q?Amelioration=20de=20plusieurs=20fonctionnalit?= =?UTF-8?q?=C3=A9s=20du=20model=20et=20des=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Documentations/Cahier des charges.docx | Bin 13133 -> 13550 bytes TheGameExtreme/TheGameExtreme.csproj | 8 +- TheGameExtreme/model/{ => Card}/Card.cs | 6 +- TheGameExtreme/model/Card/ClassicCard.cs | 12 +++ TheGameExtreme/model/Card/EndGameCard.cs | 12 +++ TheGameExtreme/model/Card/ThreeCard.cs | 12 +++ TheGameExtreme/model/Player.cs | 2 +- TheGameExtreme/model/effect/Effect.cs | 10 --- TheGameExtreme/model/effect/FastEffect.cs | 10 --- TheGameExtreme/model/effect/InfiniteEffect.cs | 10 --- TheGameExtreme/model/effect/StopCom.cs | 10 --- .../model/effect/fastEffect/EndGame.cs | 10 --- .../model/effect/fastEffect/GameTurnStop.cs | 10 --- .../model/effect/fastEffect/ThreeCard.cs | 10 --- .../infiniteEffect/CommunicationStop.cs | 10 --- .../effect/infiniteEffect/OneCardDrawable.cs | 10 --- .../model/effect/infiniteEffect/OneStack.cs | 10 --- .../model/effect/infiniteEffect/RetroStop.cs | 10 --- .../model/event/HandCardChangeEventArgs.cs | 1 + .../model/event/PlayerChangedEventArgs.cs | 1 + .../model/event/TopRangeChangedEventArgs.cs | 2 + TheGameExtreme/model/manager/GameManager.cs | 48 ++++++++-- .../model/manager/SoloGameManager.cs | 68 ++++++++++++--- TheGameExtreme/view/MainPage.xaml | 9 +- TheGameExtreme/view/MainPage.xaml.cs | 82 +++++++++++++----- TheGameExtreme/viewmodel/Main.cs | 41 +++++++-- 26 files changed, 245 insertions(+), 169 deletions(-) rename TheGameExtreme/model/{ => Card}/Card.cs (80%) create mode 100644 TheGameExtreme/model/Card/ClassicCard.cs create mode 100644 TheGameExtreme/model/Card/EndGameCard.cs create mode 100644 TheGameExtreme/model/Card/ThreeCard.cs delete mode 100644 TheGameExtreme/model/effect/Effect.cs delete mode 100644 TheGameExtreme/model/effect/FastEffect.cs delete mode 100644 TheGameExtreme/model/effect/InfiniteEffect.cs delete mode 100644 TheGameExtreme/model/effect/StopCom.cs delete mode 100644 TheGameExtreme/model/effect/fastEffect/EndGame.cs delete mode 100644 TheGameExtreme/model/effect/fastEffect/GameTurnStop.cs delete mode 100644 TheGameExtreme/model/effect/fastEffect/ThreeCard.cs delete mode 100644 TheGameExtreme/model/effect/infiniteEffect/CommunicationStop.cs delete mode 100644 TheGameExtreme/model/effect/infiniteEffect/OneCardDrawable.cs delete mode 100644 TheGameExtreme/model/effect/infiniteEffect/OneStack.cs delete mode 100644 TheGameExtreme/model/effect/infiniteEffect/RetroStop.cs diff --git a/Documentations/Cahier des charges.docx b/Documentations/Cahier des charges.docx index 18a9b6f93c0dce542ee7592f1cb43a3899aca511..925859be845dc551a46028a44e8d9e98a26072ca 100644 GIT binary patch delta 7591 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 delta 7223 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 diff --git a/TheGameExtreme/TheGameExtreme.csproj b/TheGameExtreme/TheGameExtreme.csproj index 58ec1ba..7f44d32 100644 --- a/TheGameExtreme/TheGameExtreme.csproj +++ b/TheGameExtreme/TheGameExtreme.csproj @@ -6,16 +6,14 @@ - - + + - - - + diff --git a/TheGameExtreme/model/Card.cs b/TheGameExtreme/model/Card/Card.cs similarity index 80% rename from TheGameExtreme/model/Card.cs rename to TheGameExtreme/model/Card/Card.cs index b3c1b83..e4270b3 100644 --- a/TheGameExtreme/model/Card.cs +++ b/TheGameExtreme/model/Card/Card.cs @@ -1,9 +1,9 @@ using System; using System.ComponentModel; -namespace TheGameExtreme.model +namespace TheGameExtreme.model.card { - public class Card : INotifyPropertyChanged + public abstract class Card : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; @@ -21,7 +21,7 @@ namespace TheGameExtreme.model PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(v)); } - public Effect Effect { get; private set; } + public static readonly bool activate; public Card(int value) diff --git a/TheGameExtreme/model/Card/ClassicCard.cs b/TheGameExtreme/model/Card/ClassicCard.cs new file mode 100644 index 0000000..c490f59 --- /dev/null +++ b/TheGameExtreme/model/Card/ClassicCard.cs @@ -0,0 +1,12 @@ +using System; + +namespace TheGameExtreme.model.card +{ + public class ClassicCard : Card + { + public ClassicCard(int value) + : base(value) + { + } + } +} \ No newline at end of file diff --git a/TheGameExtreme/model/Card/EndGameCard.cs b/TheGameExtreme/model/Card/EndGameCard.cs new file mode 100644 index 0000000..0595bd0 --- /dev/null +++ b/TheGameExtreme/model/Card/EndGameCard.cs @@ -0,0 +1,12 @@ +using System; +namespace TheGameExtreme.model.card +{ + public class EndGameCard : Card + { + + public EndGameCard(int value) + :base(value) + { + } + } +} diff --git a/TheGameExtreme/model/Card/ThreeCard.cs b/TheGameExtreme/model/Card/ThreeCard.cs new file mode 100644 index 0000000..685c010 --- /dev/null +++ b/TheGameExtreme/model/Card/ThreeCard.cs @@ -0,0 +1,12 @@ +using System; + +namespace TheGameExtreme.model.card +{ + public class ThreeCard : Card + { + public ThreeCard(int value) + :base(value) + { + } + } +} diff --git a/TheGameExtreme/model/Player.cs b/TheGameExtreme/model/Player.cs index e66f016..ee06ab5 100644 --- a/TheGameExtreme/model/Player.cs +++ b/TheGameExtreme/model/Player.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using TheGameExtreme.model.effect; +using TheGameExtreme.model.card; using TheGameExtreme.model.@event; namespace TheGameExtreme.model diff --git a/TheGameExtreme/model/effect/Effect.cs b/TheGameExtreme/model/effect/Effect.cs deleted file mode 100644 index d8aa9b6..0000000 --- a/TheGameExtreme/model/effect/Effect.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -namespace TheGameExtreme.model -{ - public class Effect - { - public Effect() - { - } - } -} diff --git a/TheGameExtreme/model/effect/FastEffect.cs b/TheGameExtreme/model/effect/FastEffect.cs deleted file mode 100644 index 7a6296a..0000000 --- a/TheGameExtreme/model/effect/FastEffect.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -namespace TheGameExtreme.model.effect -{ - public class FastEffect : Effect - { - public FastEffect() - { - } - } -} diff --git a/TheGameExtreme/model/effect/InfiniteEffect.cs b/TheGameExtreme/model/effect/InfiniteEffect.cs deleted file mode 100644 index 39bf284..0000000 --- a/TheGameExtreme/model/effect/InfiniteEffect.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -namespace TheGameExtreme.model.effect -{ - public class InfiniteEffect : Effect - { - public InfiniteEffect() - { - } - } -} diff --git a/TheGameExtreme/model/effect/StopCom.cs b/TheGameExtreme/model/effect/StopCom.cs deleted file mode 100644 index a6e93dc..0000000 --- a/TheGameExtreme/model/effect/StopCom.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -namespace TheGameExtreme.model.effect -{ - public class StopCom - { - public StopCom() - { - } - } -} diff --git a/TheGameExtreme/model/effect/fastEffect/EndGame.cs b/TheGameExtreme/model/effect/fastEffect/EndGame.cs deleted file mode 100644 index 013b47f..0000000 --- a/TheGameExtreme/model/effect/fastEffect/EndGame.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -namespace TheGameExtreme.model.effect -{ - public class EndGame : FastEffect - { - public EndGame() - { - } - } -} diff --git a/TheGameExtreme/model/effect/fastEffect/GameTurnStop.cs b/TheGameExtreme/model/effect/fastEffect/GameTurnStop.cs deleted file mode 100644 index d619e6c..0000000 --- a/TheGameExtreme/model/effect/fastEffect/GameTurnStop.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -namespace TheGameExtreme.model.effect -{ - public class GameTurnStop : FastEffect - { - public GameTurnStop() - { - } - } -} diff --git a/TheGameExtreme/model/effect/fastEffect/ThreeCard.cs b/TheGameExtreme/model/effect/fastEffect/ThreeCard.cs deleted file mode 100644 index 17676c9..0000000 --- a/TheGameExtreme/model/effect/fastEffect/ThreeCard.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -namespace TheGameExtreme.model.effect -{ - public class ThreeCard : FastEffect - { - public ThreeCard() - { - } - } -} diff --git a/TheGameExtreme/model/effect/infiniteEffect/CommunicationStop.cs b/TheGameExtreme/model/effect/infiniteEffect/CommunicationStop.cs deleted file mode 100644 index 232cc12..0000000 --- a/TheGameExtreme/model/effect/infiniteEffect/CommunicationStop.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -namespace TheGameExtreme.model.effect -{ - public class CommunicationStop : InfiniteEffect - { - public CommunicationStop() - { - } - } -} diff --git a/TheGameExtreme/model/effect/infiniteEffect/OneCardDrawable.cs b/TheGameExtreme/model/effect/infiniteEffect/OneCardDrawable.cs deleted file mode 100644 index 191a0b8..0000000 --- a/TheGameExtreme/model/effect/infiniteEffect/OneCardDrawable.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -namespace TheGameExtreme.model.effect -{ - public class OneCardDrawable : InfiniteEffect - { - public OneCardDrawable() - { - } - } -} diff --git a/TheGameExtreme/model/effect/infiniteEffect/OneStack.cs b/TheGameExtreme/model/effect/infiniteEffect/OneStack.cs deleted file mode 100644 index e320253..0000000 --- a/TheGameExtreme/model/effect/infiniteEffect/OneStack.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -namespace TheGameExtreme.model.effect -{ - public class OneStack : InfiniteEffect - { - public OneStack() - { - } - } -} diff --git a/TheGameExtreme/model/effect/infiniteEffect/RetroStop.cs b/TheGameExtreme/model/effect/infiniteEffect/RetroStop.cs deleted file mode 100644 index a6d2a5d..0000000 --- a/TheGameExtreme/model/effect/infiniteEffect/RetroStop.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -namespace TheGameExtreme.model.effect -{ - public class RetroStop : InfiniteEffect - { - public RetroStop() - { - } - } -} diff --git a/TheGameExtreme/model/event/HandCardChangeEventArgs.cs b/TheGameExtreme/model/event/HandCardChangeEventArgs.cs index d4eb0e3..1961739 100644 --- a/TheGameExtreme/model/event/HandCardChangeEventArgs.cs +++ b/TheGameExtreme/model/event/HandCardChangeEventArgs.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using TheGameExtreme.model.card; namespace TheGameExtreme.model.@event { diff --git a/TheGameExtreme/model/event/PlayerChangedEventArgs.cs b/TheGameExtreme/model/event/PlayerChangedEventArgs.cs index 161e1a0..4e9095f 100644 --- a/TheGameExtreme/model/event/PlayerChangedEventArgs.cs +++ b/TheGameExtreme/model/event/PlayerChangedEventArgs.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using TheGameExtreme.model.card; namespace TheGameExtreme.model.@event { diff --git a/TheGameExtreme/model/event/TopRangeChangedEventArgs.cs b/TheGameExtreme/model/event/TopRangeChangedEventArgs.cs index 0698b3b..59f2e35 100644 --- a/TheGameExtreme/model/event/TopRangeChangedEventArgs.cs +++ b/TheGameExtreme/model/event/TopRangeChangedEventArgs.cs @@ -1,4 +1,6 @@ using System; +using TheGameExtreme.model.card; + namespace TheGameExtreme.model.@event { public class TopRangeChangedEventArgs : EventArgs diff --git a/TheGameExtreme/model/manager/GameManager.cs b/TheGameExtreme/model/manager/GameManager.cs index 0d48137..204c286 100644 --- a/TheGameExtreme/model/manager/GameManager.cs +++ b/TheGameExtreme/model/manager/GameManager.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using TheGameExtreme.model.effect; +using TheGameExtreme.model.card; using TheGameExtreme.model.@event; namespace TheGameExtreme.model.manager @@ -12,13 +12,15 @@ namespace TheGameExtreme.model.manager protected int nbMaxCard; protected int currentIndexPlayer; protected List playerList = new List(); - protected List infiniteEffectsConstraintsList = new List(); public List> ListOrderedStacks { get; set; } protected List deck = new List(); protected bool win = true; + public String EndMessage { get; set; } public event EventHandler TopRangeChanged; public event EventHandler PlayerChanged; public List CurrentHand { get; set; } + protected int nbCardAtBeginOfTurn; + protected List CurrentCardPlayed = new List(); public GameManager(int nbPlayer, List players) @@ -38,11 +40,11 @@ namespace TheGameExtreme.model.manager { if (i < 2) { - ListOrderedStacks[i].Push(new Card(1)); + ListOrderedStacks[i].Push(new ClassicCard(1)); } else { - ListOrderedStacks[i].Push(new Card(100)); + ListOrderedStacks[i].Push(new ClassicCard(100)); } } @@ -51,13 +53,46 @@ namespace TheGameExtreme.model.manager distribueCard(); CurrentHand = playerList[currentIndexPlayer].getCardList(); + nbCardAtBeginOfTurn = CurrentHand.Count; } protected void createDeck() { + Random random = new Random(); + List endGame = new List(); + while (endGame.Count < 4) + { + int r = random.Next(2, 99); + if (!endGame.Contains(r)) + { + endGame.Add(r); + } + } + List threeCard = new List(); + while (threeCard.Count < 4) + { + int r = random.Next(2, 99); + if (!endGame.Contains(r) && !threeCard.Contains(r)) + { + threeCard.Add(r); + } + } + Card card; for (int i = 2; i <= 99; i++) { - deck.Add(new Card(i)); + if (endGame.Contains(i)) + { + card = new EndGameCard(i); + } + else if (threeCard.Contains(i)) + { + card = new ThreeCard(i); + } + else + { + card = new ClassicCard(i); + } + deck.Add(card); } } @@ -121,6 +156,7 @@ namespace TheGameExtreme.model.manager { Card oldCard = orderedStack.Peek(); playerList[currentIndexPlayer].joue(card); + CurrentCardPlayed.Add(card); orderedStack.Push(card); OnTopRangeChanged(new TopRangeChangedEventArgs(card, oldCard, ListOrderedStacks.IndexOf(orderedStack))); } @@ -152,7 +188,7 @@ namespace TheGameExtreme.model.manager } } - abstract public void endTurn(); + abstract public bool endTurn(); abstract protected void pioche(); diff --git a/TheGameExtreme/model/manager/SoloGameManager.cs b/TheGameExtreme/model/manager/SoloGameManager.cs index 2e9d9bc..f6fd159 100644 --- a/TheGameExtreme/model/manager/SoloGameManager.cs +++ b/TheGameExtreme/model/manager/SoloGameManager.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using TheGameExtreme.model.effect; +using TheGameExtreme.model.card; using TheGameExtreme.model.@event; namespace TheGameExtreme.model.manager @@ -14,9 +14,9 @@ namespace TheGameExtreme.model.manager } - public override void endTurn() + public override bool endTurn() { - // Vérifie que l'utilisateur a bien joué deux cartes + verifyNbCardPlay(); pioche(); @@ -27,18 +27,55 @@ namespace TheGameExtreme.model.manager } CurrentHand = playerList[currentIndexPlayer].getCardList(); OnPlayerChanged(new PlayerChangedEventArgs(CurrentHand)); + nbCardAtBeginOfTurn = CurrentHand.Count; + CurrentCardPlayed.Clear(); if (isEndGame()) // Ajouter le score en calculant les cartes restantes dans la pile et dans les mains des joueurs { - if (win) - { - Console.WriteLine("Le jeu est terminé!\n Bravo vous avez gagné!"); - } - else + displayWinner(); + return true; + } + + return false; + } + + protected void verifyNbCardPlay() + { + foreach (Card cardPlayed in CurrentCardPlayed) + { + if (cardPlayed.GetType() == typeof(ThreeCard)) { - Console.WriteLine("Le jeu est terminé!\n Désolé, vous avez perdu... Essayez encore!"); + if ((nbCardAtBeginOfTurn - CurrentHand.Count) < 3) // Penser à vérifier s'il a joué une ThreeCard pour regarder s'il a bien joué 3 cartes + { + testIsEndGame(); + } + return; } } + if ((nbCardAtBeginOfTurn - CurrentHand.Count) < 2) // Penser à vérifier s'il a joué une ThreeCard pour regarder s'il a bien joué 3 cartes + { + testIsEndGame(); + } + } + + protected void testIsEndGame() + { + if (isEndGame()) + { + displayWinner(); + } + else + { + throw new Exception("Vous n'avez pas joué assez de carte!"); + } + } + + protected void displayWinner() + { + if (win) + { + EndMessage = "Le jeu est terminé!\n Bravo vous avez gagné!"; + } } protected override void pioche() @@ -46,6 +83,10 @@ namespace TheGameExtreme.model.manager int nbPickedCard = nbMaxCard - CurrentHand.Count; for (int i = 0; i < nbPickedCard; i++) { + if (deck.Count == 0) + { + return; + } int random = new Random().Next(0, deck.Count - 1); playerList[currentIndexPlayer].pioche(deck[random]); deck.RemoveAt(random); @@ -67,7 +108,7 @@ namespace TheGameExtreme.model.manager { 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) + 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); } @@ -76,13 +117,14 @@ namespace TheGameExtreme.model.manager protected override bool testEndGame(List playableCard) { - if (playableCard.Count < 3 && playableCard.Count >= 2) + if (playableCard.Count == 2) { foreach (Card c in playableCard) { if (c.Equals(typeof(ThreeCard))) { win = false; + EndMessage = "Le jeu est terminé!\n Désolé, vous avez perdu... Vous deviez jouer trois cartes à cause de l'effet \"Trois cartes joué\" hors votre jeu ne permet pas d'en jouer autant! Essayez encore!"; return true; } } @@ -90,11 +132,13 @@ namespace TheGameExtreme.model.manager else if (playableCard.Count < 2) { win = false; + EndMessage = "Le jeu est terminé!\n Désolé, vous avez perdu... Essayez encore!"; return true; } else if (effectLose()) { win = false; + EndMessage = "Désolé, vous n'avez pas recouvert la tête de mort... Réessayez ;)"; return true; } @@ -105,7 +149,7 @@ namespace TheGameExtreme.model.manager { foreach (Stack orderedStack in ListOrderedStacks) { - if (orderedStack.Peek().GetType() == typeof(EndGame)) + if (orderedStack.Peek().GetType() == typeof(EndGameCard)) { return true; } diff --git a/TheGameExtreme/view/MainPage.xaml b/TheGameExtreme/view/MainPage.xaml index 2094d4b..cac5c5b 100644 --- a/TheGameExtreme/view/MainPage.xaml +++ b/TheGameExtreme/view/MainPage.xaml @@ -19,7 +19,7 @@