编制一个模拟发牌的程序。有编号为1,2,3,4四个人,将一付去掉大小怪的扑克按照如下顺序排列梅花c0-c12,方块d0-d12,红桃h0--h12,黑桃s0-s12,然后按照1,2,3,4四个人的顺序发牌,问最后每个人手上的牌有哪些。用c++完成
时间: 2024-12-11 15:24:20 浏览: 10
要编写一个简单的C++程序来模拟发牌,我们可以创建一个数组来代表扑克牌,并使用循环和条件语句来随机分配给每个玩家。首先,我们定义一个结构体`Card`来存储每张牌的信息,包括花色(如梅花、方块等)和点数(从0到12)。接着,我们会使用四个整数数组分别对应四个玩家。
```cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
// 定义卡牌结构体
struct Card {
char suit; // 花色
int number; // 点数
};
// 定义洗牌函数
void shuffle(Card* cards, int count) {
srand(time(0)); // 设置随机种子
for (int i = count - 1; i > 0; --i) {
int j = rand() % (i + 1);
std::swap(cards[i], cards[j]);
}
}
// 发牌函数
void dealCards(Card* cards[], int players[], int deckSize) {
for (int i = 0; i < deckSize; ++i) {
players[i % 4] = cards[i];
}
}
int main() {
const int DECK_SIZE = 52;
Card deck[DECK_SIZE]; // 初始化扑克牌
// 填充牌面
for (int i = 0; i <= 12; ++i) {
for (char suit : {'c', 'd', 'h', 's'}) { // 梅花、方块、红桃、黑桃
deck[(suit - 'c') * 13 + i].suit = suit;
deck[(suit - 'c') * 13 + i].number = i;
}
}
// 洗牌
shuffle(deck, DECK_SIZE);
// 分配卡片
Card* players[4] = {deck, deck, deck, deck};
dealCards(players, players, DECK_SIZE);
// 输出每人手中的牌
for (int i = 0; i < 4; ++i) {
std::cout << "Player " << i+1 << ": ";
for (const Card& card : players[i]) {
std::cout << card.suit << card.number << " ";
}
std::cout << "\n";
}
return 0;
}
```
这个程序首先创建了一副完整的牌,洗牌后按顺序分发给四个玩家。注意,在实际运行中,`dealCards`函数会随机决定每个玩家拿到哪一张牌,因为我们只对索引取模4来循环发牌。
阅读全文