RGSS für Anfänger/Schleife

Aus Scientia
Wechseln zu: Navigation, Suche
{{{TITEL}}} {{{LEVEL}}}
Thematik {{{THEMA}}}
Vorraussetzungen Programme: {{{TOOL}}}

Fähigkeiten: {{{VOR}}}


Schleife

Nehmen wir mal an, ich möchte 50 Zufallszahlen zwischen 1 und 250 in einem Array speichern. Dazu könnte ich natürlich 50 mal arr1[n] = rand(250) schreiben, aber die Mühe macht sich ja keiner. Dazu haben ein paar Checkerpansen die Schleifen erfunden. Eine Schleife tut etwas immer und immer wieder. In Ruby gibt es drei Arten von Schleifen. Die for-Schleife, die while-Schleife und die loop-Schleife.

Loop

Loop vergessen wir gleich mal wieder, da es einfach nur ekelig ist, das zu verwenden. Wer Java kann, der wird wissen, daß niemand dort mit label und goto arbeitet. Und ähnlich verhält es sich in Ruby mit loop. Der Vollständigkeit halber schreibe ich es aber dennoch dazu. (Fast nur wichtig in Scene.)

loop do 
  p "foo" 
end

Diese Schleife würde immer und immer wiederholt. Sie hat kein Ende. Ich empfehle übrigens nicht, das Ding in den RMXP einzugeben, denn das könnte euren PC abschießen. Um einen loop zu beenden, wird break if benutzt.

a = 1 
loop do 
  p "foo" 
  a += 1 
  break if a > 5 
end


In jedem Durchlauf wird break if abgefragt. Wenn Variable a jetzt größer als 5 ist, dann wird der loop gebrochen. Also wird fünfmal foo ausgegeben, dann ist Schicht im Scacht. Aber wie schon erwähnt ist loop unschön. Wir haben ja noch for und while.

for

for i in 1..5 
  p "foo" 
end

Diese Schleife macht das gleiche wie der loop oben. Rubys for-schleife ist im Gegensatz zu der von Java oder C allerdings einfach nur ein wenig seltsam. Die Syntax muß man erstmal auf sich wirken lassen. Es funktioniert so:

for <laufvariable> in <startwert>...<endwert>.

Hier wird also i am Anfang der Schleife mit 1 besetzt, dann wird foo ausgegeben, dann wird i um einen hochgezählt, wieder foo ausgegeben ... und das endet, wenn i = 5 ist.

Mit der for-Schleie kann man wunderbar Arrays verarbeiten:

array = [1,2,2,true,"Baum"]
for i in array
  p i
end

While

Die dritte und meiner Meinung nach schönste Möglichkeit ist while.

i = 1 
while i <= 5
  p "foo" 
  i += 1 
end


Auch hier wird fünfmal foo ausgegeben. Da die Bedingung hier eine Laufbedingung ist, also die Schleife läuft, während sie zutrifft (anders als bei loop, wo es eine Abbruchbedingung war), muß hier i <= 5 stehen. Würden wir i < 5 schreiben, würde nur viermal foo ausgegeben werden. Alternativ können wir i auch mit dem Wert 0 starten lassen und 5 nehmen. So mache ich es für gewöhnlich.

Beispiel

Aber kommen wir zurück zu umserem Beispiel mit den 50 Zufallszahlen im Array. Dazu benutzen wir ebenfalls eine while-Schleife.

While

i = 0 
zahlen = [] 
while i < 50 
  zahlen[i] = rand(251) 
  i += 1 
end 
p zahlen 
p zahlen.length


Gehen wir den Code mal von oben bis unten durch. Zunächst geben wir i den Startwert 0. Dann definieren wir ein leeres Array. Wenn wir ein leeres Array machen, heißt das, daß wir es später einzeln füllen möchten. Dann kommt die while-Schleife, die solange läuft, wie i kleiner als 50 ist. Da i mit 0 beginnt heißt das also, sie läuft 50 mal durch. Dann wird dem Array an der Stelle mit dem index i eine Zufallszahl zwischen 0 und 250 zugewiesen. Die rand() Funktion ist bei Ruby gleich mit dabei. Bei ihr muß man beachten, daß die Zahl in den Klammern nicht mitgenommen wird, sondern das quasi die höchstmögliche Zahl + 1 ist. Schließlich erhöhen wir i um 1 und beenden die Schleife. Wenn sie durchgelaufen ist, geben wir das Array aus und danach dessen Länge um zu sehen, ob's auch echt 50 sind. Und wir sehen eine Reihe von 50 zufälligen Zahlen. Das ganze kann auch mit einer for- und einer loop-Schleife gemacht werden. Ich finde beide Lösungen nicht sehr gut, aber ich werde sie dennoch mal hier hinschreiben, falls jemand das bevorzugen sollte.

# Das ganze Gedöns mit for 
zahlen = [] 
for i in 0...50
#Bei 3 Punkten wird der letze Wert nicht mitberechnet in der Schleife.
  zahlen[i] = rand(251) 
end 
p zahlen 
p zahlen.length
# Und mit dem ekeligen loop-Dings 
zahlen = [] 
i = 0 
loop do 
  zahlen[i] = rand(251) 
  i += 1 
  break if i > 49 
end 
p zahlen 
p zahlen.length

Links

Vorlage:RGSS-Tut-Ram