public void AddCard(SheepCard card) { Participant.Cards = CardUtil.CardListToString(Cards.Union(new List <SheepCard>() { card }).ToList()); }
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)); }
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); } }
public void RemoveCard(SheepCard card) { Participant.Cards = CardUtil.CardListToString(Cards.Except(new List <SheepCard>() { card }).ToList()); }
public void AddBuried(SheepCard card) { var buriedList = Buried.ToList(); buriedList.Add(card); BuriedCards = CardUtil.CardListToString(buriedList); }
public static CardSummary GetCardSummary(SheepCard card, bool?legalMove = null) { return(new CardSummary() { Name = card.ToString(), Filename = GetPictureFilename(card), LegalMove = legalMove, Abbreviation = GetAbbreviation(card) }); }
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)); }
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); } }
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); }
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); } }
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); }
public static StandardSuite GetStandardSuit(SheepCard card) { Int32 cardVal = Convert.ToInt32(card) % 4; return((StandardSuite)cardVal); }
public void RemoveCard(SheepCard card) { _cards.Remove(card); }
public void AddCard(SheepCard card) { _cards.Add(card); }
/// <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); }
public static string GetPictureFilename(SheepCard card) { return(_filenamesByCard[card]); }
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))); }
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); } } }
public static string GetAbbreviation(SheepCard card) { return(_abbreviationsByCard[card]); }
public static string ToAbbr(SheepCard card) { return(GetAbbreviation(card)); }
public static CardType GetFace(SheepCard card) { Int32 cardVal = Convert.ToInt32(card) / 4; return((CardType)cardVal); }