纸牌游戏,使用C ++提供无重复的纸牌

时间:2019-05-23 10:53:18

标签: c++ c++11 visual-c++

我有一个密码。 这是纸牌游戏的代码。 问题是应该将卡分发给游戏玩家,但不能重复。

如果可能,我需要您的帮助。谢谢。

#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();
}

我预测玩家的卡片重叠

2 个答案:

答案 0 :(得分:0)

您首先创建一个包含全部52张牌的卡组(全部4套西服,以及全部13个等级)。该套牌可以由52个物品组成,每个物品代表一张卡。然后,您用std::shuffle洗牌。然后,您将第一张X卡从牌组移至玩家的1手。这只手可能是另一组X个物品。然后,您将下一张X卡移到玩家的2手牌上。

答案 1 :(得分:-1)

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

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个♠2,而玩家的1个套牌中有2个◆K。

您可以像{Bathsheba所指出的那样shuffle数组,并从相同参考点为两个玩家提取。

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