Example #1
0
 public void AddCard(SheepCard card)
 {
     Participant.Cards = CardUtil.CardListToString(Cards.Union(new List <SheepCard>()
     {
         card
     }).ToList());
 }
Example #2
0
        public bool IsLegalAddition(SheepCard card, IPlayer player)
        {
            //In the last trick, anything is legal.
            if (player.Cards.Count() == 1)
            {
                return(true);
            }

            var moves = OrderedMoves;

            //There are some rules for the lead card in a trick.
            if (!moves.Any())
            {
                return(IHand.IGame.PartnerMethodEnum == PartnerMethod.JackOfDiamonds ||
                       IHand.PartnerCardEnum == null ||
                       IsLegalStartingCardInCalledAceGame(card, player));
            }

            var firstCard = moves.First().Value;

            //Only applys to called ace games
            if (IHand.IGame.PartnerMethodEnum == PartnerMethod.CalledAce && IHand.PartnerCardEnum.HasValue)
            {
                return(player.Cards.Contains(IHand.PartnerCardEnum.Value)
                        ? card == IHand.PartnerCardEnum.Value && CardFollowsSuit(card, player, firstCard)
                        : CardFollowsSuit(card, player, firstCard));
            }

            //Other cards must follow suit.
            return(player.Cards.Contains(card) && CardFollowsSuit(card, player, firstCard));
        }
Example #3
0
        public static int GetPoints(SheepCard card)
        {
            var cardType = GetFace(card);

            switch (cardType)
            {
            case CardType.ACE:
                return(11);

            case CardType.N10:
                return(10);

            case CardType.KING:
                return(4);

            case CardType.QUEEN:
                return(3);

            case CardType.JACK:
                return(2);

            default:
                return(0);
            }
        }
Example #4
0
 public void RemoveCard(SheepCard card)
 {
     Participant.Cards = CardUtil.CardListToString(Cards.Except(new List <SheepCard>()
     {
         card
     }).ToList());
 }
Example #5
0
        public void AddBuried(SheepCard card)
        {
            var buriedList = Buried.ToList();

            buriedList.Add(card);
            BuriedCards = CardUtil.CardListToString(buriedList);
        }
Example #6
0
 public static CardSummary GetCardSummary(SheepCard card, bool?legalMove = null)
 {
     return(new CardSummary()
     {
         Name = card.ToString(),
         Filename = GetPictureFilename(card),
         LegalMove = legalMove,
         Abbreviation = GetAbbreviation(card)
     });
 }
Example #7
0
        private bool IsLegalStartingCardInCalledAceGame(SheepCard card, IPlayer player)
        {
            var suitOfPartnerCard = CardUtil.GetSuit(IHand.PartnerCardEnum.Value);

            if (player == IHand.Picker)
            {
                return(true);
            }
            //Partner cannot lead with card in partner suit unless partner card has already been played or card is the partner card.
            return(!IHand.PartnerCardEnum.HasValue ||
                   !player.Cards.Contains(IHand.PartnerCardEnum.Value) ||
                   card == IHand.PartnerCardEnum ||
                   CardUtil.GetSuit(card) != CardUtil.GetSuit(IHand.PartnerCardEnum.Value));
        }
Example #8
0
 public void Add(IPlayer player, SheepCard card)
 {
     TrickPlays.Add(new TrickPlay()
     {
         Trick       = this,
         Participant = player.Participant,
         Card        = CardUtil.GetAbbreviation(card),
         SortOrder   = TrickPlays.Count() + 1
     });
     player.RemoveCard(card);
     if (IHand.PartnerCardEnum == card)
     {
         IHand.SetPartner(player, this);
     }
 }
Example #9
0
        public void RecordTurn(IHumanPlayer player, SheepCard card)
        {
            var trick = _gameStateDesciber.CurrentTrick;

            if (trick.PlayersWithoutTurn.FirstOrDefault() != player)
            {
                throw new NotPlayersTurnException($"This is not the turn for the player: {player.Name}");
            }
            if (!player.Cards.Contains(card))
            {
                throw new ArgumentException("Player does not have this card", "card");
            }
            if (!trick.IsLegalAddition(card, player))
            {
                throw new ArgumentException("This move is not legal", "card");
            }
            trick.Add(player, card);
        }
Example #10
0
        public static Suit GetSuit(SheepCard card)
        {
            if (card <= SheepCard.JACK_DIAMONDS)
            {
                return(Suit.TRUMP);
            }
            var standardSuit = GetStandardSuit(card);

            switch (standardSuit)
            {
            case StandardSuite.DIAMONDS:
                return(Suit.TRUMP);

            case StandardSuite.CLUBS:
                return(Suit.CLUBS);

            case StandardSuite.HEARTS:
                return(Suit.HEARTS);

            default:
                return(Suit.SPADES);
            }
        }
Example #11
0
        public void Game_RecordTurn_TurnRecorded()
        {
            var humanPlayerMock = new Mock <IHumanPlayer>();

            humanPlayerMock.Setup(m => m.Cards).Returns(new List <SheepCard>()
            {
                SheepCard.N7_CLUBS, SheepCard.N7_HEARTS, SheepCard.KING_HEARTS
            });
            var players = new List <IPlayer> {
                new Mock <IPlayer>().Object,
                new Mock <IPlayer>().Object,
                humanPlayerMock.Object,
                new Mock <IPlayer>().Object,
                new Mock <IPlayer>().Object
            };
            SheepCard expectedCard = SheepCard.N7_HEARTS;
            SheepCard?actualCard   = null;
            var       trickMock    = new Mock <ITrick>();

            trickMock.Setup(m => m.PlayersWithoutTurn).Returns(players.Skip(2).ToList());
            trickMock.Setup(m => m.CardsByPlayer).Returns(new Dictionary <IPlayer, SheepCard>()
            {
                { players[0], SheepCard.ACE_HEARTS },
                { players[1], SheepCard.N7_SPADES }
            });
            trickMock.Setup(m => m.IsLegalAddition(It.IsAny <SheepCard>(), It.IsAny <IPlayer>())).Returns(true);
            trickMock.Setup(m => m.Add(It.IsAny <IPlayer>(), It.IsAny <SheepCard>())).Callback((IPlayer p, SheepCard c) => actualCard = c);
            var gamestateDescriberMock = new Mock <IGameStateDescriber>();

            gamestateDescriberMock.Setup(m => m.CurrentTrick).Returns(trickMock.Object);

            var game = new Game(new List <Participant>(), PartnerMethod.JackOfDiamonds, true, null, gamestateDescriberMock.Object);

            game.RecordTurn((IHumanPlayer)players[2], expectedCard);

            Assert.AreEqual(expectedCard, actualCard);
        }
Example #12
0
        public static StandardSuite GetStandardSuit(SheepCard card)
        {
            Int32 cardVal = Convert.ToInt32(card) % 4;

            return((StandardSuite)cardVal);
        }
Example #13
0
 public void RemoveCard(SheepCard card)
 {
     _cards.Remove(card);
 }
Example #14
0
 public void AddCard(SheepCard card)
 {
     _cards.Add(card);
 }
Example #15
0
 /// <summary>
 /// Use this method to bury cards in a Called-Ace game.
 /// </summary>
 public void BuryCards(IHand hand, IHumanPlayer picker, List <SheepCard> cardsToBury, bool goItAlone, SheepCard partnerCard)
 {
     if (picker.Cards.Contains(partnerCard))
     {
         throw new ArgumentException("Picker has the parner card");
     }
     if (!picker.Cards.Any(c => CardUtil.GetSuit(c) == CardUtil.GetSuit(partnerCard)))
     {
         throw new ArgumentException($"Picker does not have a card in the {CardUtil.GetSuit(partnerCard).ToString()} suit");
     }
     if (!_validCalledAceCards.Contains(partnerCard))
     {
         throw new ArgumentException($"{CardUtil.GetAbbreviation(partnerCard)} is not a valid partner card.");
     }
     hand.SetPartnerCard(partnerCard);
     BuryCards(hand, picker, cardsToBury, goItAlone);
 }
Example #16
0
 public static string GetPictureFilename(SheepCard card)
 {
     return(_filenamesByCard[card]);
 }
Example #17
0
 private static bool CardFollowsSuit(SheepCard card, IPlayer player, SheepCard firstCard)
 {
     return(CardUtil.GetSuit(card) == CardUtil.GetSuit(firstCard) || !player.Cards.Any(c => CardUtil.GetSuit(c) == CardUtil.GetSuit(firstCard)));
 }
Example #18
0
        public static int GetRank(SheepCard card)
        {
            if (card <= SheepCard.JACK_DIAMONDS)
            {
                return(Convert.ToInt32(card) + 1);
            }

            var standardSuit = GetStandardSuit(card);
            var face         = GetFace(card);

            if (standardSuit == StandardSuite.DIAMONDS)
            {
                switch (face)
                {
                case CardType.ACE:
                    return(9);

                case CardType.N10:
                    return(10);

                case CardType.KING:
                    return(11);

                case CardType.N9:
                    return(12);

                case CardType.N8:
                    return(13);

                case CardType.N7:
                    return(14);

                default:
                    return(-1);
                }
            }
            else
            {
                switch (face)
                {
                case CardType.ACE:
                    return(15);

                case CardType.N10:
                    return(16);

                case CardType.KING:
                    return(17);

                case CardType.N9:
                    return(18);

                case CardType.N8:
                    return(19);

                case CardType.N7:
                    return(20);

                default:
                    return(-1);
                }
            }
        }
Example #19
0
 public static string GetAbbreviation(SheepCard card)
 {
     return(_abbreviationsByCard[card]);
 }
Example #20
0
 public static string ToAbbr(SheepCard card)
 {
     return(GetAbbreviation(card));
 }
Example #21
0
        public static CardType GetFace(SheepCard card)
        {
            Int32 cardVal = Convert.ToInt32(card) / 4;

            return((CardType)cardVal);
        }