예제 #1
0
 public DealingService(bool startsFromLeft, List <Player> players)
 {
     _ps    = new PlayerService();
     _deck  = new TarotDeck(true);
     _rules = new DealingRules();
     _aside = new List <Card>();
     _round = new RoundService(startsFromLeft, players);
 }
예제 #2
0
        static IEnumerable <Tuple <int, int> > TestPlayersNbAndPosition()
        {
            DealingRules dr = new DealingRules();

            foreach (int nbPlayer in dr.PossibleNbPlayers)
            {
                for (int i = 0; i < nbPlayer; i++)
                {
                    yield return(new Tuple <int, int>(nbPlayer, i));
                }
            }
        }
예제 #3
0
        public void AfterDealingRoundNumberIsZero()
        {
            List <Player>  players        = Musketeers(5);
            DealingService dealingService = new DealingService(true, players);
            PlayerService  playerService  = new PlayerService();
            DealingRules   rules          = new DealingRules();

            playerService.MakeDealer(players.First());
            dealingService.DealsAllCardsFromDeck();

            Assert.That(dealingService.GetRoundNumber() == 0);
        }
예제 #4
0
        public void PlayOneGame(int nbPlayers)
        {
            DealingRules   dealingRules   = new DealingRules();
            BettingService bettingService = new BettingService();
            PlayerService  playerService  = new PlayerService();
            List <Player>  players        = playerService.CreatePlayers(Musketeers().Take(nbPlayers)).ToList();
            DealingService dealingService = new DealingService(false, players);
            RoundService   roundService   = new RoundService(false, players);

            Player dealer = players.First();

            dealer.Dealer = true;
            dealingService.DealsAllCardsFromDeck();

            Assert.That(dealingService.NbPlayers(), Is.EqualTo(nbPlayers));
            Assert.That(dealingService.CountAside(), Is.EqualTo(dealingRules.AsideMaxCards(nbPlayers)));
            Assert.NotNull(dealingService.GetDealer());
            Assert.Zero(dealingService.GetRoundNumber());
            Assert.That(dealingService.DealtAsideIsCorrect(), Is.True);

            foreach (Player player in players)
            {
                Assert.That(player.Hand.Count == players.First().Hand.Count);
                Assert.That(player.Contract.ToString(), Is.EqualTo("pass"));
            }

            bettingService.GatherBets(players);
            bettingService.AuctionIsWon(dealingService);
            Player attacker = bettingService.GetWinningBet().Key;

            playerService.MakeAside(attacker, dealingService.NbCardsInAside());

            // Put this in dealing service ?
            // Game is ready to start when:
            Assert.That(attacker.Hand.Count, Is.EqualTo(players.First(x => x.Attacker is false).Hand.Count));
            Assert.That(attacker.WonHands.Count, Is.EqualTo(dealingRules.AsideMaxCards(nbPlayers)));
            Assert.Zero(dealingService.GetRoundNumber());

            while (dealer.Hand.Count > 0)
            {
                var round = roundService.PlayRound();
            }

            Assert.Zero(players.Select(x => x.Hand.Count).Sum());
            Assert.That(players.Select(x => x.WonHands.Count).Sum(), Is.EqualTo(DealingRules.MaxCardsInDeck));
            Assert.That(players.Select(x => x.WonHands.Cast <Card>().Score()).Sum(), Is.EqualTo(CardCountingRules.MaxScore));
        }
예제 #5
0
        public void MakeAside(Player player, int nbCards)
        {
            DealingRules       dr          = new DealingRules();
            IEnumerable <Card> cardsInHand = player.Hand.Cast <Card>();

            var possibleAsideCards = cardsInHand.Where(x => dr.CardAllowedInPlayerAside(x.IsTrumper(), x.IsOudler(), x.Points())).ToList();

            if (possibleAsideCards.Count() == 0)
            {
                throw new NotSupportedException("Cannot make aside without possible cards");
            }

            var playerChoice = AskPlayerCards(player, possibleAsideCards, nbCards);

            player.WonHands.AddRange(playerChoice);
            playerChoice.ForEach(x => player.Hand.Remove(x));
        }
예제 #6
0
        public void FivePlayersCalledKingInAsideOneAttacker()
        {
            List <Player>  players        = Musketeers(5);
            PlayerService  playerService  = new PlayerService();
            DealingService dealingService = new DealingService(true, players);
            DealingRules   rules          = new DealingRules();

            //var dealingServiceMock = new Mock<IDealingService>().Setup(x => x.SendCardsToAside(Kings()));

            players.First().Dealer   = true;
            players.First().Attacker = true;

            Player calledPlayer = dealingService.AttackerCallsKing(players.First());

            Assert.That(players.Count(x => x.Attacker is false), Is.EqualTo(4));
            Assert.That(players.First(), Is.SameAs(calledPlayer));
        }
예제 #7
0
        public void FivePlayersCallsKingMostCommonCase()
        {
            List <Player>  players        = Musketeers(5);
            PlayerService  playerService  = new PlayerService();
            DealingService dealingService = new DealingService(true, players);
            DealingRules   rules          = new DealingRules();
            Player         attacker       = players.First();
            Player         defender       = players.Last();

            attacker.Attacker = true;
            attacker.Dealer   = true;

            defender.Hand.AddRange(Kings());
            Player calledPlayer = dealingService.AttackerCallsKing(attacker);

            Assert.That(players.Count(x => x.Attacker is false), Is.EqualTo(3));
            Assert.That(defender, Is.SameAs(calledPlayer));
        }
예제 #8
0
        public void CheckNbCardsInPlayersHandsAndAsideIsCorrect(int nbPlayers)
        {
            List <Player>  players        = Musketeers(nbPlayers);
            DealingService dealingService = new DealingService(true, players);
            PlayerService  playerService  = new PlayerService();
            DealingRules   rules          = new DealingRules();

            int totalCardsInHand = 0;

            playerService.MakeDealer(players.First());
            dealingService.DealsAllCardsFromDeck();

            foreach (Player player in players)
            {
                totalCardsInHand += playerService.CountCardsInHand(player);
                Assert.AreEqual(players[0].Hand.Count(), player.Hand.Count()); //all players have same nb cards
                Assert.IsEmpty(player.WonHands);                               //no player has an aside
            }

            Assert.AreEqual(DealingRules.MaxCardsInDeck, totalCardsInHand + dealingService.CountAside()); //all cards are dealt
            Assert.AreEqual(rules.AsideMaxCards(nbPlayers), dealingService.CountAside());                 //aside has expected number of cards
        }