private void PlayerHasTurn(Player player) { #region Announce combinations on first hand if (_playingManager.IsFirstHand && _currentAnnouncement.Type != AnnouncementTypeEnum.NoTrumps) { CombinationFinder finder = new CombinationFinder(player.Cards); foreach (CardCombination combination in finder.Combinations) { bool isValidCombination = false; if (combination is SequentialCombination) { Player biggest = FindBiggestSequentialCombinationHolder(); CardCombination biggestCombination = null; foreach (DictionaryEntry de in _mapSequentialCombinationToPlayer) { if (biggest == de.Value as Player) { biggestCombination = de.Key as CardCombination; break; } } if ((biggest == null) || (combination.Points >= biggestCombination.Points) || (player.Position == biggest.Position || player.Position == _game.GetTeamPlayer(biggest).Position)) { isValidCombination = true; } } else { isValidCombination = true; } if (isValidCombination && player.AnnounceCombination(combination)) { if (combination is SequentialCombination) { _mapSequentialCombinationToPlayer.Add(combination, player); } if (combination is FourEqualsCombination) { _mapEqualCombinationToPlayer.Add(combination, player); } } } } #endregion foreach (Card card in player.Cards) { card.IsSelectable = _playingManager.IsValid(player, card); } player.PlayCard(_playingManager); }