public override void RoundOver(CardSet seen_cards, CardSet dealer_hand, CardSet[] player_hands, long game_id, int roll_after)
{
Hand dealer = new Hand(dealer_hand);
Hand[] player = new Hand[player_hands.Length];
for (int i = 0; i < player.Length; i++)
{
player[i] = new Hand(player_hands[i]);
player[i].Doubled = hand_doubled[i];
}
int actual_money = roll_after - roll_before;
int expected_money = ExpectedMoney(dealer, player);
if (game_id > 0 && game_id == last_game_id)
{
throw new Exception("game_id == last_game_id");
}
if (action_count == 0)
{
bool dealer_natural = dealer.IsNatural();
bool player_natural = player.Count() == 1 && player[0].IsNatural();
if (!dealer_natural && !player_natural)
{
throw new Exception("No actions made and no BJ");
}
else
{
if (actual_money == 0)
{
if (dealer_natural && insurance_taken)
{
// this is correct
}
else if (!(dealer_natural && player_natural))
{
throw new Exception("BJ but no roll change (and no push)");
}
}
}
}
game_logger.Showdown(dealer_hand, player_hands, game_id, expected_money, actual_money);
Console.WriteLine("Roll: " + roll_after);
last_game_id = game_id;
if (expected_money != actual_money)
{
if (Config.Current.GetBooleanProperty("ThrowMoneyException"))
{
throw new MoneyMismatchException(expected_money, actual_money);
}
else
{
Console.WriteLine();
Console.WriteLine("EXPECTED MONEY MISMATCH!");
Console.WriteLine();
}
}
shoe.Remove(seen_cards);
if (shoe.FullCount - shoe.CardCount >= 84)
{
shoe.Reset();
}
Console.WriteLine("Seen cards: " + seen_cards);
Console.WriteLine("Removed from shoe: {0} ({1})", shoe.FullCount - shoe.CardCount, seen_cards.Count);
InitializeRound();
}