private double GetActionEV(Shoe tmp_shoe, CardSet active_hand, ActionType action, Card dealer_upcard) { Hand hand = new Hand(active_hand); SHand shand; int soft_total = hand.SoftTotal(); if (soft_total <= 21 && hand.HasAce()) { shand.Total = soft_total; shand.Soft = true; } else { shand.Total = hand.HardTotal(); shand.Soft = false; } int[] shoe_counts = tmp_shoe.ToArray(); int upcard = dealer_upcard.PointValue; switch (action) { case ActionType.Stand: return(Eval.StandEv(shand, upcard, shoe_counts)); case ActionType.Hit: return(Eval.HitEv(shand, upcard, shoe_counts)); case ActionType.Double: return(Eval.DoubleEv(shand, upcard, current_bet, shoe_counts)); case ActionType.Split: return(Eval.SplitEv(active_hand[0].PointValue, upcard, current_bet, max_splits - split_count, shoe_counts)); case ActionType.Surrender: return(Eval.SurrenderEv()); } return(-1); }