当调用newGame时,我试图在drawPile中创建一副牌(以特定的牌作为参数)
我有4个存储卡的链接列表(drawPile、discardPile、player1的手和player2的手)
我的游戏结构将存储我在给定时间内的游戏状态(例如,drawPile、discardPile和player1、2手中的卡)
我很难理解如何在struct游戏中使用drawPile链接列表创建游戏时,我应该如何分配drawPile、discardPile等的内存因为我相信我现在在newGame中所拥有的是完全错误的。
任何建议或提示都将不胜感激。

typedef enum {RED,BLACK} color;
typedef enum {HEARTS,DIAMONDS,CLUBS,SPADES} suit;
typedef enum {ONE,TWO,THREE,FOUR} value;

typedef struct drawPile{
    enum color color;
    enum suit suit;
    enum value value;
    struct drawPile *next;
}*drawPile;

我有点搞不懂放*在抽屉前有什么区别?
typedef struct discardPile{
    enum color color;
    enum suit suit;
    enum value value;
    struct discardPile *next;
};

typedef struct player1Hand{
    enum color color;
    enum suit suit;
    enum value value;
    struct player1Hand *next;
};

typedef struct player2Hand{
    enum color color;
    enum suit suit;
    enum value value;
    struct player2Hand *next;
};

typedef struct _game{
    drawPile game_drawPile;
    discardPile game_discardPile;
    player1Hand game_player1Hand;
    player2Hand game_player2Hand;
}Game;

Game newGame(int deckSize, value values[], color colors[], suit suits[]){
    Game nGame;
    for(int i = 0; i < deckSize; i++){
        nGame->drawPile.value = value[i];
        nGame->drawPile.color = colors[i];
        nGame->drawPile.suit = suits[i];

    }

}

下面是一个主要函数的例子,说明newGame函数将如何在只有4张卡的情况下运行。
int main (void){

     init_deck();

}
static void init_deck(void){
    int deck_size = 4;

    value values[] = {ONE, TWO, THREE, FOUR};
    color colors[] = {RED, BLACK, RED, BLACK};
    suit suits[] = {HEARTS, DIAMONDS, CLUBS, SPADES};

    Game game = newGame(deck_size, values, colors, suits);
 }

我只粘贴了部分代码,如果您需要更多信息,请告诉我。

最佳答案

首先,可以对所有链接列表使用相同的结构。

struct Card {
    enum color color;
    enum suit suit;
    enum value value;
};

struct CardList {
    struct Card *card;
    struct CardList *next;
};

然后,您可以编写向列表添加/从列表中删除卡的功能:
CardList *add(CardList **list, Card *card);

在newGame中:
Game *newGame(int deckSize, value values[], color colors[], suit suits[]){
    Game *nGame = (Game*) malloc(sizeof(Game));
    for(int i = 0; i < deckSize; i++){
        Card* card = (Card*) malloc(sizeof(Card));
        ... assign variable
        add(&game->drawPile, card);
    }

    return nGame;
}

关于c - C如何访问结构内的链表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52926545/

10-11 21:13