/// <summary> /// For a cheating computer player in a poker game, creates a used deck with enough card for one player to make one swap. /// </summary> /// <param name="secondHandQuality">Cheat level.</param> /// <returns></returns> public Tuple<string, string> PopHands(int secondHandQuality) { var deckCount = secondHandQuality > 0 ? (int)(secondHandQuality / 8) : 0; var redealCount = secondHandQuality % 8; var structures = new List<NewDeckStructure>(); for (int i = 0; i < deckCount + 1; i++) { var structure = new NewDeckStructure(); structure.Deck = new Deck(); structure.Deck.Shuffle(); structure.Hand1 = $"{structure.Deck.Pop()},{structure.Deck.Pop()},{structure.Deck.Pop()},{structure.Deck.Pop()},{structure.Deck.Pop()}"; var redeals = (i < deckCount ? 8 : redealCount + 1); for (int j = 0; j < redeals; j++) { var hand2 = $"{structure.Deck.Pop()},{structure.Deck.Pop()},{structure.Deck.Pop()},{structure.Deck.Pop()},{structure.Deck.Pop()}"; var fc = new FormationChecker(hand2); fc.CheckFormation(); var hand2score = fc.Score; structure.Hands2.Add(Tuple.Create(hand2, hand2score)); } structures.Add(structure); } structures.Sort((a, b) => (a.HighestDeck2Score > b.HighestDeck2Score ? 1 : (a.HighestDeck2Score < b.HighestDeck2Score ? -1 : 0))); this.deck = structures.Last().Deck; return Tuple.Create(structures.Last().Hand1, structures.Last().HighestHand2()); }
/// <summary> /// For a cheating computer player in a poker game, creates a used deck with enough cards left for one player to make one swap. /// </summary> /// <param name="secondHandQuality">Cheat level.</param> /// <returns></returns> public HandPair PopHands(int secondHandQuality) { var deckCount = secondHandQuality > 0 ? secondHandQuality / 8 : 0; var redealCount = secondHandQuality % 8; var structures = new List <NewDeckStructure>(); for (var i = 0; i < deckCount + 1; i++) { var structure = new NewDeckStructure { Deck = new Deck() }; var d = structure.Deck; structure.Deck.Shuffle(); structure.Hand1 = $"{d.PopString()},{d.PopString()},{d.PopString()},{d.PopString()},{d.PopString()}"; var redeals = i < deckCount ? 8 : redealCount + 1; for (var j = 0; j < redeals; j++) { var hand2 = $"{d.PopString()},{d.PopString()},{d.PopString()},{d.PopString()},{d.PopString()}"; var fc = new FormationChecker(hand2); fc.CheckFormation(); var hand2Score = fc.Score; structure.Hands2.Add( new HandScorePair(hand2, hand2Score) ); } structures.Add(structure); } structures.Sort( (a, b) => a.HighestDeck2Score > b.HighestDeck2Score ? 1 : a.HighestDeck2Score < b.HighestDeck2Score ? -1 : 0 ); Deck = structures.Last().Deck; return(new HandPair( structures.Last().Hand1 ?? "", structures.Last().HighestHand2() )); }