如何重置牌组

时间:2017-04-14 07:07:00

标签: c arrays loops struct

我正在制作扑克游戏,一切都很完美,除了我无法弄清楚如何重置牌组。一旦我使用了所有52张牌,游戏就会崩溃,我无法弄清楚如何设置牌组阵列,以便我可以获得一套新的52张牌。这就是我到目前为止所拥有的。

void shuffle(int wDeck[][13])
{
    int row = 0;    /* row number */
    int column = 0; /*column number */
    int card = 0;   /* card counter */
    int i = 0;

                    /* for each of the 52 cards, choose slot of deck randomly */
    for (card = 1; card <= 52; card++)
    {
        /* choose new random location until unoccupied slot found */
        do
        {
            row = rand() % 4;
            column = rand() % 13;
        } while (wDeck[row][column] != 0);

        /* place card number in chosen slot of deck */
        wDeck[row][column] = card;
    }
}
/* deal cards in deck */
Deck deal(const int wDeck[][13], const char *wFace[], const char *wSuit[], Deck *cards)
{
    int row = 0;    /* row number */
    int column = 0; /*column number */
    int card = 0;   /* card counter */
    int i = 0, j = 5, k = 10;

                    /* deal each of the 52 cards */
    for (card = 1; card <= 52; card++)
    {
        /* loop through rows of wDeck */
        for (row = 0; row <= 3; row++)
        {
            /* loop through columns of wDeck for current row */
            for (column = 0; column <= 12; column++)
            {
                /* if slot contains current card, display card */
                if (wDeck[row][column] == card)
                {
                    //printf("%d) %5s of %-8s%c", card, wFace[column], wSuit[row], card % 4 == 0 ? '\n' : '\t');
                    cards->face[i] = column;
                    cards->suit[i] = row;
                    i++;
                }
            }
        }
    }
}

这适用于程序的开头,但是一旦我使用了所有52张卡,我尝试使用这些功能重置它们

Deck replenish_deck(const int wDeck[][13], const char *wFace[], const char *wSuit[], Deck *cards)
/*
This function will reshuffle and deal the deck if all 52 cards are used
*/
{
    int i = 0;
    if (cards->current_card == 52)
    {
        shuffle(wDeck);
        deal(wDeck, wFace, wSuit, cards);
    }
}

我尝试将循环放入shuffle的开头,例如

for (row = 0; row < 4; row++)
{
    for (column = 0; column < 13; column++)
    {
        wDeck[row][column] = 0;
    }
}

但这只会导致卡片名称从一开始就搞砸了。任何帮助都会有所帮助。如果您需要更多我没有提供的代码,我会添加它!

0 个答案:

没有答案