| report.push_back(reportItem("played_hands", "%g", n_hands)); | report.push_back(reportItem("played_hands", "%g", n_hands)); | ||||
| report.push_back(reportItem("total_money_waged", "%g", playerStats.totalMoneyWaged)); | report.push_back(reportItem("total_money_waged", "%g", playerStats.totalMoneyWaged)); | ||||
| report.push_back(reportItem("bustsPlayer", "%g", playerStats.bustsPlayer)); | |||||
| report.push_back(reportItem("bustsDealer", "%g", playerStats.bustsDealer)); | |||||
| report.push_back(reportItem("wins", "%g", playerStats.wins)); | |||||
| report.push_back(reportItem("pushes", "%g", playerStats.pushes)); | |||||
| report.push_back(reportItem("losses", "%g", playerStats.losses)); | |||||
| return; | return; | ||||
| } | } |
| case Libreblackjack::Info::BetInvalid: | case Libreblackjack::Info::BetInvalid: | ||||
| if (p1 < 0) { | if (p1 < 0) { | ||||
| s = "bet_negative"; | |||||
| s = "bet_negative" + std::to_string(p1); | |||||
| } else if (p1 > 0) { | } else if (p1 > 0) { | ||||
| s = "bet_maximum"; | |||||
| s = "bet_maximum" + std::to_string(p1); | |||||
| } else { | } else { | ||||
| s = "bet_zero"; | s = "bet_zero"; | ||||
| } | } | ||||
| break; | break; | ||||
| case Libreblackjack::Info::NewHand: | case Libreblackjack::Info::NewHand: | ||||
| s = "new_hand"; | |||||
| s = "new_hand " + std::to_string(p1) + " " + std::to_string(1e-3*p2); | |||||
| // clear dealer's hand | // clear dealer's hand | ||||
| dealerHand.cards.clear(); | dealerHand.cards.clear(); | ||||
| break; | break; | ||||
| case Libreblackjack::Info::CardPlayer: | case Libreblackjack::Info::CardPlayer: | ||||
| s = "card_player"; | |||||
| s = "card_player " + ((p2 != 0)?(std::to_string(p2)+ " "):"") + card[p1].ascii(); | |||||
| if (p2 != static_cast<int>(currentHandId)) { | if (p2 != static_cast<int>(currentHandId)) { | ||||
| for (currentHand = hands.begin(); currentHand != hands.end(); ++currentHand) { | for (currentHand = hands.begin(); currentHand != hands.end(); ++currentHand) { | ||||
| if (static_cast<int>(currentHand->id) == p2) { | if (static_cast<int>(currentHand->id) == p2) { | ||||
| if (p1 > 0) { | if (p1 > 0) { | ||||
| switch (dealerHand.cards.size()) { | switch (dealerHand.cards.size()) { | ||||
| case 0: | case 0: | ||||
| s = "card_dealer_up"; | |||||
| s = "card_dealer_up " + card[p1].ascii(); | |||||
| break; | break; | ||||
| default: | default: | ||||
| s = "card_dealer"; | |||||
| s = "card_dealer " + card[p1].ascii();; | |||||
| break; | break; | ||||
| } | } | ||||
| } else { | } else { | ||||
| s = "card_dealer"; | |||||
| s = "card_dealer " + card[p1].ascii();; | |||||
| } | } | ||||
| dealerHand.cards.push_back(p1); | dealerHand.cards.push_back(p1); | ||||
| currentHandId = 0; | currentHandId = 0; | ||||
| break; | break; | ||||
| case Libreblackjack::Info::CardDealerRevealsHole: | case Libreblackjack::Info::CardDealerRevealsHole: | ||||
| s = "card_dealer_hole"; | |||||
| s = "card_dealer_hole " + card[p1].utf8();; | |||||
| *(++(dealerHand.cards.begin())) = p1; | *(++(dealerHand.cards.begin())) = p1; | ||||
| currentHandId = 0; | currentHandId = 0; | ||||
| break; | break; | ||||
| break; | break; | ||||
| case Libreblackjack::Info::PlayerSplitOk: | case Libreblackjack::Info::PlayerSplitOk: | ||||
| s = "player_split_ok"; | |||||
| s = "player_split_ok" + ((p1 != 0)?(" #" + std::to_string(p1)):""); | |||||
| handToSplit = p1; | handToSplit = p1; | ||||
| break; | break; | ||||
| } | } | ||||
| currentHandId = p1; | currentHandId = p1; | ||||
| s = "new_hand " + std::to_string(p2) + " " + card[cardToSplit].utf8(); | |||||
| break; | break; | ||||
| case Libreblackjack::Info::PlayerDoubleInvalid: | case Libreblackjack::Info::PlayerDoubleInvalid: | ||||
| break; | break; | ||||
| case Libreblackjack::PlayerActionRequired::Play: | case Libreblackjack::PlayerActionRequired::Play: | ||||
| s = "play?"; | |||||
| s = "play?" + std::to_string(dealerValue) + " " + std::to_string(playerValue); | |||||
| break; | break; | ||||
| case Libreblackjack::PlayerActionRequired::None: | case Libreblackjack::PlayerActionRequired::None: |
| case Libreblackjack::Info::BetInvalid: | case Libreblackjack::Info::BetInvalid: | ||||
| if (p1 < 0) { | if (p1 < 0) { | ||||
| // s = "bet_negative"; | |||||
| s = "Your bet is negative (" + std::to_string(p1) + ")"; | s = "Your bet is negative (" + std::to_string(p1) + ")"; | ||||
| } else if (p1 > 0) { | } else if (p1 > 0) { | ||||
| // s = "bet_maximum"; | |||||
| s = "Your bet is larger than the maximum allowed (" + std::to_string(p1) + ")"; | s = "Your bet is larger than the maximum allowed (" + std::to_string(p1) + ")"; | ||||
| } else { | } else { | ||||
| // s = "bet_zero"; | |||||
| s = "Your bet is zero"; | s = "Your bet is zero"; | ||||
| } | } | ||||
| break; | break; | ||||
| case Libreblackjack::Info::Shuffle: | case Libreblackjack::Info::Shuffle: | ||||
| // TODO: ask the user to cut | // TODO: ask the user to cut | ||||
| // s = "shuffle"; | |||||
| s = "Deck needs to be shuffled."; | s = "Deck needs to be shuffled."; | ||||
| break; | break; | ||||
| case Libreblackjack::Info::CardPlayer: | case Libreblackjack::Info::CardPlayer: | ||||
| // s = "card_player"; | |||||
| if (p2 != static_cast<int>(currentHandId)) { | if (p2 != static_cast<int>(currentHandId)) { | ||||
| for (currentHand = hands.begin(); currentHand != hands.end(); ++currentHand) { | for (currentHand = hands.begin(); currentHand != hands.end(); ++currentHand) { | ||||
| if (static_cast<int>(currentHand->id) == p2) { | if (static_cast<int>(currentHand->id) == p2) { | ||||
| if (p1 > 0) { | if (p1 > 0) { | ||||
| switch (dealerHand.cards.size()) { | switch (dealerHand.cards.size()) { | ||||
| case 0: | case 0: | ||||
| // s = "card_dealer_up"; | |||||
| s = "Dealer's up card is " + card[p1].utf8(); | s = "Dealer's up card is " + card[p1].utf8(); | ||||
| break; | break; | ||||
| default: | default: | ||||
| break; | break; | ||||
| case Libreblackjack::Info::CardDealerRevealsHole: | case Libreblackjack::Info::CardDealerRevealsHole: | ||||
| // s = "card_dealer_hole"; | |||||
| s = "Dealer's hole card was " + card[p1].utf8(); | s = "Dealer's hole card was " + card[p1].utf8(); | ||||
| *(++(dealerHand.cards.begin())) = p1; | *(++(dealerHand.cards.begin())) = p1; | ||||
| currentHandId = 0; | currentHandId = 0; | ||||
| break; | break; | ||||
| case Libreblackjack::Info::DealerBlackjack: | case Libreblackjack::Info::DealerBlackjack: | ||||
| // s = "dealer_blackjack"; | |||||
| s = "Dealer has Blackjack"; | s = "Dealer has Blackjack"; | ||||
| break; | break; | ||||
| case Libreblackjack::Info::PlayerWinsInsurance: | case Libreblackjack::Info::PlayerWinsInsurance: | ||||
| // s = "player_wins_insurance"; | |||||
| s = "Player wins insurance"; | s = "Player wins insurance"; | ||||
| break; | break; | ||||
| case Libreblackjack::Info::PlayerBlackjackAlso: | case Libreblackjack::Info::PlayerBlackjackAlso: | ||||
| // s = "player_blackjack_also"; | |||||
| s = "Player also has Blackjack"; | s = "Player also has Blackjack"; | ||||
| render = true; | render = true; | ||||
| break; | break; | ||||
| case Libreblackjack::Info::PlayerSplitInvalid: | case Libreblackjack::Info::PlayerSplitInvalid: | ||||
| // s = "player_split_invalid"; | |||||
| s = "Cannot split"; | s = "Cannot split"; | ||||
| break; | break; | ||||
| case Libreblackjack::Info::PlayerSplitOk: | case Libreblackjack::Info::PlayerSplitOk: | ||||
| // s = "player_split_ok"; | |||||
| s = "Splitting hand" + ((p1 != 0)?(" #" + std::to_string(p1)):""); | s = "Splitting hand" + ((p1 != 0)?(" #" + std::to_string(p1)):""); | ||||
| handToSplit = p1; | handToSplit = p1; | ||||
| break; | break; |