我正在制作扑克游戏,一切都很完美,除了我无法弄清楚如何重置牌组。一旦我使用了所有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;
}
}
但这只会导致卡片名称从一开始就搞砸了。任何帮助都会有所帮助。如果您需要更多我没有提供的代码,我会添加它!