我正在尝试为单人二十一点编写C ++程序,但我不确定如何确保所抽取的卡都不相同。我使用大小写转换方法随机抽取2张卡,但不确定如何选择2张不同的卡。
int player_card1 = rand() % 13 + 1; //player card 1
int player_card2 = rand() % 13 + 1; //player card 2
int value = 0;
cout << "Current Hand: ";
switch (player_card1) {
case 10: cout << "A-";
value+=10;
break;
case 11: cout << "J-";
value+=10;
break;
case 12: cout << "Q-";
value+=10;
break;
case 13: cout << "K-";
value+=10;
break;
default: cout << player_card1 << "-";
value+=player_card1;
break;
}
switch (player_card2) {
case 10: cout << "A";
value+=10;
cout << " with a value of " << value;
break;
case 11: cout << "J";
value+=10;
cout << " with a value of " << value;
break;
case 12: cout << "Q";
value+=10;
cout << " with a value of " << value;
break;
case 13: cout << "K";
value+=10;
cout << " with a value of " << value;
break;
default: cout << player_card2;
value+=player_card2;
cout << " with a value of " << value;
break;
}
cout << endl;
}
您可以在进行操作时抽出第一张卡:
int player_card1 = rand() % 13 + 1; //player card 1
然后继续尝试画第二张纸牌,直到获得与第一张纸牌不同的纸:
int player_card2 = rand() % 13 + 1;
//Keep drawing until we get a different card from player 1
while(player_card2 == player_card1) { player_card2 = rand() % 13 + 1; }
或者,如果您想成为一名鸽友:
int player_card2;
while( (player_card2 = rand() % 13 + 1) == player_card1 ) { }
您可以制造一副纸牌并将纸牌分发给玩家。随机放置卡片盒。发行卡片时,请从容器中取出卡片。这样可以确保不会重复。
甲板上有52张卡片。如果我们将卡片从0到51编号,则可以使用一些数学运算来确定卡片:
Card suit == (card number / 13)
因此,您可以映射西服编号,例如0:黑桃,1:心脏,2:俱乐部,3:钻石。
Card Value == (card number) % 13
卡片组可以是整数的向量:
std::vector<int> deck(52);
初始化套牌:
for (int i = 0; i < 52; ++i)
{
deck[i] = i;
}
std::random_shuffle(deck.begin(), deck.end());
让我们使用std::vector
作为玩家的手:
std::vector<int> players_hand;
处理玩家需要将卡片从卡组移到玩家的手上:
players_hand.push_back(deck[0]);
players_hand.push_back(deck[1]);
deck.erase(deck.begin(), deck.begin() + 2);
可以通过使用数学运算(以上)以更加可读的方式显示玩家的手。
可以通过将卡表示为struct
来增强上述算法。
enum class Card_Suit : int {SUIT_SPADES, SUIT_HEARTS, SUIT_CLUBS, SUIT_DIAMONDS};
struct Card
{
enum Card_Suit suit;
int face_value;
};
您将需要使用输入和输出方法来扩展Card
类,并可能添加一些有用的方法(例如,添加面值)。