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