RGSS für Anfänger/Bedingung
| {{{TITEL}}} {{{LEVEL}}} | |
|---|---|
| Thematik | {{{THEMA}}} |
| Vorraussetzungen | Programme: {{{TOOL}}} Fähigkeiten: {{{VOR}}} |
Inhaltsverzeichnis
Bedingung
Einleitung
Was im RM2k die Fork Conditions waren, das sind jetzt endlich waschechte If-Conditions. Mit vielen Abzweigungen und allem, was dazugehört. Wenn wir zum Beispiel eine Zufallszahl zwischen 1 und 10 haben wollen und dann mit Bedingungen abfragen wollen, welche Zahl das ist, dann geht das so:
Aufbau
zahl = rand(10) if zahl < 5 p "Diese Zahl ist kleiner als 5." elsif zahl == 5 p "Diese Zahl ist 5!" else p "Diese Zahl ist größer als 5." end
Das ganze funktioniert nach folgendem Schema:
Wenn das Statement zutrifft, was hinter dem if steht, dann wird die darunterliegende Zeile ausgeführt. Wenn es nicht zutrifft, wird zu elsif (nicht elseif!) übergegangen und geprüft, ob das zutrifft. Wenn ja, dann wird die Zeile darunter ausgeführt. Wenn auch das nicht zutrifft, wird in jedem Fall else ausgeführt. Es kann natürlich auf If-Bedingungen ohne else und ohne weitere elsifs geben oder auch mit viel mehr elsifs. Wenn man zum Beispiel jede einzelne Zahl abfragen will.
zahl = rand(10) if zahl == 0 p "Es ist die 0!" elsif zahl == 1 p "Es ist die 1!" elsif zahl == 2 p "Es ist die 2!" elsif zahl == 3 p "Es ist die 3!" elsif zahl == 4 p "Es ist die 4!" else p "Zähl doch selber, Du Kackvogel!!1!1!11eins" end
Case
Dauernd elsif tippen zu müssen, kann einen schon Nerven. Darum gibt es bei Ruby praktischerweise noch eine zweite Bedigung. Die case-Bedingung.
zahl = rand(10) case zahl when 0 p "Es ist die 0!" when 1 p "Es ist die 1!" when 2 p "Es ist die 2!" when 3 p "Es ist die 3!" when 4 p "Es ist die 4!" else p "Narf!!" end
Strings
Das ist im Prinzip das gleiche wie ganz viele elsifs. Ein normales else ist auch wieder mit dabei und es tritt dann ein, wenn die ganzen whens nicht zutreffen. Das funktioniert natürlich auch beides mit Strings.
a = rand(2) if a == 0 name = "Alex" end if name == "Alex" p "Hallo Alex!" else p "Wie heißt Du?" end
#Das selbe mit case a = rand(2) case a when 0 name = "Alex" end case name when "Alex" p "Hallo Alex!" else p "Wie heißt Du?" end
Optimiert
If-Bedingungen, welche nur eine Möglichkeit abdecken, kann man in Ruby auch folgendermaßen schreiben:
p "Hallo Alex!" if name == "Alex" #ist das gleiche wie if name == "Alex" p "Hallo Alex!" end
In diesem Fall kann man aber weder weitere elsifs noch else einbauen!
conditional expression
Die dritte und letzte Bedingungsart wird im englischen "conditional expression" genannt. Dazu fällt mir leider keine gescheite deutsche Variante ein, also belasse ich's beim Original... "Bedingungsausdruck" würde auch zu bescheuert klingen. Eine conditonal expression wird in einen anderen Befehl eingebaut. Zum Beispiel so:
p name == "Alex" ? "Hallo Alex!" : "Wie heißt Du?"
Das bedeutet folgendes: zunächst wird der Befehl p zum Ausgeben eines Textes befohlen. Dann kommt aber die "Frage", ob der String name denn auch "Alex" ist. Sollte das der Fall sein, wird der Befehl vor dem Doppelpunkt an den vorher begonnenen Befehl angehangen, also in diesem Fall "Hallo Alex", ansonsten der Befehl nach dem Doppelpunkt. Damit kann man schnelle Entscheidungsanweisungen geben. Nehmen wir mal an, der Spieler darf im Spiel zwischen zwei Parties hin und her schalten. Damit man jetzt aber nicht immer If- oder Case-Bedingungen einbauen muss, kann man conditional expressions in die Befehle einbauen.
held1hp = 100 held2hp = 800 anfuehrer = "Alex" if anfuehrer == "Alex" ? held1hp < 250 : held2hp < 250 p "Du solltest dich heilen." else p "Du bist bei bester Gesundheit." end
In diesem Beispiel wird der Anführer ermittelt und dann auf die entsprechende HP geschaut. Wenn der Spieler die Party wechselt, muß also nur der String anfuehrer auf den Namen des zweiten Helden geändert werden und schon erspart die conditional expression einem, ein zweites If einzubauen.