我有一个二十一点程序,它使用一个充满整数的向量来模拟一副牌:
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();
但是,此代码有效,但处理两张牌:
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”的时候却不行呢?而且,更重要的是,我该如何修复它(没有代码!)?