纸牌游戏,使用 C++ 提供没有重复的卡片

Posted

技术标签:

【中文标题】纸牌游戏,使用 C++ 提供没有重复的卡片【英文标题】:Card game, serve cards with no duplicates using 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张牌? (来自不同的包,还是同一个包?) How to deal a deck of cards in c++的可能重复 按照@Bathsheba 的建议存储 52 张牌似乎是这里最好的方法,但另一种方法是在花色上设置一个循环,并为数字设置另一个循环(在第一个内部)。然后你随机选择一个对应于玩家的数字来给那张牌(如果每个玩家得到 26 张牌)。如果每个玩家得到的牌少于 26 张,则先将两个列表洗牌。 请尝试更好地解释您的代码的结果是什么以及它与您的预期有何不同。在问题中包含预期和实际输出 【参考方案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 的链接具有误导性 没错。我很好奇的是如何处理这种重叠。嗯...我不知道如何解决这个问题。

以上是关于纸牌游戏,使用 C++ 提供没有重复的卡片的主要内容,如果未能解决你的问题,请参考以下文章

如何在容器内居中卡片(引导程序)[重复]

当保持在一条线上时收集总价值最大的卡片(仅从角落提取)[重复]

使用 SDL 制作一个简单的游戏,努力将所有东西链接在一起 [重复]

将锚标记对齐到 2 个 div 的底部,没有绝对位置 [重复]

您如何在引导程序 4 中正确断点卡片组 [重复]

从 C# 到 C++ 并返回的数组,没有不安全的代码 [重复]