gpt4 book ai didi

C如何访问结构内的链表

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:27 27 4
gpt4 key购买 nike

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

我有 4 个链表来存储卡片(drawPile、discardPile、玩家 1 的手和玩家 2 的手)

我的 _game 结构将存储我的游戏在给定时间的状态(例如,drawPile、discardPile 和玩家 1、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];

}

}

下面是 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);

在新游戏中:

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如何访问结构内的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52926545/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com