RGSS für Dummköpfe/Der Kontrollfluss Teil II
| {{{TITEL}}} {{{LEVEL}}} | |
|---|---|
| Thematik | {{{THEMA}}} |
| Vorraussetzungen | Programme: {{{TOOL}}} Fähigkeiten: {{{VOR}}} |
Inhaltsverzeichnis
Bedingte Aussagen
Der Held des Lichtes wurde entsandt um den bösen Drachenkönig zu besiegen; Anschließend begab er sich zum König zurück. Der König (von Fröhlichland) fordert einen Beweis, woraufhin der Held ihm die !magische! Drachennase™, präsentiert'. Überglücklich erkennt der König dies und blablabla alle lebten glücklich bis an das Ende ihres Lebens. Das könnte die Story des kommenden revolutionären RPGs sein, dass du schon Squaresoft zu schicken planst. Sie werden es teilweise benutzen (weil es vollständig zu nutzen zu kompliziert ist), in den nächsten Teil von Final Fantasy einsetzen und du wirst reich und berühmt! Da gibt es nur ein Problem. Wie bekommst du es hin, dass der König wirklich weiß, der Held besitze die !magische! Drachennase™? Vielleicht sollte der König sagen: „Du hast es geschafft! Du besitzt die Nase, also must du den Drachen wirklich getötet haben!“, falls der Spieler das Item hat und „Oh, du hast die !magische! Drachennase™ nicht! Besiege den bösen Drachenkönig des Bösen, bevor es zu spat ist!”, falls nicht. Wir könnten sagen “wenn der Held das Item besitzt, wird der König das `du hast es geschafft´ Ding sagen und wenn nicht sagt er halt das `besieg den Drachenkönig´ Ding. Ein anderes Beispiel ware: “Wenn ich Alex wäre, wäre ich stark.“ Siehst du die Struktur? Wenn eine Bedingung erfüllt ist, passiert etwas. Bedingte Aussagen, auch “conditional statements” genannt, sollen auswerten, ob etwas war oder falsch ist und etwas in die Wege leiten, falls die Aussage wahr „true“ ist. (Anm. Von Max Jet: Bemerke immer noch, dass du englisch programmierst und deshalb gezwungen bist, wenn dann in englische if-clauses zu übertragen. If a condition is met, something will happen. Klar?)
if condition do something (true) else do something (false) end
Die Bedingung ist eine einfache Aussage, die wahr oder falsch sein kann, also einen „true“ oder „false“ Wert besitzt, mit anderen Worten ein Boolean’scher Ausdruck und es könnte sogar eine Booleansche Variabel sein. Das erste, was getan werden könnte, sofern die Aussage wahr ist (do something (true) ), wäre einen Block aus Codes auszuführen. Ist die Aussage falsch, also hat sie den Wert “false” (do something (false)), würde ein anderer Block von Codes aktiviert warden. Grundsätzlich erlaubt dir eine wenn Aussage (if statement) Verzweigungen in deinem Script. Je nach Situation würden verschiedene Dinge geschehen. Falss ihr euch noch an den RPGM 2000 erinnert, gab es in der Befehlsleiste „Conditional Branch”, was eine vereinfachte Variante hiervon war. So werden Bedingungen verwendet:
cow = true if (cow == true) p 'cow ist wahr' else p 'Das wird nie ausgeführt werden!' end
cat = false if (cat == true) p 'Das wird nie ausgeführt werden!' else p 'cat ist falsch' end
Obwohl ich es in diesem Beispiel getan habe, müssen Bedingungen nicht eingeklammert werden; ich habe es nur gemacht, damit man es besser erkennen kann. Eine Sache, die du dem if statement hinzufügen kannst ist ein “elsif” (steht für ein weiteres wenn). Einem „elsif“ folgt eine Aussage und wird ausgeführt wenn die vorherige Bedingung nicht erfüllt wurde. Ein Beispiel durchleuchtet die Sache besser.
age = 15 if (age < 13) p 'Kind' elsif (age < 18) p 'Tennager' elsif (age < 150) p 'Erwachsener' else p 'Du bist so alt, du solltest schon tot sein! ' end
Wenn das Programm gestartet wird, bekommst du „Teenager“ angezeigt. Und wie funktioniert das? Zuerst wird überprüft, ob das Alter kleiner als 13 ist, da es aber nicht stimmt, sollte sich das Programm zum „else” statement bewegen. Wie auch immer „elsif“ ist eigentlich eine “else“ Aussage, gfolgt von einem “if” und prüft nach einer anderen Bedingung, dem “if” folgend, falls diese nicht erfüllt wurde. Die “elsif” Bedingung prüft ob das Alter kleiner, als 18 ist und zeigt eine Nachricht an (weil die erste nicht erfüllt war und wir wissen, dass das Alter größer oder gleich 13 sein muss). Setzt dud as Alter hingegen auf 40, wird die erste “elsif” Bedingung, ebenso, wie die “if” Bedingung scheitern. Nur die zweite dem folgende „elsif“ Bedingung wird erfüllt. Solltest dud as Alter auf 200 setzen, warden alle Bedingungen nicht erfüllt, außer die “else” Bedingung und deshalb wird angezeigt: “Du bist so alt, du solltest schon tot sein!”
Das letzte was du wissen solltest ist, dass du „if“ Bedingungen in ein Nest setzen kannst:
if 1 == 1
if 2 == 2
p 'Hallo Welt!'
end
end
Die innere Bedingung wird nur dann ausgeführt, wenn die äußere korrekt ist. Trotz allem mag es verwirrend sein, wenn die „if“ Bedingungen so nebeneinander setzt, also quäle dich nicht damit. Schleifen „loops“, kannst du ebenso in ein Nest setzen (Methoden und Klassen auch, Jede Form von Block kann in ein Nest gesetzt werden, denke ich...)
außer (unless)
siehe auch unless
unless (condition) do something (false) else do something (true) end
“Unless“ ist das Gegenteil von „if“. Außer ist das gegenteil von wenn. Die erste Aussage wird ausgeführt, wenn die Aussage den Wert „false“ hat, und es führt die zweite Aussage aus, wenn die Aussage den Wert „true“ hat, als würde man sagen "if not(condition)", also „wenn nicht (Bedingung)“.
boolean = false unless boolean print 'Hi' end
Wir haben „else“ nicht in diesem Beispiel gebraucht, weil es freiwillig ist. „If statements“, also wenn Aussagen, kannst du auch ohne „else“ gebrauchen und tatsächlich wird das meistens auch getan!
var = condition ? value (true) : value (false)
Es gibt eine Kurzform von „if statements“. Der ternary Operand (der ?) prüft ob eine Bedingung „true“ ist, wenn es der erste Wert ist (links von : ) wird er zurück geführt und in var gehortet, ansonsten wird der andere Wert gehortet (rechts von ":") in var. Mit anderen Worten var erhält den Wert „true“, wenn die Bedingung wahr ist und „false“ wenn die Bedingung falsch ist.
monkey = true my_var = monkey ? 1 : 2 p my_var # 1
case (Fall)
siehe auch case
case var_name when val1 do something when val2 do something when val3 do something when val4 do something else do something end
Die Fall Aussagen „case statements“ vergleichen die ihnen folgende Aussagen (var_name) mit jedem Ausdruck nach einem „when“, also falls (val1, val2, val3, val4), es führt den Code aus (“do something”, also mach etwas), der bei “when” zutrifft und wenn kein “when” zutrifft führt es die anderen Codes aus. Du kannst so oft von “when” Gebrauch machne, wie du möchtest und du kannst das “case statement”, also di Falls Aussage, als eine lange Liste von „ifs“ und „elsifs“ betrachten, aber die einzige Bedingung, die wir überprüfen ist Gleichheit ziwschen den Ausdrücken nach falls und anderen Ausdrücken nach „whens“. Dazu ein Beispiel:
number = 1 case number when 0 p 'Die Zahl ist null.' when 1 p 'Die Zahl ist eins.' when 2 p 'Die Zahl ist 2.' else p 'Die Zahl etwas anderes als null, eins oder zwei.' end
Zusammenfassung
- Bedingte Aussagen „conditional statements überprüfen ob eine Bedingung (Boolean’scher Ausdruck) wahr oder falsch ist, und führt dann einen Code, abhängig vom Wert aus, also ob die Bedingung den Wert „true“, oder „false“ besitzt.
- „If“ und „unless“, also falls und außer sind bedingte Ausdrücke, denen du ein „else“ oder „elsif“ hinzufügen kannst.
- „case statement“ eine Fall vergleicht einen Ausdruck mit vielen anderen.