опа — C ++ Блэкджек Застрял, пытаясь запрограммировать Ace

Я должен запрограммировать простую игру в блэкджек для своего вступления в класс C ++, и то, как учитель хочет, чтобы мы создавали колоду, меня перепутало с тем, как я должен программировать Ace, чтобы автоматически выбирать, будет ли значение 11 или 1.

Из прочтения других возможных решений возникли противоречивые идеи, чтобы сначала установить значение туза равным 11 и вычесть 10, если вы обанкротились (как бы предпочел мой профессор), но большинство, как я вижу, говорят, чтобы установить значение 1 и добавить 10 если нужно.

ниже показано, как он хотел, чтобы мы настроили наши классы карт и колод:

#include <iostream>
#include <string>
#include <vector>
#include <ctime>

using namespace std;

class card
{
string rank;
string suit;
int value;

public:
string get_rank()
{
return rank;
}
string get_suit()
{
return suit;
}
int get_value()
{
return value;
}

//Contstructor
card(string rk = " ", string st = " ", int val = 0)
{
rank = rk;
suit = st;
value = val;
}//print function
void print()
{
cout << rank << " of " << suit << endl;
}
};

class deck
{
card a_deck[52];
int top;

public:
card deal_card()
{
return a_deck[top++];
}

//Deck constructor
deck()
{
top = 0;
string ranks[13] = { "Ace", "King", "Queen", "Jack", "Ten", "Nine",
"Eight", "Seven", "Six", "Five", "Four", "Three", "Two" };
string suits[4] = { "Spades", "Diamonds", "Hearts", "Clubs" };
int values[13] = { 11,10,10,10,10,9,8,7,6,5,4,3,2 };

for (int i = 0; i < 52; i++)
a_deck[i] = card(ranks[i % 13], suits[i % 4], values[i % 13]);

srand(static_cast<size_t> (time(nullptr)));
}

void shuffle()
{
for (int i = 0; i < 52; i++)
{
int j = rand() % 52;
card temp = a_deck[i];
a_deck[i] = a_deck[j];
a_deck[j] = temp;

}
}
};

Затем он попросил нас создать класс игрока, в котором мы собираем руку в вектор.

class player
{
string name;
vector<card>hand;
double cash;
double bet;

public:

//Constructor
player(double the_cash)
{
cash = the_cash;
bet = 0;
}

void hit(card c)
{
hand.push_back(c);
}int total_hand()
{
int count = 0;
for (int i = 0; i < hand.size(); i++)
{
card c = hand[i];
count = count + c.get_value();
}
return count;

}
};

Как бы я занялся кодированием туза? он едва перешел на создание «друга» последнего класса. я должен создать функцию друга в колоде, которая изменяет значение Ace в массиве на единицу? Мой мозг болит, извиняюсь, если я не понимаю.

-1

Решение

Вы можете реализовать это обоими способами.

Чтобы добавить 10 позже, вы можете изменить свою функцию total_hand () на:

int total_hand
{
int count = 0;
int num_of_aces = 0;
for (int i = 0; i < hand.size(); i++)
{
card c = hand[i];
if (c.get_value() == 11){
num_of_aces += 1;
count += 1;
}
else
count = count + c.get_value();
}
for (int i = 0; i < num_of_aces; i++){
if (count + 10 <= 21)
count += 10;
return count;
}

Чтобы вычесть 10 позже (как подсказывает ваша интуиция), вы можете сделать следующее:

int total_hand
{
int count = 0;
int num_of_aces = 0;
for (int i = 0; i < hand.size(); i++)
{
card c = hand[i];
if (c.get_value() == 11)
num_of_aces += 1;

count = count + c.get_value();
}

while(count > 21 && num_of_aces--)
count -=10;

return count;
}
0

Другие решения

Других решений пока нет …