【问题标题】:Card game, serve cards with no duplicates using c++纸牌游戏,使用 C++ 提供没有重复的卡片
【发布时间】: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++


【解决方案1】:

您首先创建一副包含所有 52 张牌(所有 4 种花色和所有 13 个等级)的牌组。这个牌组可以是一个由 52 个项目组成的数组,每个项目代表一张卡片。然后你用std::shuffle 洗牌。然后你将第一张 X 牌从牌库移到玩家的 1 手牌。这只手可能是另一个 X 项数组。然后你将下 X 张牌移到玩家的 2 手牌中。

【讨论】:

  • 创建包含所有卡牌的套牌后,您告诉他们将其分发给该套牌中的玩家。谢谢你。我正在寻找别的东西。那是最好的
【解决方案2】:

据我了解,您希望两位玩家拥有一些相同的牌。我运行了你的代码,它确实输出了这个:

player1's deck : ♥Q ♠8 ♠10 ♥2 ◆K ♣3 ♥J ♣6 ◆5 ♥K ♥9 ♠10 ◆K 
player2's deck : ♠8 ◆7 ♥5 ◆2 ♠2 ♠2 ♥10 ◆3 ♥9 ♣Q ♣A ♥Q ◆5 

请注意,两组都有♥Q 和◆5,而且玩家的第 2 套牌中有两个♠2,玩家的第 1 套牌中有两个 ◆K。

您可以shuffle@Bathsheba 指出的数组,并从两个玩家的相同参考点提取。

(编辑:甚至不需要 std::move)

【讨论】:

  • 您指向std::move 的链接具有误导性
  • 没错。我很好奇的是如何处理这种重叠。嗯...我不知道如何解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-13
  • 1970-01-01
相关资源
最近更新 更多