RGSS für Dummköpfe/Der Kontrollfluss Teil II

Aus Scientia
Wechseln zu: Navigation, Suche
RGSS für Dummköpfe Schwierigkeitsgrad Stern.pngSchwierigkeitsgrad Stern.pngSchwierigkeitsgrad Stern.pngSchwierigkeitsgrad Stern.png
Autor Max Jet
Thematik RGSS
Vorraussetzungen Programme: keine

Fähigkeiten: keine

Andere Teile


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

zur Vereinfachung:

if 1 == 1 and 2 == 2 
    p 'Hallo Welt!'
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.