Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用矢量每个玩家发5张牌_C++_Push Back - Fatal编程技术网

C++ 使用矢量每个玩家发5张牌

C++ 使用矢量每个玩家发5张牌,c++,push-back,C++,Push Back,我试图将向量牌组中的5个元素推回向量玩家1手牌,然后将这些元素推回以减少向量玩家2手牌组中的5个元素,以此类推。我可以使用玩家1手牌的当前代码推回向量牌组中的5个元素。Player2_手推相同的元素,因此我无法弹出输出中显示的元素: 混洗甲板 308 309 302 102 211 312 313 414 306 402 113 203 413 206 104 305 314 404 407 304 105 111 412 403 103 112 204 208 109 110 214 405

我试图将向量牌组中的5个元素推回向量玩家1手牌,然后将这些元素推回以减少向量玩家2手牌组中的5个元素,以此类推。我可以使用玩家1手牌的当前代码推回向量牌组中的5个元素。Player2_手推相同的元素,因此我无法弹出输出中显示的元素:

混洗甲板 308 309 302 102 211 312 313 414 306 402 113 203 413 206 104 305 314 404 407 304 105 111 412 403 103 112 204 208 109 110 214 405 213 114 210 106 411 205 202 108 310 311 307 207 408 212 410 303 107 409 209

玩家1卡 308 309 302 102 211 312

玩家2张牌 308 309 302 102 211 312

这是我的密码:

class deck
{
private:
    int x;
    vector <int> deck_of_cards
    {
        102,103,104,105,106,107,108,109,110,111,112,113,114,
        202,203,204,205,206,207,208,209,210,211,212,213,214,
        302,303,304,305,306,307,308,309,310,311,312,313,314,
        402,403,404,405,406,407,408,409,410,411,412,413,414
    };

public:
    vector <int> player1_hand;
    vector <int> player2_hand;
    int shuffle_deck()
    {
        unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();

        shuffle(deck_of_cards.begin(), deck_of_cards.end(), default_random_engine(seed));

        cout << "shuffled deck\n";
        for (int x = 0; x < deck_of_cards.size(); x++)
        {
            cout << deck_of_cards.at(x) << " ";
        }
        return 0;
    };

    int deal()
    {
        cout << "\nPlayer1 cards\n";
        for (int d = 0; d < 6; d++)
        {
            int& element = deck_of_cards[d];
            player1_hand.push_back(deck_of_cards[d]);
            deck_of_cards.pop_back();
            cout << player1_hand.at(d) << " ";
        }
        cout << "\nPlayer2 cards\n";
        for (int e = 0; e < 6; e++)
        {
            int& element = deck_of_cards[e];
            player2_hand.push_back(deck_of_cards[e]);
            deck_of_cards.pop_back();
            cout << player2_hand.at(e) << " ";
        }
        return 0;
    }
};

int main()
{
    deck d;
    d.shuffle_deck();
    d.deal();

    return 0;
};
类甲板
{
私人:
int x;
向量卡片组
{
102,103,104,105,106,107,108,109,110,111,112,113,114,
202,203,204,205,206,207,208,209,210,211,212,213,214,
302,303,304,305,306,307,308,309,310,311,312,313,314,
402,403,404,405,406,407,408,409,410,411,412,413,414
};
公众:
矢量播放器1_手;
矢量播放器2_手;
int shuffle_deck()
{
unsigned seed=std::chrono::system_clock::now();
洗牌(牌组中的牌。开始(),牌组中的牌。结束(),默认的随机引擎(种子));
coutpop_back()删除向量的最后一个元素,而不是第一个元素。因此,每次你向玩家的手上抽牌时,你都会从牌组中移除最后一张牌,而不是你给他的那张

要删除第一个元素,可以使用“擦除”

deck_of_cards.erase(deck_of_cards.begin() )
您还需要将push_back()行更改为使用0作为索引,而不是d和e,因为每次删除第一个元素时,整个向量都会向后移动一个索引。

pop_back()擦除向量的最后一个元素,而不是第一个。因此,每次你向玩家的手部抽牌时,你都会从牌组中移除最后一张牌,而不是你给他的那张

要删除第一个元素,可以使用“擦除”

deck_of_cards.erase(deck_of_cards.begin() )
您还需要将push_back()行更改为使用0作为索引,而不是d和e,因为每次删除第一个元素时,整个向量都会向后移动一个索引。

请考虑这些行

for (int d = 0; d < 6; d++)
{
     int& element = deck_of_cards[d];   // <- Unused variable
     player1_hand.push_back(deck_of_cards[d]);
     //                                   ^   The FIRST 6 cards of the deck are added
     //                                       to the player hand
     deck_of_cards.pop_back();
     //                ^^^^                   The LAST cards of the deck are removed
     cout << player1_hand.at(d) << " ";
}
for(int d=0;d<6;d++)
{
int&element=deck_of_cards[d];//考虑这些行

for (int d = 0; d < 6; d++)
{
     int& element = deck_of_cards[d];   // <- Unused variable
     player1_hand.push_back(deck_of_cards[d]);
     //                                   ^   The FIRST 6 cards of the deck are added
     //                                       to the player hand
     deck_of_cards.pop_back();
     //                ^^^^                   The LAST cards of the deck are removed
     cout << player1_hand.at(d) << " ";
}
for(int d=0;d<6;d++)
{
int&element=deck_of_cards[d];/“考虑以下因素:”

enum Card_Suit{心形、梅花、钻石、黑桃};
结构卡
{
卡丁套装;
int值;
};
向量组;
标准::矢量播放器1_手;
在上面的代码中,一个
struct
用于为一张卡建模。一张
card
有一套套装和一个值。易于阅读

一副卡片由
std::vector
表示
玩家的手用
std::vector
表示

一个好主意是你可以将一张牌从
牌组
移动到玩家的手上

您可以通过添加以下方法来扩充
结构:
构造、复制、销毁、输入(从用户)和输出(到用户),
以及比较(排序和相等)

其他涉及纸牌的功能取决于您正在玩的游戏。

请考虑以下几点:

enum Card_Suit{心形、梅花、钻石、黑桃};
结构卡
{
卡丁套装;
int值;
};
向量组;
标准::矢量播放器1_手;
在上面的代码中,一个
struct
用于为一张卡建模。一张
card
有一套套装和一个值。易于阅读

一副卡片由
std::vector
表示
玩家的手用
std::vector
表示

一个好主意是你可以将一张牌从
牌组
移动到玩家的手上

您可以通过添加以下方法来扩充
结构:
构造、复制、销毁、输入(从用户)和输出(到用户),
以及比较(排序和相等)


其他涉及纸牌的功能取决于你正在玩的游戏。

OT:IMHO,你应该创建一个
struct
来模拟一张
纸牌
:套装和数字。这比你的方案可读性好得多。OT:IMHO,你应该创建一个
struct
来模拟一张
纸牌
:套装和数字。这是一个更具可读性的方法比你的计划更糟糕。