我正在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中的lambda函数一样)?
>我需要从另一个文件中读取cardDefinitions的只读访问权限 – “extern static”是否正确?
我知道这是一个很多的问题,但我真的有点模糊如何去做。
谢谢。
编辑:
要明确,我的目标是能够做一些类似的事情
int cost = cardDefinitions[cardNumber].cost;
要么
int result = cardDefinitions[cardNumber].do_action(state, choice1, choice2);
而不是在整个地方使用巨大的switch语句。