【发布时间】:2019-05-23 10:53:18
【问题描述】:
我有一个密码。 这是纸牌游戏的代码。 问题是卡片应该分发给游戏玩家,但不能重复。
如果可能的话,我需要你的帮助。谢谢。
#include<iostream>
#include<array>
#include<string>
#include<ctime>
using namespace std;
class Card {
public:
static const size_t card1{ 4 };
static const size_t card2{ 13 };
Card(const array<string, card1>& card1n,
const array<string, card2>& card2n)
: arr1{ card1n }, arr2{ card2n } {}
void disPlay() {
for (int x = 0; x < arr2.size(); x++) {
int i = rand() % 4;
int j = rand() % 13;
cout << arr1[i] + arr2[j] << " ";
}
}
private:
array<string, card1> arr1;
array<string, card2> arr2;
};
int main() {
array<string, Card::card1> arr1{ "♥","◆","♠","♣" };
array<string, Card::card2> arr2{ "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "jack", "queen", "king" };
Card p1(arr1, arr2);
Card p2(arr1, arr2);
srand(static_cast<unsigned int>(time(0)));
cout << "player1's deck : ";
p1.disPlay();
cout << "\nplayer2's deck : ";
p2.disPlay();
}
我预测牌手重叠的玩家
【问题讨论】:
-
构建一个由 52 张可能的卡片组成的数组,然后将其洗牌。对于后者使用en.cppreference.com/w/cpp/algorithm/random_shuffle
-
两位玩家都有一整副 52 张牌?还是13张牌? (来自不同的包,还是同一个包?)
-
按照@Bathsheba 的建议存储 52 张牌似乎是这里最好的方法,但另一种方法是在花色上设置一个循环,并为数字设置另一个循环(在第一个内部)。然后你随机选择一个对应于玩家的数字来给那张牌(如果每个玩家得到 26 张牌)。如果每个玩家得到的牌少于 26 张,则先将两个列表洗牌。
-
请尝试更好地解释您的代码的结果是什么以及它与您的预期有何不同。在问题中包含预期和实际输出
标签: c++ c++11 visual-c++