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() { pioche(); currentIndexPlayer += 1; if (currentIndexPlayer == playerList.Count) { currentIndexPlayer = 0; } OnCurrentPlayerChanged(new CurrentPlayerChangedEventArgs(currentIndexPlayer)); 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 - playerList[currentIndexPlayer].getCardList().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() { Player currentPlayer = playerList[currentIndexPlayer]; if (currentPlayer.getCardList().Count != 0) { List playableCard = new List(); tryToFindSoluce(playableCard, currentPlayer); return testEndGame(playableCard); } return false; //playerList.ForEach(player => //{ // if (player.getCardList().Count != 0) // { // List playableCard = new List(); // List cardList = new List(player.getCardList()); // cardList.ForEach(card => // { // if (card.Value < descendingCardListOrder1.Peek().Value || card.Value < descendingCardListOrder2.Peek().Value || card.Value > ascendingCardListOrder1.Peek().Value || card.Value > ascendingCardListOrder2.Peek().Value) // { // playableCard.Add(card); // } // }); // if (playableCard.Count < 3 && playableCard.Count >= 2) // { // foreach (Card c in playableCard) // { // // Tester si c'est une classe ThreeCard // // Si oui: // if (currentPlayer == playerList.IndexOf(player)) // { // win = false; // endGame = true; // return; // } // } // } // else if (playableCard.Count < 2) // { // if (currentPlayer == playerList.IndexOf(player)) // { // win = false; // endGame = true; // return; // } // } // } //}); } protected override List tryToFindSoluce(List playableCard, Player currentPlayer) { List cardList = new List(currentPlayer.getCardList()); cardList.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); } }); return playableCard; } 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; } } }