C++ 实现完整斗地主:含洗牌、发牌与手牌展示,可按需扩展!
下面是一个简单的 C++ 实现的斗地主程序示例,主要包含了洗牌、发牌和展示手牌的功能。 ```cpp #include <iostream> #include <vector> #include <algorithm> #include <ctime> #include <string> // 定义扑克牌结构体 struct PokerCard { std::string suit; // 牌的花色 std::string rank; // 牌的点数 PokerCard(const std::string& s, const std::string& r) : suit(s), rank(r) {} }; // 生成一副扑克牌 std::vector<PokerCard> generateDeck() { std::vector<PokerCard> deck; std::vector<std::string> suits = {"♠", "♥", "♣", "♦"}; std::vector<std::string> ranks = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"}; // 生成普通牌 for (const auto& suit : suits) { for (const auto& rank : ranks) { deck.emplace_back(suit, rank); } } // 加入大小王 deck.emplace_back("", "小王"); deck.emplace_back("", "大王"); return deck; } // 洗牌函数 void shuffleDeck(std::vector<PokerCard>& deck) { std::srand(unsigned(std::time(0))); std::random_shuffle(deck.begin(), deck.end()); } // 发牌函数 void dealCards(const std::vector<PokerCard>& deck, std::vector<PokerCard>& player1, std::vector<PokerCard>& player2, std::vector<PokerCard>& player3, std::vector<PokerCard>& remain) { for (int i = 0; i < 17; ++i) { player1.push_back(deck[i]); player2.push_back(deck[i + 17]); player3.push_back(deck[i + 34]); } // 剩下三张作为底牌 remain = {deck[51], deck[52], deck[53]}; } // 展示手牌 void showHands(const std::vector<PokerCard>& player, const std::string& playerName) { std::cout << playerName << "的手牌: "; for (const auto& card : player) { std::cout << card.suit << card.rank << " "; } std::cout << std::endl; } // 展示底牌 void showRemain(const std::vector<PokerCard>& remain) { std::cout << "底牌: "; for (const auto& card : remain) { std::cout << card.suit << card.rank << " "; } std::cout << std::endl; } int main() { // 生成一副扑克牌 std::vector<PokerCard> deck = generateDeck(); // 洗牌 shuffleDeck(deck); // 定义三个玩家和底牌 std::vector<PokerCard> player1, player2, player3, remain; // 发牌 dealCards(deck, player1, player2, player3, remain); // 展示玩家手牌和底牌 showHands(player1, "玩家1"); showHands(player2, "玩家2"); showHands(player3, "玩家3"); showRemain(remain); return 0; } ``` 代码说明: 1. 扑克牌结构体:`PokerCard` 结构体用于表示一张扑克牌,包含花色 `suit` 和点数 `rank`。 2. 生成扑克牌:`generateDeck` 函数用于生成一副完整的扑克牌,包括普通牌和大小王。 3. 洗牌:`shuffleDeck` 函数使用 `std::random_shuffle` 对扑克牌进行随机打乱。 4. 发牌:`dealCards` 函数将洗好的牌依次发给三个玩家,每个玩家 17 张,剩下 3 张作为底牌。 5. 展示手牌和底牌:`showHands` 函数用于展示玩家的手牌,`showRemain` 函数用于展示底牌。 注意事项: 这个程序只是一个简单的斗地主发牌程序,没有实现叫地主、出牌等复杂的游戏逻辑,你可以根据需求进一步扩展。 ######[AI问答 | 1028点数解答 | 2026-01-10 08:02:37]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- C++ 实现我的世界基岩版:从简单框架到开发要点揭秘(字节豆包 | 182点数解答 | 2025-02-22 15:53:11)193
- C++ 实现完整斗地主:含洗牌、发牌与手牌展示,可按需扩展!(字节豆包 | 1028点数解答 | 2026-01-10 08:02:37)35
- 解密iOS开发:Category、Extension与继承的区别大揭秘(阿里通义 | 292点数解答 | 2023-11-08 00:38:19)222
- iOS开发大揭秘:Category、Extension与继承的区别详解 (百度文心 | 316点数解答 | 2023-11-09 17:40:23)214
- Python 实现 DES 加密算法编程实验:从原理到单步调试全解析(字节豆包 | 4096点数解答 | 2025-11-09 22:06:30)69
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310
- iOS开发:手把手教你完整实现代理模式,含声明与实现步骤!(阿里通义 | 268点数解答 | 2023-11-08 00:39:55)250
- JavaScript 开发:用 Animation 实现自定义动画的简易教程 (阿里通义 | 333点数解答 | 2023-11-09 01:50:07)240
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)457
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)354
- Vue.js 与 Matter.js 碰撞:轻松实现物理模拟全攻略 (讯飞星火 | 522点数解答 | 2024-05-29 22:26:06)426