Funktionen im Skript werden dazu benutzt um Abläufe zu automatisieren und eure Geschichte im Spiel zu gestalten.
Sie können Parameter und einen Rückgabewert haben. Einfache Funktionen lassen sich betrachten wie ein Todo-Zettel mit Aufgaben, die noch zu erledigen sind.
Wenn der Zettel einmal aufgeschrieben wurde, kann er immer wieder abgearbeitet werden, indem sein Name aufgerufen wird.
func typ Name ( //hier, zwei Parameter. Bei einer Parameteranzahl zwischen 0 und 8 gibt es keine Probleme var typ ParameterA, var KLASSEN_TYP ParameterB ) { //TODO Liste, der Aufgabenzettel für die Engine //Variablenzuweisung Questvariable = Konstante; //Eigenschaftenzuweisung ParameterB.eigenschaft[ParameterA] = Andere_Konstante; //Der Rückgabewert return Wert_Vom_Typ_typ; };
Code | Beschreibung | Möglicher Wert |
---|---|---|
typ | Bezeichnet einen Werttyp. | int, float, string, void (kein Rückgabewert), C_NPC, C_ITEM |
KLASSEN_TYP | Bezeichnet einen Werttyp, der eine Klasse ist. | C_NPC, C_ITEM, C_INFO |
Name | Bezeichnet die Funktion. Ihr Name muss neu sein. | FunktionA, ABC_Funktion, A_Funktion_001 |
ParameterA, ParameterB | Bezeichnen die Parameter einer Funktion. | siehe oben |
Questvariable | Bezeichnet eine globale Variable | siehe Variablen |
Konstante, Andere_Konstante | Bezeichnet zwei globale Konstanten | siehe Konstanten |
Welche Bedeutung die Anweisungen Variablen- bzw. Eigenschaftenzuweisung und return haben steht im Abschnitt Operatoren.
Zurück zum Aufgabenzettel. Es wurde gesagt, dass die Aufgabenzettel beliebig oft abgearbeitet werden können. Wenn allerdings sich das Abarbeiten nicht irgendwie verallgemeinern ließe, dann müssten wir sehr viele Zettel bzw. Funktionen schreiben.
Jedoch, glücklicherweise lassen sie sich mittels Parameter verallgemeinern, d.h. ein Zettel kann für mehr als eine Situation aufgerufen werden.
Beispiel
Deine Mutter schreibt einen Zettel func void Kind_Kauft_bei_Aldi(Kind,Produkt,Anzahl) {};
um jedes ihrer Kinder, mit dem Einkauf bei Aldi Süd eines beliebigen Produktes in beliebiger Anzahl zu beauftragen.
Noch allgemeiner formuliert lautete ihr Zettel func void Kind_Kauft_bei(Kind,Produkt,Anzahl,Haendler) {};
Jede Funktion kann aufgerufen werden. Das heißt, dass die Aufgaben auf dem Zettel abgearbeitet werden.
Beim Aufruf schreibt man den Namen des Zettels bzw. der Funktion und in runden Klammern - mit oder ohne Leerzeichen - danach die zu übergebenden Parameter getrennt durch Kommata (Kommas). Der Zettel wird dann mit den übergebenen Parametern abgearbeitet.
Beispiel (fortgesetzt)
Deine Mutter schickt dich zum Bioladen um zwölf Bio-Eier zu kaufen. Dazu ruft sie ihren Zettel auf: Kind_Kauft_Bei(Du,Bioeier,12,Bioladen);
Dabei ist natürlich wichtig, dass die Parameter in der richtigen Reihenfolge übergeben, d.h. aufgeschrieben werden. Außerdem müssen und können nur dann Parameter übergeben, wenn die Funktionsdefinition sie auch enthält und zwar genau so viele die Funktionsdefinition enthält und vom gleichen Typ!
Manchmal möchte man eine Antwort über das Ergebnis der Funktion erhalten. Dazu muss in der Funktionsdefinition der Antworttyp, Ergebnistyp oder Rückgabetyp festgelegt werden. Zulässig sind alle Typen oder void
, welches soviel bedeutet wie: kein Rückgabewert.
Beispiel (fortgesetzt)
Deine Mutter schreibt auf ihren Zettel, dass sie eine Zahl bzw. int
als Antwort möchte. Die Zahl ist der Gesamteinkaufspreis in Eurocent.
func int Kind_Kauft_Bei_Gesamtpreis(Kind,Produkt,Anzahl,Haendler) { return Gesamtpreis; };
Es gehört zum guten Ton, dass die Mutter sich diese Antwort merkt.
var int ausgegeben; ausgegeben = ausgegeben + Kind_Kauft_Bei_Gesamtpreis(Du,Bioeier,12,Bioladen);
In diesem Beispiel merkt sich deine Mutter, wieviel ihre Kinder insgesamt bisher ausgegeben haben, in dem sie zu dem was bisher ausgegeben wurde das hinzuzählt was zuletzt ausgegeben wurde.
Wenn die Antwort der Funktion mittels der Anweisung return Wert_vom_Werttyp_typ;
zurückgegeben wird, dann wird sofort die weitere Abarbeitung des Todo-Zettels eingestellt, beendet.