3

整数でいっぱいのベクトルを使用してカード デッキをシミュレートするブラックジャック プログラムがあります。

vector<short int> deck;

1〜10を入力しました:

for (int i=0; i<=4; ++i) // Populate the deck with 1-10
{
    for (int c=1; c<=10;++c)
    {
        deck.push_back(c);
    }
}
for (i=0; i<=12;++i)
{
    deck.push_back(10); // Face cards
}

次に、乱数ジェネレーターをシードします。

srand(time(0)+1);

でデッキをシャッフルしようとしましrandom_shuffle(deckofcards.begin(), deckofcards.end());たが、ユーザーがヒットすることを決定した場合、配られるカードはゲーム全体でまったく同じです。出力例を次に示します。

Dealer: I'm gonna play it safe
Dealer bets $42
Dealing cards...
Dealer lays down a 5
You have a 3, and a 10 and your total is 13
Stand, or hit? Stand, or hit? hit
You have been dealt an Ace, your hand is soft, and your total is now 14
Stand, or hit? hit
You have been dealt an Ace, your hand is soft, and your total is now 15
Stand, or hit? hit
You have been dealt an Ace, your hand is soft, and your total is now 16
Stand, or hit? hit
You have been dealt an Ace, your hand is soft, and your total is now 17
Stand, or hit? hit
You have been dealt an Ace, your hand is soft, and your total is now 18
Stand, or hit? hit
You have been dealt an Ace, your hand is soft, and your total is now 19
Dealer calls stand
The dealer has a 3, a 10, an Ace , an Ace , an Ace , an Ace , an Ace , an Ace    for      total of 17, you have a 3, a 10, an Ace , an Ace , an Ace , an Ace , an Ace , an         Ace  you win 1042!

それが役立つ場合、ユーザーが入力したときのコードは次のhitとおりです。

playerhand.push_back(deck.front());
ptotal+=playerhand.back();
if (playerhand.back()!=1)
cout << "You have been dealt a "<<playerhand.back()<<", your total is now"<<ptotal<<endl;
else
    cout << "You have been dealt an Ace, your hand is soft, and your total is now "<<ptotal<<endl;
dealerhand.push_back(deck.front());
dtotal+=dealerhand.back();

ただし、このコードは機能しますが、2 枚のカードが配られます。

cout << "Dealing cards...\n";
playerhand.clear();
dealerhand.clear();
playerhand.push_back(deck.back());
deck.pop_back();
dealerhand.push_back(deck.back());
deck.pop_back();
if (dealerhand.back()==1)
    dhsoft=true;
else
    dhsoft=false;
if (playerhand.back()==1)
{
    phsoft=true;
    cout << "Your hand is soft\n";
}
else
    phsoft=false;
playerhand.push_back(deck.back());
deck.pop_back();
dealerhand.push_back(deck.back());
deck.pop_back();
if (dealerhand.back()==1)
    dhsoft=true;
else
    dhsoft=false;
if (playerhand.back()==1)
{
    cout << "Your hand is soft\n";
    phsoft=true;
}
else
    phsoft=false;
unsigned int i;
for (i=0;i<=dealerhand.size()-1; ++i)
    dtotal+=dealerhand[i];
for (i=0;i<=playerhand.size()-1; ++i)
    ptotal+=playerhand[i];

では、なぜ上記のコードは機能するのに、ユーザーが「hit」と入力したときのコードは機能しないのでしょうか? さらに重要なことに、どうすれば修正できますか (コードなしで!)?

4

1 に答える 1