heyey
Weitere Script-Tutorials von mirFlipelyFlip's Scripting Tutorial 1 - GrundkursFlipelyFlip's Scripting Tutorial 2 - "for..in.."-SchleifenVorwortHeute sind wir wieder alle froh, denn es geht weiter mit dem Script-Tutorial (:
Scripting Lesson 1: for .. in .. SchleifeJetzt kommen wir zu etwas, was in der Scriptwelt recht geläufig ist. Die "for .. in .."-Schleife.
Diese finden wir nahezu überall in den Standardscripts wenn wir aufmerksam danach suchen. Was bewirkt jedoch dieses kleine etwas?
Ganz einfach. Nehmen wir mal einen Apfelbaum. Auf dem Apfelbaum sind zum Beispiel 120 Äpfel oben, jedoch weiß nur der Apfelbauer, in welchen Äpfel die Würmer sind. Jetzt wollen wir aber auch noch wissen, wo die Würmer alle drinnen sind, damit wir ja nicht so einen Apfel zum essen bekommen. Klingt doch logisch, dass wir den Bauern fragen, ob er es uns verrät. Das einzige was er sagt:
for wurm_in_apfel in 1..Äpfel_am_Baum
if wurm_enthalten.include?(wurm_in_apfel)
p "Der hat'n Wurm"
else
p "Der hat keinen Wurm"
end
end
Er wird uns nun genau sagen, in welchem Apfel der Wurm drin ist und in welchem nicht, ist doch nicht schlecht oder?
Aber ihr habt nun bestimmt 2 weitere kleine Fragen an mich. Ich kann mir auch schon denken welche

erste Frage:
1..Äpfel_am_Baum
Wieso wurde das hier verwendet und wofür sind die 2 Punkte?
Nehmen wir es mal so her:
Äpfel_am_Baum = 120
jetzt hat der Apfelbaum genau 120 Äpfel am Baum. Der Grund warum ich nun "1..Äpfel_am_Baum" geschrieben habe, ist der, dass wir ja wissen wollen in welchen Äpfeln der Wurm drin haust, nicht ob im 120sten Apfel der Wurm drinnen ist.
Die ".." bedeuten nur, dass er von dem Wert 1 bis zu Wert 120 alle zahlen Einsetzen soll.
zweite Frage:
if wurm_enthalten.include?(wurm_in_apfel)
Was bedeutet diese Zeile genau?
Naja irgendwo muss der Bauer ja auch definiert haben, wo die Würmer drinnen sind. Das hat der sich alles auf dem Block "wurm_enthalten" aufgeschrieben. Das könnte dann zum Beispiel so aussehen:
wurm_enthalten = [15, 22, 43, 88, 92, 119]
Jetzt geht der Bauer aber von Apfel zu Apfel und muss dir sagen ob der Apfel nun einen Wurm hat oder nicht. Das geschieht durch den Befehl: ".include?(index)" (index wird durch bestimmte Variablen ersetzt, wie bei uns im Beispiel durch wurm_in_apfel).
Scripting Lesson 2: Erstellen eines ArraysSodale, jetzt wissen wir also was der Bauer alles weiß und er wird uns auch bei jedem Apfel sagen ob da ein Wurm drin is oder nicht. Jedoch werden wir aber nicht wirklich sagen Können ob das nun der Apfel 112 war oder der Apfel 55. Da wir ja recht faul zum Zählen sind, soll er uns doch einfach nur die Äpfel angeben, die nen Wurm haben und die Äpfel die keinen Wurm haben. Doch wie gehen wir da am besten vor?
Ganz einfach. wir nehmen unser Standardgerüst von vorher wieder her und erweitern es um die paar Dinge die wir oben besprochen haben.
Äpfel_am_Baum = 120
wurm_enthalten = [15, 22, 43, 88, 92, 119]
for wurm_in_apfel in 1..Äpfel_am_Baum
if wurm_enthalten.include?(wurm_in_apfel)
p "Der hat'n Wurm"
else
p "Der hat keinen Wurm"
end
end
Nun wenn wir das Ablaufen lassen würden, würden wir 120 mal ein Fenster erhalten in dem entweder "Der hat'n Wurm" oder "Der hat keinen Wurm" enthaltet.
Aber wir wollen ja nicht mitzählen wie oft das auftaucht, sondern wollen wissen, welche Äpfel denn nun genau einen Wurm drin haben.
Holen wir uns mal etwas Hilfe. Wir müssen zwei leere Arrays erstellen. Den ersten nennen wir mal einfach wurmapfel und den zweiten keinwurm.
dann sieht es ja wohl so aus:
Äpfel_am_Baum = 120
wurm_enthalten = [15, 22, 43, 88, 92, 119]
wurmapfel = []
keinwurm = []
for wurm_in_apfel in 1..Äpfel_am_Baum
if wurm_enthalten.include?(wurm_in_apfel)
p "Der hat'n Wurm"
else
p "Der hat keinen Wurm"
end
end
Das war nun der erste Schritt den wir machen. Nun brauchen wir eine Variable die langsam hoch zählt, damit wir auch den genauen index des Apfels wissen. Diese Variable muss aber vor der "for.. in .."-Schleife liegen, da wir unsere Werte sonst nur überschreiben würden, aber das wollen wir ja nicht (:
Wir erweitern den Code mal um diese Variable und entfernen die blöden Aussagen des Bauern.
Äpfel_am_Baum = 120
wurm_enthalten = [15, 22, 43, 88, 92, 119]
wurmapfel = []
keinwurm = []
index = 0
for wurm_in_apfel in 1..Äpfel_am_Baum
if wurm_enthalten.include?(wurm_in_apfel)
else
end
end
damit wir aber bei jedem Apfel einen anderen Indexwert haben, müssen wir den doch hochzählen. Wir wollen ja nix überschreiben. Ich glaube wir packen es am besten unter die "for..in.."-Schleife. Da ist es gut aufgehoben.
Äpfel_am_Baum = 120
wurm_enthalten = [15, 22, 43, 88, 92, 119]
wurmapfel = []
keinwurm = []
index = 0
for wurm_in_apfel in 1..Äpfel_am_Baum
index += 1
if wurm_enthalten.include?(wurm_in_apfel)
else
end
end
Was haben wir den da gemacht? D:
Richtig, wir zählen nun die Variable index langsam hoch. Bei jedem Durchlauf, zählt er um 1 weiter. Damit wir auch davon einen Nutzen haben, werde ich die ultimative Hilfe einschalten. Die Makerhilfe!
Scripting Lession 3: Die MakerhilfeFür viele ist sie total nutzlos. So auch für mich. Anfangs jedoch

Als ich scripten lernte, wurde mir bewusst, dass die Makerhilfe doch sehr hilfreich sein kann, wenn man viele Dinge nicht weiß wie sie im Script funktionieren, oder bestimmte Scriptbefehle sucht. Vor allem hat die Hilfe meistens auch noch schöne Beispiele parat um zu zeigen wie die einzelnen Dinge richtig funktionieren. Ich sehe große Vorteile darin und empfehle euch wärmstens beim Scripten auch mit der Makerhilfe zu arbeiten. Sie ermöglicht euch ein schnelleres lernen von RGSS und beschert euch auch schneller Erfolgsgefühle als über den harten Weg alles zu versuchen bis man verzweifelt aufgibt, weil einem keiner helfen kann.
Aber nun zurück zu unserem eigentlichen Thema. Wir wollen doch wissen, wie wir einen Array um Werte erweitern, obwohl der Array leer ist. Wenn wir im Maker F1 drücken, erscheint die Hilfe rasch und wir gehen auf den Tab Index. Siehe da, an erster Stelle haben wir Arrays. Wir wählen diesen Punkt aus und lesen uns etwas durch, bis wir das Richtige gefunden haben. Englischkenntnisse sind von Vorteil

Kurze erklärung zu manchen begriffen aus der Hilfe auf die ihr stoßen werdet:
self = Name des Array/Hash/Moduls
other = Anderer Name eines Arrays/Hashs
nth = Wert/Index
val = Wert
start = An diesem Element/Wert soll begonnen werden
length = Länge (wird aber so gut wie nie benutzt beim Array, nicht zu verwechseln mit der Auflistungsart .length bei Arrays!!)
pos = Die Position bzw. Index des Wertes oder Elements des Arrays
obj = Objekt, bzw selbige wie val
So nun haben wir hoffentlich das richtige gefunden was wir brauchen oder?
Dann reicht es doch nurnoch, wenn ich euch sage, dass der Wert index, den wir schön brav hochzählen in eine eckige Klammer muss (:
Gut, dann können wir ja weiter machen mit der nächsten Lesson
Scripting Lesson 4: Letzte AnpassungenThehe, hier werde ich euch genauso viel bringen wie beim Punkto 3. Ich sag was ihr machen müsst und verate euch auch wohin damit, aber ich werde euch nicht verraten wie die funktion dafür heißt. Wozu habt ihr denn die Makerhilfe?
Wenn wir uns nun am ende des Ablaufs die beiden arrays "wurmapfel" und "keinwurm" ausgeben lassen, haben wir bei beiden das tolle Wörtchen "nil" dabei. Das wollen wir nun weg machen, da der Bauer uns ja sagt in welchen der Wurm drin ist und in welchen nicht. Der sagt nicht: "In 1 ist kein Wurm drin, in nil ist ein Wurm drin". Ihr versteht doch was ich meine

Da gibt es eine hübsche Methode dafür. Die steht auch schön in der Makerhilfe beschrieben, einfach überfliegen hilft da sogar schon (:
Was ich euch noch als kleinen Tipp gebe, überall wo kein self steht wird wie folgt gearbeitet:
arrayname.methode
Merkt euch das. Der Punkt zwischen den Namen ist sehr wichtig, aber keine Sorge, man zeigt es auch immer im kleinen weißen Fensterchen bei den Punkten vor wie es funktioniert und wie es sich verhält (:
Sobald ihr das habt, könnt ihr den Maker starten und gucken was ihr als Ergebnis erhalten habt.
Wenn ihr damit fertig seid, könnt ihr mir gern eine PN schreiben mit eurer Lösung (:
Bei Fragen steh ich euch gern zur Verfügung (:
Wenn man die Aufgabe richtig gelöst hat und das meiste selbst gemacht hat, dann kann man sich sicher sein, dass man diese "for..in.."-Schleifen versteht und auch später in größeren Scripts anwenden kann (:
lg flip