浏览代码

player and dealer hands from parent class

master
gtheler 5 年前
父节点
当前提交
7367224e90
共有 5 个文件被更改,包括 48 次插入34 次删除
  1. +1
    -0
      Makefile.am
  2. +12
    -0
      src/base.cpp
  3. +25
    -24
      src/base.h
  4. +9
    -9
      src/blackjack.cpp
  5. +1
    -1
      src/cards.cpp

+ 1
- 0
Makefile.am 查看文件

@@ -17,6 +17,7 @@ blackjack_LDADD = $(all_libraries)

blackjack_SOURCES = \
src/main.cpp \
src/base.cpp \
src/blackjack.cpp \
src/cards.cpp \
src/stdinout.cpp \

+ 12
- 0
src/base.cpp 查看文件

@@ -0,0 +1,12 @@
#include <iostream>
#include "base.h"

void Hand::draw(void) {
for (auto it : cards) {
std::cout << card[it].utf8() << std::endl;
}
return;
}

+ 25
- 24
src/base.h 查看文件

@@ -98,15 +98,15 @@ class Card {
unsigned int value;
std::string ascii() {
return valueASCII + suitASCII;
return numberASCII + suitASCII;
}
std::string utf8() {
return valueASCII + suitUTF8;
return numberASCII + suitUTF8;
}
std::string text();
private:
std::string valueASCII;
std::string numberASCII;
std::string suitASCII;
std::string suitUTF8;
std::string suitName;
@@ -119,12 +119,9 @@ extern Card card[52];
// TODO: base + daugthers, para diferenciar entre dealer y player y otros juegos
class Hand {
public:
int id = 0;
bool insured = false;
bool holeCardShown = false;
int bet = 0;
std::list<unsigned int> cards;

// inline on purpose
int total() {
unsigned int soft = 0;
unsigned int n = 0;
@@ -135,36 +132,40 @@ class Hand {
soft += (value == 11);
}
// this loop should be only executed once if everything works fine
while (n > 21 && soft > 0){
n -= 10;
soft--;
n -= 10;
soft--;
}
return (soft)?(-n):(n);
};
// inline on purpose
bool blackjack() {
return (total() == 21 && cards.size() == 2);
};
// inline on purpose
bool busted() {
return (total() > 21);
}

private:
void draw();
};
class PlayerHand : public Hand {
public:
std::list<unsigned int> cards;
int bet = 0;
int id = 0;
bool insured = false;
};

class dealerHand {
class DealerHand : public Hand {
public:
std::list<unsigned int> cards;
unsigned int total() {
return 0;
}
private:
bool holeCardShown = false;
};


@@ -220,8 +221,8 @@ class Player {
double M2 = 0;
double variance = 0;
std::list<Hand> hands;
std::list<Hand>::iterator currentHand;
std::list<PlayerHand> hands;
std::list<PlayerHand>::iterator currentHand;
};

class Dealer {
@@ -272,7 +273,7 @@ class Dealer {
// TODO: most of the games will have a single element, but maybe
// there are games where the dealer has more than one hand
// std::list <Hand> hands;
Hand hand;
DealerHand hand;
};

+ 9
- 9
src/blackjack.cpp 查看文件

@@ -66,8 +66,8 @@ void Blackjack::deal(Player *player) {
if (n_hand != 0) {
double delta = player->current_result - player->mean;
player->mean += delta / (double)(n_hand);
player->M2 += delta * (player->current_result - player->mean);
player->variance = player->M2 / (double)(n_hand);
player->M2 += delta * (player->current_result - player->mean);
player->variance = player->M2 / (double)(n_hand);
}

infinite_decks_card_number_for_arranged_ones = 0;
@@ -79,7 +79,7 @@ void Blackjack::deal(Player *player) {

// erase all the player's, create one, add and make it the current one
player->hands.clear();
player->hands.push_back(std::move(Hand()));
player->hands.push_back(std::move(PlayerHand()));
player->currentHand = player->hands.begin();
// state that the player did not win anything nor splitted nor doubled down
@@ -134,13 +134,13 @@ void Blackjack::deal(Player *player) {
player->total_money_waged += player->currentHand->bet;

playerFirstCard = dealCard(&(*player->currentHand));
std::cout << "card_player_first " << card[playerFirstCard].ascii() << std::endl;
std::cout << "card_player_first " << card[playerFirstCard].text() << std::endl;
// std::cout << "card_player_first " << card[playerFirstCard].ascii() << std::endl;
// std::cout << "card_player_first " << card[playerFirstCard].text() << std::endl;
std::cout << "card_player_first " << card[playerFirstCard].utf8() << std::endl;
// step 4. show dealer's upcard
upCard = dealCard(&hand);
std::cout << "card_dealer_up " << card[upCard].text() << std::endl;
std::cout << "card_dealer_up " << card[upCard].utf8() << std::endl;

// step 5. deal the second card to each player
playerSecondCard = dealCard(&(*player->currentHand));
@@ -245,7 +245,7 @@ void Blackjack::deal(Player *player) {
setNextAction(DealerAction::StartNewHand);
player->actionRequired = PlayerActionRequired::None;
setInputNeeded(false);
std::cout << "next start a new hand";
std::cout << "next start a new hand" << std::endl;
return;
} else if (playerBlackack) {
@@ -261,7 +261,7 @@ void Blackjack::deal(Player *player) {
setNextAction(DealerAction::StartNewHand);
player->actionRequired = PlayerActionRequired::None;
setInputNeeded(false);
std::cout << "next start a new hand";
std::cout << "next start a new hand" << std::endl;
return;
} else {
@@ -273,7 +273,7 @@ void Blackjack::deal(Player *player) {
setNextAction(DealerAction::AskForPlay);
player->actionRequired = PlayerActionRequired::Play;
setInputNeeded(true);
std::cout << "prepare to play";
std::cout << "prepare to play" << std::endl;
return;
}
break;

+ 1
- 1
src/cards.cpp 查看文件

@@ -7,7 +7,7 @@ Card::Card(unsigned int tag) {
number = 1 + (tag % 13);
suit = static_cast<Suit>(tag/13);
value = (number == 1) ? 11 : ((number > 10) ? 10 : number);
valueASCII = (number < 11) ? std::to_string(number) : TJQK[number-10];
numberASCII = (number == 1) ? "A" : ((number < 11) ? std::to_string(number) : TJQK[number-10]);
switch (suit){
case Suit::Clubs:

正在加载...
取消
保存