I'm implementing a card game in C. There are lots of types of cards and each has a bunch of information, including some actions that will need to be individually scripted associated with it.
Given a struct like this (and I'm not certain I have the syntax right for the function pointer)
struct CARD {
int value;
int cost;
// This is a pointer to a function that carries out actions unique
// to this card
int (*do_actions) (struct GAME_STATE *state, int choice1, int choice2);
};
I would like to initialize a static array of these, one for each card. I'm guessing this would look something like this
int do_card0(struct GAME_STATE *state, int choice1, int choice2)
{
// Operate on state here
}
int do_card1(struct GAME_STATE *state, int choice1, int choice2)
{
// Operate on state here
}
extern static struct cardDefinitions[] = {
{0, 1, do_card0},
{1, 3, do_card1}
};
Will this work, and am I going about this the right way at all? I'm trying to avoid huge numbers of switch statements.
Do I need to define the 'do_cardN' functions ahead of time, or is there some way to define them inline in the initialization of the struct (something like a lambda function in python)?
I'll need read-only access to cardDefinitions from a different file - is 'extern static' correct for that?
I know this is a lot of questions rolled into one but I'm really a bit vague about how to go about this.
Thanks.
Edit:
To be clear, my goal is to be able to do something like
int cost = cardDefinitions[cardNumber].cost;
or
int result = cardDefinitions[cardNumber].do_action(state, choice1, choice2);
Instead of using huge switch statements all over the place.