c - 如何在C中从甲板上抽牌而不重复?

标签 c arrays playing-cards

我对数组进行了洗牌,但现在我需要一个函数来按照洗牌顺序从数组中抽取一张牌。我似乎不知道如何抽出这副牌中的下一张牌。每次抽牌时如何递增到下一张牌?我会使用某种计数器吗?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 52 

void initDeck();
void shuffle();
int draw(int d[]);

int deck[SIZE];
int sdeck[SIZE];

int main()
{
    initDeck();
    shuffle();

    return 0;
}

void initDeck(){
    int i = 0;

    for(i; i < SIZE; i++){
        deck[i] = i + 1;
    }
}

void shuffle(){
    srand(time(NULL));
    int i = 0;

    for(i; i < SIZE; i++){
        sdeck[i] = deck[i];
    }

    i = 0;

    for(i = SIZE; i > 0; i--){
        int j = rand() % (i + 1);
        int temp = sdeck[i];
        sdeck[i] = sdeck[j];
        sdeck[j] = temp;
    }

    for(i = 0; i < SIZE; i++){
        printf("%d,", sdeck[i]);
    }

}

/**int draw(int d[]){
    int k=0;
    k = d[k];
    return(k);
}**/

最佳答案

int sdeck[SIZE];
int num_dealt = 0;
. . .
void shuffle() {
    . . .
    num_dealt = 0;
}

int draw() {
    int c = sdeck[num_dealt];
    num_dealt += 1;
    return c;
}

下一步是使牌组成为一个包含卡片和计数的结构,并将该结构传递给draw()而不是使用全局变量。

关于c - 如何在C中从甲板上抽牌而不重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58547777/

相关文章:

C sizeof 字符指针

C - 值似乎正确传递给数组元素但没有

ios - 在 Swift QueryClosure 中将数组添加到数组

c - 如何打印具有字节值的字符串数组

java - 此方法的参数有什么问题/为什么会收到此错误?

c - 为什么 block 中分配的数组在 block 结束后仍然存在?

c++ - stdio.h对应的库文件是动态链接的还是静态链接的

javascript - ramda 中的多个数据的管道

python - 使用 python 根据卡片的套件和值对卡片进行排序

c++ - 我如何遍历 n 扑克牌的所有可能组合