Browse Source

fifos

master
gtheler 5 years ago
parent
commit
9eea56ca38
5 changed files with 19 additions and 15 deletions
  1. +2
    -0
      TODO
  2. +1
    -1
      autogen.sh
  3. +1
    -1
      blackjack.conf
  4. +9
    -12
      src/blackjack.cpp
  5. +6
    -1
      src/main.cpp

+ 2
- 0
TODO View File

* handle no readline * handle no readline
* parse 1e5 in hands
* trap ctrl+c and write report anyway * trap ctrl+c and write report anyway
* flag to see if a conf string was used or not * flag to see if a conf string was used or not
* to_string() for floats * to_string() for floats
* tty * tty
* stdio * stdio
- yes - yes
* fifo
- awk - awk
- bash - bash
- perl - perl

+ 1
- 1
autogen.sh View File

echo "define(libreblackjackversion, [${version}])dnl" > version.m4 echo "define(libreblackjackversion, [${version}])dnl" > version.m4




if [ ! -z "`which pandoc`" ]; then
if [ ! -z "$(which pandoc)" ]; then
pandoc README.md -t plain -o README pandoc README.md -t plain -o README
# cd doc # cd doc
# ./md2texi.sh # ./md2texi.sh

+ 1
- 1
blackjack.conf View File

flat_bet = 1 flat_bet = 1
no_insurance = true no_insurance = true
delay = 0
; delay = 0
; arranged_cards = 2,0,3 ; arranged_cards = 2,0,3
; rng_seed = 1 ; rng_seed = 1

+ 9
- 12
src/blackjack.cpp View File

// see if we finished all the player's hands // see if we finished all the player's hands
if (++playerStats.currentHand != playerStats.hands.end()) { if (++playerStats.currentHand != playerStats.hands.end()) {
unsigned int playerCard = drawCard(&(*playerStats.currentHand)); unsigned int playerCard = drawCard(&(*playerStats.currentHand));
player->playerValue = playerStats.currentHand->value();
info(Libreblackjack::Info::CardPlayer, playerCard, playerStats.currentHand->id); info(Libreblackjack::Info::CardPlayer, playerCard, playerStats.currentHand->id);


if (std::abs(playerStats.currentHand->value()) == 21) {
if (std::abs(player->playerValue) == 21) {
player->actionRequired = Libreblackjack::PlayerActionRequired::None; player->actionRequired = Libreblackjack::PlayerActionRequired::None;
nextAction = Libreblackjack::DealerAction::MoveOnToNextHand; nextAction = Libreblackjack::DealerAction::MoveOnToNextHand;
return; return;
} else { } else {
for (auto playerHand : playerStats.hands) { for (auto playerHand : playerStats.hands) {
if (playerHand.busted() == false) { // busted hands have already been solved if (playerHand.busted() == false) { // busted hands have already been solved
player->playerValue = std::abs(playerHand.value());
player->playerValue = playerHand.value();
if (std::abs(player->dealerValue) > std::abs(player->playerValue)) { if (std::abs(player->dealerValue) > std::abs(player->playerValue)) {
playerStats.handsDoubled++; playerStats.handsDoubled++;


playerCard = drawCard(&(*playerStats.currentHand)); playerCard = drawCard(&(*playerStats.currentHand));
unsigned int playerTotal = playerStats.currentHand->value();
player->playerValue = playerStats.currentHand->value();
info(Libreblackjack::Info::CardPlayer, playerCard, playerStats.currentHand->id); info(Libreblackjack::Info::CardPlayer, playerCard, playerStats.currentHand->id);
if (playerStats.currentHand->busted()) { if (playerStats.currentHand->busted()) {
info(Libreblackjack::Info::PlayerLosses, 1e3*playerStats.currentHand->bet, playerTotal);
info(Libreblackjack::Info::PlayerLosses, 1e3*playerStats.currentHand->bet, player->playerValue);
playerStats.result -= playerStats.currentHand->bet; playerStats.result -= playerStats.currentHand->bet;
playerStats.bustsPlayer++; playerStats.bustsPlayer++;
playerStats.losses++; playerStats.losses++;
// deal a card to the first hand // deal a card to the first hand
playerCard = drawCard(&(*playerStats.currentHand)); playerCard = drawCard(&(*playerStats.currentHand));
player->playerValue = playerStats.currentHand->value();
info(Libreblackjack::Info::CardPlayer, playerCard, playerStats.currentHand->id); info(Libreblackjack::Info::CardPlayer, playerCard, playerStats.currentHand->id);


// aces get dealt only one card // aces get dealt only one card
if (++playerStats.currentHand != playerStats.hands.end()) { if (++playerStats.currentHand != playerStats.hands.end()) {
info(Libreblackjack::Info::PlayerNextHand, (*playerStats.currentHand).id); info(Libreblackjack::Info::PlayerNextHand, (*playerStats.currentHand).id);
playerCard = drawCard(&(*playerStats.currentHand)); playerCard = drawCard(&(*playerStats.currentHand));
player->playerValue = playerStats.currentHand->value();
info(Libreblackjack::Info::CardPlayer, playerCard, playerStats.currentHand->id); info(Libreblackjack::Info::CardPlayer, playerCard, playerStats.currentHand->id);


// if the player got an ace or 21 again, we are done // if the player got an ace or 21 again, we are done
nextAction = Libreblackjack::DealerAction::MoveOnToNextHand; nextAction = Libreblackjack::DealerAction::MoveOnToNextHand;
return 1; return 1;
} else { } else {
// player->playerValue = playerTotal;
// player->dealerValue = dealerTotal;
player->actionRequired = Libreblackjack::PlayerActionRequired::Play; player->actionRequired = Libreblackjack::PlayerActionRequired::Play;
nextAction = Libreblackjack::DealerAction::AskForPlay; nextAction = Libreblackjack::DealerAction::AskForPlay;
return 1; return 1;
return 1; return 1;
} }
} else { } else {
// player->playerValue = playerTotal;
// player->dealerValue = dealerTotal;
player->actionRequired = Libreblackjack::PlayerActionRequired::Play; player->actionRequired = Libreblackjack::PlayerActionRequired::Play;
nextAction = Libreblackjack::DealerAction::AskForPlay; nextAction = Libreblackjack::DealerAction::AskForPlay;
return 1; return 1;
///ip+hit+detail ///ip+hit+detail
///ip+hit+detail This command can be abbreviated as `h`. ///ip+hit+detail This command can be abbreviated as `h`.
playerCard = drawCard(&(*playerStats.currentHand)); playerCard = drawCard(&(*playerStats.currentHand));
player->playerValue = playerStats.currentHand->value();
info(Libreblackjack::Info::CardPlayer, playerCard, playerStats.currentHand->id); info(Libreblackjack::Info::CardPlayer, playerCard, playerStats.currentHand->id);


if (playerStats.currentHand->busted()) { if (playerStats.currentHand->busted()) {
} else { } else {
// player->playerValue = playerTotal;
// player->dealerValue = dealerTotal;
player->actionRequired = Libreblackjack::PlayerActionRequired::Play; player->actionRequired = Libreblackjack::PlayerActionRequired::Play;
nextAction = Libreblackjack::DealerAction::AskForPlay; nextAction = Libreblackjack::DealerAction::AskForPlay;
return 1; return 1;

+ 6
- 1
src/main.cpp View File

// assign player to dealer // assign player to dealer
dealer->setPlayer(player); dealer->setPlayer(player);


// TODO: check and/or choose in the conf
// std::setlinebuf(stdout);
// std::setvbuf(stdout, NULL, _IOLBF, 0);
// std::setvbuf(stdin, NULL, _IOLBF, 0);

// let the action begin! // let the action begin!
unsigned int unknownCommands = 0; unsigned int unknownCommands = 0;
dealer->nextAction = Libreblackjack::DealerAction::StartNewHand; dealer->nextAction = Libreblackjack::DealerAction::StartNewHand;
} }
} }
player->info(Libreblackjack::Info::Bye);
dealer->reportPrepare(); dealer->reportPrepare();
dealer->writeReportYAML(); dealer->writeReportYAML();

Loading…
Cancel
Save