Skip to content

Commit daa6cbf

Browse files
committed
dbg
1 parent 5cd9453 commit daa6cbf

5 files changed

Lines changed: 88 additions & 52 deletions

File tree

players/35-informed/blackjack.conf

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
decks = 1
2+
hands = 7
23
enhc = true
34
flat_bet = true
45
no_insurance = true
5-
# shuffle_every_hand = true
6-
# cards = 3 2 5
7-
cards = TH 6 JD
6+
shuffle_every_hand = false
7+
new_hand_reset_cards = false
88
player = informed
9+
# cards = JS TS KC 9D 4S 3D 5S TH 2C 8C QH
10+
cards_file = cards.txt

src/blackjack.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,23 @@ Blackjack::Blackjack(Configuration &conf) : Dealer(conf), rng(dev_random()), fif
5757
///conf+decks+example decks = 8
5858
conf.set(&n_decks, {"decks", "n_decks"});
5959

60+
///conf+maximum_bet+usage `maximum_bet = ` $n$
61+
///conf+maximum_bet+details Sets a limit on the size of the bet.
62+
///conf+maximum_bet+details If a bet larger than the limit is placed, the dealer answers
63+
///conf+maximum_bet+details `bet_maximum` and asks again. A value of 0 means no limit.
64+
///conf+maximum_bet+details This is only useful when modeling variable-betting schemes.
65+
///conf+maximum_bet+default $0$
66+
///conf+maximum_bet+example maximum_bet = 0
67+
///conf+maximum_bet+example maximum_bet = 1
68+
///conf+maximum_bet+example maximum_bet = 20
6069
conf.set(&max_bet, {"maximum_bet", "max_bet", "maxbet"});
6170

71+
///conf+rules+usage `rules = [ ahc | enhc ] [ h17 | s17 ] [ das | ndas ] [ doa | da9 ]`
72+
///conf+rules+details Defines the rules of the game.
73+
///conf+rules+default Empty, meaning `ahc`, `h17`, `das`, `doa`.
74+
///conf+rules+example maximum_bet = 0
75+
///conf+rules+example maximum_bet = 1
76+
///conf+rules+example maximum_bet = 20
6277
// rules are base, particular options take precedence
6378
if (conf.exists("rules")) {
6479
std::istringstream iss(conf.getString("rules"));
@@ -81,10 +96,12 @@ Blackjack::Blackjack(Configuration &conf) : Dealer(conf), rng(dev_random()), fif
8196
doa = true;
8297
} else if (token == "da9" || token == "DA9") {
8398
doa = false;
99+
/*
84100
} else if (token == "rsa" || token == "RSA") {
85101
rsa = true;
86102
} else if (token == "nrsa" || token == "NRSA") {
87103
rsa = false;
104+
*/
88105
} else {
89106
std::cerr << "error: unknown rule " << token << std::endl;
90107
exit(1);
@@ -96,7 +113,7 @@ Blackjack::Blackjack(Configuration &conf) : Dealer(conf), rng(dev_random()), fif
96113
conf.set(&h17, {"h17", "hit_soft_17"});
97114
conf.set(&das, {"das", "double_after_split"});
98115
conf.set(&doa, {"doa", "double_on_any"});
99-
conf.set(&rsa, {"rsa", "resplit_aces"});
116+
// conf.set(&rsa, {"rsa", "resplit_aces"});
100117
conf.set(&enhc, {"enhc", "european_no_hole_card"});
101118
conf.set(&blackjack_pays, {"blackjack_pays"});
102119

@@ -1034,7 +1051,7 @@ std::string Blackjack::rules(void) {
10341051
((h17) ? "h17" : "s17") + std::string(" ") +
10351052
((das) ? "das" : "ndas") + std::string(" ") +
10361053
((doa) ? "doa" : "da9") + std::string(" ") +
1037-
((rsa) ? "rsa" : "nrsa") + std::string(" ") +
1054+
// ((rsa) ? "rsa" : "nrsa") + std::string(" ") +
10381055
std::to_string(n_decks) + "decks" ;
10391056
}
10401057
}

src/blackjack.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class Blackjack : public Dealer {
6161
bool das = true;
6262
bool doa = true;
6363
bool enhc = false;
64-
bool rsa = false; // TODO
64+
// bool rsa = false; // TODO
6565
bool shuffle_every_hand = false;
6666
bool quit_when_arranged_cards_run_out = false;
6767
bool new_hand_reset_cards = true;

src/players/informed.cpp

Lines changed: 52 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,17 @@ int Informed::play() {
165165
actionTaken = lbj::PlayerActionTaken::Hit;
166166
}
167167
}
168+
if (actionTaken == lbj::PlayerActionTaken::Stand) {
169+
std::cout << "stand" << std::endl;
170+
} else if (actionTaken == lbj::PlayerActionTaken::Hit) {
171+
std::cout << "hit" << std::endl;
172+
} else if (actionTaken == lbj::PlayerActionTaken::Double) {
173+
std::cout << "double" << std::endl;
174+
} else if (actionTaken == lbj::PlayerActionTaken::Split) {
175+
std::cout << "split" << std::endl;
176+
} else {
177+
std::cout << "unknonw" << std::endl;
178+
}
168179

169180
break;
170181

@@ -420,115 +431,115 @@ void Informed::info(lbj::Info msg, int p1, int p2) {
420431
break;
421432

422433
case lbj::Info::NewHand:
423-
std::cout << "NewHand" << std::endl;
434+
std::cout << "NewHand" << std::endl;
424435
break;
425436

426437
case lbj::Info::BetInvalid:
427-
std::cout << "BetInvalid" << std::endl;
438+
// std::cout << "BetInvalid" << std::endl;
428439
break;
429440

430441
case lbj::Info::CardPlayer:
431-
std::cout << "CardPlayer" << std::endl;
432-
if (decks > 0 && p1 > 0) {
433-
remaining[p1]--;
434-
remaining_cards--;
435-
if (p1 == 1) {
436-
remaining[11]--;
437-
}
442+
std::cout << "card_player " + card[p1].ascii() + " " + ((p2 != 0)?(std::to_string(p2)+ " "):"") << std::endl;
443+
if (decks > 0 && p1 > 0) {
444+
remaining[p1]--;
445+
remaining_cards--;
446+
if (p1 == 1) {
447+
remaining[11]--;
438448
}
449+
}
439450
break;
440451

441452
case lbj::Info::CardDealer:
442-
std::cout << "CardDealer" << std::endl;
443-
if (decks > 0 && p1 > 0) {
444-
remaining[p1]--;
445-
remaining_cards--;
446-
if (p1 == 1) {
447-
remaining[11]--;
448-
}
453+
std::cout << "card_dealer " + card[p1].ascii() << std::endl;
454+
if (decks > 0 && p1 > 0) {
455+
remaining[p1]--;
456+
remaining_cards--;
457+
if (p1 == 1) {
458+
remaining[11]--;
449459
}
460+
}
450461
break;
451462

452463
case lbj::Info::CardDealerRevealsHole:
453-
std::cout << "CardDealerRevealsHole" << std::endl;
454-
if (decks > 0 && p1 > 0) {
455-
remaining[p1]--;
456-
remaining_cards--;
457-
if (p1 == 1) {
458-
remaining[11]--;
459-
}
464+
std::cout << "card_dealer_hole " + card[p1].ascii() << std::endl;
465+
if (decks > 0 && p1 > 0) {
466+
remaining[p1]--;
467+
remaining_cards--;
468+
if (p1 == 1) {
469+
remaining[11]--;
460470
}
471+
}
461472

462473
break;
463474

464475
case lbj::Info::DealerBlackjack:
465-
std::cout << "DealerBlackjack" << std::endl;
476+
std::cout << "DealerBlackjack" << std::endl;
466477
break;
467478

468479
case lbj::Info::PlayerWinsInsurance:
469-
std::cout << "PlayerWinsInsurance" << std::endl;
480+
std::cout << "PlayerWinsInsurance" << std::endl;
470481
break;
471482

472483
case lbj::Info::PlayerBlackjackAlso:
473-
std::cout << "PlayerBlackjackAlso" << std::endl;
484+
std::cout << "PlayerBlackjackAlso" << std::endl;
474485
break;
475486

476487
case lbj::Info::PlayerSplitInvalid:
477-
std::cout << "PlayerSplitInvalid" << std::endl;
488+
std::cout << "PlayerSplitInvalid" << std::endl;
478489
break;
479490

480491
case lbj::Info::PlayerSplitOk:
481-
std::cout << "PlayerSplitOk" << std::endl;
492+
std::cout << "PlayerSplitOk" << std::endl;
482493
break;
483494

484495
case lbj::Info::PlayerSplitIds:
485-
std::cout << "PlayerSplitIds" << std::endl;
496+
// std::cout << "PlayerSplitIds" << std::endl;
486497
break;
487498

488499
case lbj::Info::PlayerDoubleInvalid:
489-
std::cout << "PlayerDoubleInvalid" << std::endl;
500+
// std::cout << "PlayerDoubleInvalid" << std::endl;
490501
break;
491502

492503
case lbj::Info::PlayerNextHand:
493-
std::cout << "PlayerNextHand" << std::endl;
504+
// std::cout << "PlayerNextHand" << std::endl;
494505
break;
495506

496507
case lbj::Info::PlayerPushes:
497-
std::cout << "PlayerPushes" << std::endl;
508+
std::cout << "PlayerPushes" << std::endl;
498509
break;
499510

500511
case lbj::Info::PlayerLosses:
501-
std::cout << "PlayerLosses" << std::endl;
512+
std::cout << "PlayerLosses" << std::endl;
502513
break;
503514
case lbj::Info::PlayerBlackjack:
504-
std::cout << "PlayerBlackjack" << std::endl;
515+
std::cout << "PlayerBlackjack" << std::endl;
505516
break;
506517
case lbj::Info::PlayerWins:
507-
std::cout << "PlayerWins" << std::endl;
518+
std::cout << "PlayerWins" << std::endl;
508519
break;
509520

510521
case lbj::Info::NoBlackjacks:
511-
std::cout << "NoBlackjacks" << std::endl;
522+
std::cout << "NoBlackjacks" << std::endl;
512523
break;
513524

514525
case lbj::Info::DealerBusts:
515-
std::cout << "DealerBusts" << std::endl;
526+
std::cout << "DealerBusts" << std::endl;
516527
break;
517528

518529
case lbj::Info::Help:
519-
std::cout << "Help" << std::endl;
530+
// std::cout << "Help" << std::endl;
520531
break;
521532

522533
case lbj::Info::Bankroll:
523-
std::cout << "Bankroll" << std::endl;
534+
// std::cout << "Bankroll" << std::endl;
524535
break;
525536

526537
case lbj::Info::CommandInvalid:
527-
std::cout << "CommandInvalid" << std::endl;
538+
// std::cout << "CommandInvalid" << std::endl;
528539
break;
529540

530541
case lbj::Info::Bye:
531-
std::cout << "Bye" << std::endl;
542+
// std::cout << "Bye" << std::endl;
532543
break;
533544

534545
case lbj::Info::None:

src/players/stdinout.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ void StdInOut::info(lbj::Info msg, int p1, int p2) {
126126
break;
127127

128128
case lbj::Info::CardPlayer:
129-
///inf+card_player+usage `card_player` $rs$
129+
///inf+card_player+usage `card_player` $rs$ `[` $h$ `]`
130130
///inf+card_player+details The dealer informs that the player has been dealt a card.
131131
///inf+card_player+details The card is given as a two-character ASCII representation where
132132
///inf+card_player+details the first character $r$ indicates the rank and the second
@@ -154,12 +154,18 @@ void StdInOut::info(lbj::Info msg, int p1, int p2) {
154154
///inf+card_player+details | `D` | ♦ Diamonds |
155155
///inf+card_player+details | `H` | ♥ Hearts |
156156
///inf+card_player+details | `S` | ♠ Spades |
157+
///inf+card_player+details @
158+
///inf+card_player+details The optional argument $h$ indicates the id of the player's hand
159+
///inf+card_player+details being dealt. If it not present, that means the base hand.
160+
///inf+card_player+details When performing a splitting on the base hand, the original hand
161+
///inf+card_player+details has id equal to zero and the new hand has id equal to one.
162+
///inf+card_player+details Subsequent splits trigger new hands with sequential ids.
157163
///inf+card_player+example card_player 9C
158164
///inf+card_player+example card_player JD
159-
///inf+card_player+example card_player QC
160-
///inf+card_player+example card_player KS
161-
///inf+card_player+example card_player TD
162-
///inf+card_player+example card_player 6H
165+
///inf+card_player+example card_player QC
166+
///inf+card_player+example card_player KS
167+
///inf+card_player+example card_player TD 1
168+
///inf+card_player+example card_player 6H 2
163169
s = "card_player " + card[p1].ascii() + " " + ((p2 != 0)?(std::to_string(p2)+ " "):"") ;
164170
if (p2 != static_cast<int>(currentHandId)) {
165171
for (currentHand = hands.begin(); currentHand != hands.end(); ++currentHand) {

0 commit comments

Comments
 (0)