gtheler 5 lat temu
rodzic
commit
a947b23d4a
4 zmienionych plików z 47 dodań i 5 usunięć
  1. +5
    -1
      src/base.h
  2. +4
    -3
      src/blackjack.cpp
  3. +35
    -1
      src/tty.cpp
  4. +3
    -0
      src/tty.h

+ 5
- 1
src/base.h Wyświetl plik

enum class Info { enum class Info {
None, None,
InvalidBet,
BetInvalid,
NewHand, NewHand,
Shuffle, Shuffle,
CardPlayer, CardPlayer,
DealerBlackjack, DealerBlackjack,
PlayerWinsInsurance, PlayerWinsInsurance,
PlayerBlackjackAlso, PlayerBlackjackAlso,
PlayerSplitInvalid,
PlayerSplitOk,
PlayerSplitIds,
PlayerNextHand, PlayerNextHand,
PlayerPushes, PlayerPushes,
PlayerLosses, PlayerLosses,
class PlayerHand : public Hand { class PlayerHand : public Hand {
public: public:
PlayerHand(std::size_t i = 0) : id(i) { };
std::size_t id; std::size_t id;
unsigned int bet = 0; unsigned int bet = 0;
bool insured = false; bool insured = false;

+ 4
- 3
src/blackjack.cpp Wyświetl plik

case Libreblackjack::PlayerActionTaken::Bet: case Libreblackjack::PlayerActionTaken::Bet:
// TODO: bet = 0 -> wonging // TODO: bet = 0 -> wonging
if (player->currentBet == 0) { if (player->currentBet == 0) {
info(Libreblackjack::Info::InvalidBet, player->currentBet);
info(Libreblackjack::Info::BetInvalid, player->currentBet);
return 0; return 0;
} else if (player->currentBet < 0) { } else if (player->currentBet < 0) {
info(Libreblackjack::Info::InvalidBet, player->currentBet);
info(Libreblackjack::Info::BetInvalid, player->currentBet);
return 0; return 0;
} else if (max_bet != 0 && player->currentBet > max_bet) { } else if (max_bet != 0 && player->currentBet > max_bet) {
info(Libreblackjack::Info::InvalidBet, player->currentBet);
info(Libreblackjack::Info::BetInvalid, player->currentBet);
return 0; return 0;
} else { } else {
// ok, valid bet, copy the player's bet and use the local copy // ok, valid bet, copy the player's bet and use the local copy
///ip+split+detail This command can be abbreviated as `p` (for pair). ///ip+split+detail This command can be abbreviated as `p` (for pair).
case Libreblackjack::PlayerActionTaken::Split: case Libreblackjack::PlayerActionTaken::Split:


// TODO: front() and front()+1
firstCard = *(playerInfo.currentHand->cards.begin()); firstCard = *(playerInfo.currentHand->cards.begin());
secondCard = *(++playerInfo.currentHand->cards.begin()); secondCard = *(++playerInfo.currentHand->cards.begin());

+ 35
- 1
src/tty.cpp Wyświetl plik

switch (msg) { switch (msg) {


case Libreblackjack::Info::InvalidBet:
case Libreblackjack::Info::BetInvalid:
if (p1 < 0) { if (p1 < 0) {
// s = "bet_negative"; // s = "bet_negative";
s = "Your bet is negative (" + std::to_string(p1) + ")"; s = "Your bet is negative (" + std::to_string(p1) + ")";
render = true; render = true;
break; break;


case Libreblackjack::Info::PlayerSplitInvalid:
// s = "player_split_invalid";
s = "Cannot split";
render = true;
break;

case Libreblackjack::Info::PlayerSplitOk:
// s = "player_split_ok";
s = "Splitting hand" + ((p1 != 0)?(" #" + std::to_string(p1)):"");
handToSplit = p1;
render = true;
break;

case Libreblackjack::Info::PlayerSplitIds:

// TODO: check if the hand is found
for (auto hand = hands.begin(); hand != hands.end(); ++currentHand) {
if (hand->id == handToSplit) {
hand->id = p1;
cardToSplit = hand.back();
hand.pop_back();
break;
}
}
// create a new hand
PlayerHand newHand;
newHand.id = playerInfo.hands.size() + 1;
newHand.bet = playerInfo.currentHand->bet;
render = true;
break;
case Libreblackjack::Info::PlayerNextHand: case Libreblackjack::Info::PlayerNextHand:
// s = "player_next_hand"; // s = "player_next_hand";
s = "Playing next hand #" + std::to_string(p1); s = "Playing next hand #" + std::to_string(p1);

+ 3
- 0
src/tty.h Wyświetl plik

std::string input_buffer; std::string input_buffer;
#endif #endif


std::size_t handToSplit;
unsigned int cardToSplit;
std::string arrow; std::string arrow;
std::string prompt; std::string prompt;

Ładowanie…
Anuluj
Zapisz