using System; using System.Collections.Generic; using TheGameExtreme.model.effect; using TheGameExtreme.model.@event; namespace TheGameExtreme.model.manager { public class SoloGameManager : GameManager { public SoloGameManager(int nbPlayer, List players) : base(nbPlayer, players) { } public override void endTurn() { // Vérifie que l'utilisateur a bien joué deux cartes pioche(); currentIndexPlayer += 1; if (currentIndexPlayer == playerList.Count) { currentIndexPlayer = 0; } CurrentHand = playerList[currentIndexPlayer].getCardList(); OnPlayerChanged(new PlayerChangedEventArgs(CurrentHand)); 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 { Console.WriteLine("Le jeu est terminé!\n Désolé, vous avez perdu... Essayez encore!"); } } } protected override void pioche() { int nbPickedCard = nbMaxCard - CurrentHand.Count; for (int i = 0; i < nbPickedCard; i++) { int random = new Random().Next(0, deck.Count - 1); playerList[currentIndexPlayer].pioche(deck[random]); deck.RemoveAt(random); } } protected override bool isEndGame() { if (CurrentHand.Count != 0) { List playableCard = new List(); tryToFindSoluce(playableCard); return testEndGame(playableCard); } return false; } protected override void tryToFindSoluce(List playableCard) { 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 override bool testEndGame(List playableCard) { if (playableCard.Count < 3 && playableCard.Count >= 2) { foreach (Card c in playableCard) { if (c.Equals(typeof(ThreeCard))) { win = false; return true; } } } else if (playableCard.Count < 2) { win = false; return true; } else if (effectLose()) { win = false; return true; } return false; } protected override bool effectLose() { foreach (Stack orderedStack in ListOrderedStacks) { if (orderedStack.Peek().GetType() == typeof(EndGame)) { return true; } } return false; } } }