diff --git a/Documentations/Cahier des charges.docx b/Documentations/Cahier des charges.docx index 18a9b6f..925859b 100644 Binary files a/Documentations/Cahier des charges.docx and b/Documentations/Cahier des charges.docx differ 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 @@