private void ValidatePlayedCards(Guid playerId, List <Card> cards) { Player player = Players.Single(o => o.Id.Equals(playerId)); if (!player.IsThisPlayersTurn) { throw new InvalidOperationException("It's not this player's turn. "); } if (cards.Count > 1 && !RuleEngine.AreAllCardsEqual(cards)) { throw new InvalidOperationException("Can only play cards of the same rank. "); } Card topOfPickUpPack = PickUpPack != null && PickUpPack.Count > 0 ? PickUpPack.Last() : null; if (!RuleEngine.IsCardPlayable(cards[0], topOfPickUpPack)) { throw new InvalidCardException("Can't play a " + cards[0].Rank); } }
private void CheckNextPlayerCanPlay() { var nextPlayer = GetNextPlayer(); List <Card> inPlayCards = GetActiveHandPart(nextPlayer); Card topOfPickUpPack = PickUpPack != null && PickUpPack.Count > 0 ? PickUpPack.Last() : null; nextPlayer.IsAbleToPlay = nextPlayer.PlayerState.Equals(PlayerState.PlayingFaceDownCards) || RuleEngine.AreAnyCardsPlayable(inPlayCards, topOfPickUpPack); }