private void PairCheck(GameCard firstCard, GameCard secondCard, GameCard[] cardsOnTable, IPlayer player) { int firstCardPairCount = cardsOnTable.Count(card => firstCard.Rank == card.Rank); int secondCardPairCount = cardsOnTable.Count(card => secondCard.Rank == card.Rank); int pairsOnTableCount = cardsOnTable .GroupBy(card => card.Rank) .Select(group => new { Count = @group.Count() }) .Count(group => @group.Count == 2); if ((firstCardPairCount == 1 ^ secondCardPairCount == 1) && firstCard.Rank == secondCard.Rank) { if (pairsOnTableCount != 1) { return; } } if (firstCardPairCount == 1) { player.PokerHandMultiplier = 0; player.CardPower = firstCard.Rank * 4 + player.PokerHandMultiplier * 100; } if (secondCardPairCount == 1) { player.PokerHandMultiplier = 0; player.CardPower = secondCard.Rank * 4 + player.PokerHandMultiplier * 100; } var pairOnTableRank = cardsOnTable .GroupBy(card => card.Rank) .Select(group => new { Rank = @group.Key, Count = @group.Count() }) .Where(group => @group.Count == 1) .Select(newGroup => newGroup.Rank) .First(); player.PokerHandMultiplier = 0; player.CardPower = pairOnTableRank * 4 + player.PokerHandMultiplier * 100; }
private void ThreeOfAKindCheck(GameCard firstCard, GameCard secondCard, GameCard[] cardsOnTable, IPlayer player) { int firstCardThreeOfAKindCount = cardsOnTable.Count(card => firstCard.Rank == card.Rank); int secondCardThreeOfAKindCount = cardsOnTable.Count(card => secondCard.Rank == card.Rank); if (firstCardThreeOfAKindCount > 2 || secondCardThreeOfAKindCount > 2) { return; } if (firstCardThreeOfAKindCount == 2 && secondCardThreeOfAKindCount == 2 && firstCard.Rank == secondCard.Rank) { return; } GameCard highestCard = this.GetHighestCardInHand(firstCard, secondCard); if (firstCardThreeOfAKindCount == 2 || secondCardThreeOfAKindCount == 2) { player.PokerHandMultiplier = 3; if (firstCardThreeOfAKindCount == 2 && secondCardThreeOfAKindCount != 2) { player.CardPower = firstCard.Rank * 4 + player.PokerHandMultiplier * 100; } else if (firstCardThreeOfAKindCount != 2 && secondCardThreeOfAKindCount == 2) { player.CardPower = secondCard.Rank * 4 + player.PokerHandMultiplier * 100; } else { player.CardPower = highestCard.Rank * 4 + player.PokerHandMultiplier * 100; } } if (firstCardThreeOfAKindCount == 1 && secondCardThreeOfAKindCount == 1 && firstCard.Rank == secondCard.Rank) { player.PokerHandMultiplier = 3; player.CardPower = firstCard.Rank * 4 + player.PokerHandMultiplier * 100; } var tableCardsTreeOfAKind = cardsOnTable .GroupBy(card => card.Rank) .Select(group => new { Rank = @group.Key, Count = @group.Count() }) .OrderByDescending(group => @group.Count) .First(); if (tableCardsTreeOfAKind.Count != 3) { return; } if (firstCardThreeOfAKindCount == 1 && secondCardThreeOfAKindCount == 1 && firstCard.Rank == secondCard.Rank) { int highestCardHandOrTable = tableCardsTreeOfAKind.Rank > firstCard.Rank ? tableCardsTreeOfAKind.Rank : firstCard.Rank; player.PokerHandMultiplier = 3; player.CardPower = highestCardHandOrTable * 4 + player.PokerHandMultiplier * 100; } if (firstCardThreeOfAKindCount == 0 && secondCardThreeOfAKindCount == 0) { player.PokerHandMultiplier = 3; player.CardPower = tableCardsTreeOfAKind.Rank * 4 + player.PokerHandMultiplier * 100; } }