Я реализую карточную игру на языке C. Существует много типов карточек, и у каждой есть куча информации, включая некоторые действия, которые должны быть связаны с ней в отдельности.
Учитывая такую структуру (и я не уверен, что у меня есть синтаксис для указателя функции)
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);
};
Я хотел бы инициализировать их статический массив, по одному для каждой карты. Я предполагаю, что это будет выглядеть примерно так
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}
};
Будет ли это работать, и я ли вообще буду делать это правильно? Я пытаюсь избежать огромного количества операторов switch.
Нужно ли заранее определять функции 'do_cardN' или есть какой-то способ определить их встроенными при инициализации структуры (что-то вроде лямбда-функции в python)?
Мне понадобится доступ только для чтения к cardDefinitions из другого файла - для этого подходит 'extern static'?
Я знаю, что это много вопросов в одном, но я действительно немного расплывчато в том, как это сделать.
Спасибо.
Edit:
Для ясности, моя цель - сделать что-то вроде
int cost = cardDefinitions[cardNumber].cost;
или
int result = cardDefinitions[cardNumber].do_action(state, choice1, choice2);
Вместо повсеместного использования огромных операторов switch.