Home > Software design >  how can i access a variable in enum
how can i access a variable in enum

Time:12-08

#define NUMBER_OF_CARDS 54

typedef enum type{
        QUEEN;
        JACK;
        KING
} CardTypes;

typedef struct game{
        CardTypes cards[NUMBER_OF_CARDS];
        struct{
               int hearts;
               int spades;
               int clubs;
               int diamonds;
        }
        int players_cards;
}GameState;

I have something similar like this and I want to access any variable from enum when this function is called

void set_cards(GameState gamestate, int x, int y, CardTypes cardtypes){
         gamestate.cards[x * y] = cardtypes;
}

void generate_game(GameState gamestate){
         /*
                some code 
         */
         if(variable == 0){
                set_cards(gamestate, x, y, gamestate.cards[NUMBER_OF_CARDS].JACK; 
                //This is what I have tried but it doesn't work

I hope you understand what I mean, because I really don't know how to explain this any better.

set_cards(gamestate, x, y, gamestate.cards[NUMBER_OF_CARDS].JACK;
//this is what I have tried but it doesn't work

please ignore any inaccuracies in the code. what is important for me is how can i access any of the enum's variable in the function generate_game(). this right here: if(variable == 0){ set_cards(gamestate, x, y, gamestate.cards[NUMBER_OF_CARDS].JACK; //This is what I have tried but it doesn't work

CodePudding user response:

Based upon what @Aconcagua wrote your code should be using pointers :

// gamestate is a structure , so it must be passed as pointer to enable modification to be seen by caller
void set_cards(GameState *gamestate, int x, int y, CardTypes cardtypes){
     gamestate->cards[x * y] = cardtypes;
}

void generate_game(GameState *gamestate){ // here also pointer so caller know the changes 
     /*
            some code 
     */
     if(variable == 0){

        // next depends on what you intend to do :
        // 1- set the current games rate card with value of last card
        set_cards(gamestate, x, y, gamestate->cards[NUMBER_OF_CARDS-1]); 

        // 2- set the current gamestate to JACK
        set_cards(gamestate, x, y, JACK);

CodePudding user response:

Your types do not have too much sense. Card is defined by its colour and type.

typedef enum {
        QUEEN,
        JACK,
        KING,
        //you neeed some more
} CardTypes;

typedef enum {
    HEART,
    SPADE,
    CLUB,
    DIAMOND,
} CardColour;

typedef struct
{
    CardTypes type;
    CardColur colour;
}Card;

Card deck[54];

How to access:

void foo(Card *card)
{
    Card card1;

    card1.colour = HEART;
    card1.type = JACK;

    card -> colour = DIAMOND;
    card -> type = KING;

    card[34].colour = CLUB;
    card[34].type = QUEEN;
}
  • Related