Ich implementiere ein Kartenspiel in C. Es gibt viele Arten von Karten und jede hat eine Reihe von Informationen, einschließlich einiger Aktionen, die einzeln per Skript zugeordnet werden müssen.
Bei einer Struktur wie dieser (und ich bin mir nicht sicher, ob ich die richtige Syntax für den Funktionszeiger habe)
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);
};
Ich möchte ein statisches Array davon initialisieren, eines für jede Karte. Ich vermute, das würde in etwa so aussehen
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}
};
-
Funktioniert das und gehe ich überhaupt richtig vor? Ich versuche, eine große Anzahl von Switch-Anweisungen zu vermeiden.
-
Muss ich die ‘do_cardN’-Funktionen im Voraus definieren, oder gibt es eine Möglichkeit, sie inline bei der Initialisierung der Struktur zu definieren (etwas wie eine Lambda-Funktion in Python)?
-
Ich benötige schreibgeschützten Zugriff auf cardDefinitions aus einer anderen Datei – ist „extern static“ dafür richtig?
Ich weiß, das sind viele Fragen in einer, aber ich bin wirklich etwas vage, wie ich das angehen soll.
Vielen Dank.
Bearbeiten:
Um es klar zu sagen, mein Ziel ist es, so etwas tun zu können
int cost = cardDefinitions[cardNumber].cost;
oder
int result = cardDefinitions[cardNumber].do_action(state, choice1, choice2);
Anstatt überall riesige Switch-Anweisungen zu verwenden.