繁体   English   中英

C如何访问结构内的链表

[英]C how to access linked list inside a struct

我正在尝试在调用 newGame 时在 drawPile 中创建一副纸牌(将特定纸牌作为参数给出)

我有 4 个链表来存储卡片(drawPile、discardPile、player1 的手和 player2 的手)

我的 _game 结构将在给定时间存储我的游戏状态(例如 drawPile、discardPile 和 player1,2 中的牌)

我在尝试理解如何在 struct _game 中使用 drawPile 链表时遇到问题。 创建 _game 时,我应该如何为 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; 

我有点困惑将 * 放在 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];

    }

}

下面是一个示例 main 函数,说明 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。

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);

在新游戏中:

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM