RGSS für Dummköpfe/Grundlage
| RGSS für Dummköpfe | |
|---|---|
| Autor | Max Jet |
| Thematik | RGSS |
| Vorraussetzungen | Programme: keine Fähigkeiten: keine |
| Andere Teile | |
Inhaltsverzeichnis
Über RGSS
RGSS (Ruby Game Scripting System) ist, eine Bibliothek für die Programmiersprache Ruby. Bei Ruby handelt es sich um eine objektorientierte Programmiersprache, die von Yukihiro Matsumoto entwickelt wurde; mehr Informationen hierzu kannst du übrigens auf (http://www.ruby-lang.org)/. finden. Meiner Meinung nach lässt sich RGSS leicht benutzen und ist ebenso leicht zu lernen, obwohl es manchmal doch etwas seltsam aussehen kann. Mittels RGSS besitzt du eine hervorragende Kontrolle über den RPG-Maker. Es ist möglich praktisch alles zu verändern oder hinzuzufügen, wobei lediglich dein Wissen Grenzen schafft.
Über das Codieren (Implementieren)
Computer sind dumm, weil sie nicht wie du denken können. Ein Computer kann nur Befehle folgen und Rechnen, du gibst ihm die Befehle und er befolgt sie. Ein Beispiel: Würdest du die Summe von 1 und 2 wissen wollen, würdest du den Computer befehligen "Bitte berechne die Summe von 1 und 2". Allerdings musst du zu einem Computer nicht nett sein und es macht überhaupt keinen Unterschied, ob du Artikel oder Konjunktionen verwendest, so wie der, die, das, und, von, mit usw. Also heißt es zum Schluss nur noch „Berechne Summe 1 und 2!“. Hm! Warum eigentlich so viele Wörter verwenden? „Berechne 1+2“, oder besser noch „1+2“! Ich meine, etwas anderes als Kalkulieren kann der Computer nicht, oder? Ein Lied wird er ja wohl kaum daraus schaffen! Einfach, oder? Eigentlich geht es nur darum, dass sämtliche Anleitungen, die du einem Computer gibst, in einem sehr einfach gehaltenem Englisch verfasst werden. Programmiersprachen setzen sich, wie menschliche Sprachen, aus Wörtern und einer Form von Grammatik bzw. Regel zusammen. Trotz allem besitzt eine Programmiersprache nur die nötigsten Wörter und Regeln. Dennoch heißt es nicht, dass du eine Sprache gelernt hast, wenn du dir die Grammatik und das Vokabular angeeignet hast. Selbst wenn ich die englische Grammatik und das vollständige Vokabular kenne, kann ich immer noch nicht daher kommen und sagen: "Dein Tee eignet sich zur Produktion von Eiern unter dem Lichte eine super Affennase." Das heißt, eigentlich kann ich das schon, aber viel Sinn macht das nicht, oder? Genauso verhält es sich mit Computern. Du kannst ihnen keine sinnlosen Befehle geben und erwarten, dass sie eine sinnvolle Aufgabe erfüllen!
Blocks
Du kannst dem Computer nur einen Befehl gleichzeitig geben, aber mehrere in Folge.
Frag den Benutzer nach einem Passwort Warte bis der Benutzer das Passwort eingibt Wenn das Passwort Korrekt ist, spiel eine Fanfare ab Wenn das Passwort inkorrekt ist, schlag den Benutzer ins Gesicht Kopier dich selbst Schick Emails mit den Kopien an alle abgespeicherten Adressen Werde ein weltbekannter Virus
O.k. vielleicht war das Beispiel ein wenig zu extrem, aber ich hoffe, die eigentliche Idee kam trotzdem rüber. Diese Gruppe codes Anleitungen formiert einen Block, bestehend aus Codes. Es klingt nicht so wichtig, ist es aber trotzdem! Früher waren Programme einfach mehrere Code-Zeilen mit mangelnder Organisation. Alles wurde in einen riesigen Block gepackt und musste der Reihe nach ausgeführt werden. Wenn ein Computer irgendwo etwas wiederholen musste, sagtest du ihm. er solle in die betreffende Zeile nach oben wechseln. Die ganze Angelegenheit wurde sehr verworren und schaffte etwas, dass wir als 'Spaghetti Code' bezeichnen.
Spaghetti Code
Zeige die Nachricht an: „Willkommen im Super Programm 007!“ Frag den Benutzer nach einer Ziffer Frag ihn nach einer weiteren Ziffer Berechne die Summe von der Ziffer aus Zeile 2 und Zeile 3 und zeige sie an Zeige die Nachricht an: „Möchten sie das Programm verlassen? (J)a / (N)ein Wenn der Benutzer J eingibt, schließ das Programm Wenn der Benutzer N eingibt, begebe dich zu Zeile 2
Jedes mal, wenn du also N eingibst, startet das Programm von neuem. Zwar zeigt das Beispiel nicht den grundlegenden Fehler dieser Verfahrensweise, doch würde es in einem größeren Programm zu einem ungeheuren Wirrwarr von „Begebe dich zu Zeile X“-Befehlen führen. Wird der Code zu lang, wird es schwierig für dich zu folgen und schließlich „Bugs“, sprich Fehler im System zu erkennen und zu korrigieren.
Funktionen
Nicht verzagen, denn um dieses Problem zu beheben gibt es Funktionen! Manchmal könnte man Funktionen auch Subroutinen oder Methoden nennen (Ruby nennt sie so, obgleich es nicht sehr zutreffend ist). Eine Funktion ist ein Block aus Codes, den du aufrufst (call). Besitzt du eine Funktion, also den Code Block, rufst du es so oft auf, wie du möchtest. Du musst nicht länger in ein- und demselben Block verharren und, wie Super Mario, hin- und her springen oder alles wieder neu schreiben. Funktionen organisieren dein Programm und machen das Leben leichter.
Ein Beispiel
Name der Funktion: Summe Funktion bedient sich zweier Werte und nennst sie Nummer1 und Nummer2 >>Funktion beginnt hier:<< Berechne die Summe von Nummer1 und Nummer2 und zeige sie an >>Funktion endet hier<< Rufe die Funktion Summe mit Wert 1 und 2 auf Rufe die Funktion Summe mit Wert 10 und 5 auf Rufe die Funktion Summe mit Wert 29 und 7 auf
Das Programm würde 3, 15 und 36 anzeigen, ohne das wir, gemäß dem ersten Beispiel stets das ganze Programm aufrufen, sondern jetzt für die Berechnungen einfach immer wieder die Funktion arbeiten lassen. Die Arbeit wird einfach schön und übersichtlich aufgeteilt Im Falle eines Spiels hast du jetzt zum Beispiel mehrere Funktionen, zum Beispiel eine Zeichnung anzuzeigen, Die Eingabe abzufragen (also welche Taste du drückst) und entsprechend die Zeichnung zu bewegen. (Anm. von Max Jet: „Zum leichteren Verständnis das Beispiel geändert.“)
Ein 2.Beispiel
Aufrufen Zeichnung Aufrufen Eingabe abfragen Aufrufen Position berechnen Begebe dich zu Zeile 1
Jetzt hast du ein Spiel (sozusagen). Es soll euch einfach nur noch einmal zu Gemüte führen, dass eine Funktion ein Block aus Codes ist, welche beliebige während einer Operation aufgerufen werden kann. Ihr teilt euch die Arbeit einfach auf, ohne alles in einem gigantischen unübersichtlichen Kasten bzw. Block zu haben. RGSS nennt Funktionen Methoden „Methode“, in der normalen Programmiersprache aber heißen sie Funktionen. Also „Methods“ und Funktionen sind ein und dasselbe!!
Variablen
Variablen sind Orte an deinem Computer um Informationen zu speichern. Sie sind eine Art von Schrank, in den du Sachen hineinsteckst und du kannst dich immer wieder an sie wenden, indem du die Nummer des Schrankes sagst. Zum Beispiel gib mir die Information in Schrank Nummer 7 und im Schrank Nummer sieben befindet sich eine Zahl. Erinnere dich an das vorherige Beispiel mit den Summen. Ja, streng mal deine grauen Zellen an, „berechne Summe von Nummer1 und Nummer2“! Nummer1 und Nummer2 sind Teile einer Summe gewesen. Der Block diente dazu eine Summe von zwei vollkommen beliebigen Zahlen zu berechnen, ergo können Nummer1 und Nummer2 alle Zahlen dieser Welt sein, wie 3, 7, 14, 578 usw. (Allerdings nicht 3^2, weil das eine Rechnung ist, die erst gemacht werden muss und auch nicht 6:3!) Nur ganze Zahlen halt. Wir tun einfach zwei ganze Zahlen in Nummer1 und Nummer2. Eigentlich sind es immer noch Variablen, aber sie verhalten sich, wie die eigentlichen Zahlen. Immer noch nicht verstanden? Studenten haben Identifikationsnummern; IDs. Meine ID lautet 1921 und wenn ich ein Examen schreibe, soll ich einfach nur noch meine ID Nummer aufschreiben. Sie interessieren sich nicht für meinen Namen oder meine Anschrift. Alles ist in dieser ID Nummer enthalten. Alle Informationen über mich, können sie über diese ID Nummer herausfinden und wenn ich die Schule verlasse, kriegt ein anderer diese Nummer und sie können über ihn alles mittels dieser Nummer erfahren. Die ID Nummer bleibt, die Informationen wechseln, sie sind variabel. Eine Variable ist also eine ID Nummer mittels derer du Infos kriegen kannst. Infos wechseln, die Variable bleibt. Ein Beispiel von Max Jet, falls ihr es immer noch nicht kapiert habt. Ihr spielt ein Rpg. Euer Held hat HP. HP ist eine Variable. Je nachdem ob ihr verletzt werdet oder Potions schluckt fällt oder steigt eure HP. HP ist immer das gleiche. Sie zeigt eure Gesundheit an, ob ihr 20 oder 430 habt. Der Wert ändert sich, die HP bleibt was sie ist. HP ist eine Variable. Ein Revenge Zauber rechnet eure Maximale HP 9999 – HP, also die Variable. Die Lösung dieser Rechnung beträgt den Schaden, den ihr euren Gegner zufügt. Temporäre HP lässt sich ändern und damit ändert sich auch der Schaden, des Revenge Zaubers. Alles klärchen?
Zahlenfelder
In einer Stadt gibt es sehr viele Leute, die John Smith heißen, was dazu führt, dass die Leute immer sehr verwirrt werden, wenn jemand „Hey John Smith!“, ruft, weil dann immer hundert Leute auf einen gucken. Das könnte sich unter Umständen zu einem großen Problem entwickeln. Der Bürgermeister John Smith wird verhaftet, weil er John Smith angeblich umgebracht haben soll, allerdings ist der Mörder ein dritter John Smith gewesen. Aus dem Grund wurde der Bürgermeister wütend und beschloss etwas zu tun. Er entschied, dass alle John Smiths Nummern haben sollten. Der Bürgermeister wurde zu John Smith [1], der Polizei Kommissar zu John Smith [2] usw.......und so wurden es 99999 John Smiths. Schließlich lebten die Menschen glücklich und zufrieden damit das Problem der John Smiths ein für allemal beseitigt zu haben. Beim Programmieren hast du mehrere Situationen in denen Variablen mit ähnlichen Funktionen und Namen auftauchen. Du könntest Variablen gebrauchen um die Skills bzw. Fähigkeiten deines Helden zu katalogisieren . Hätte ein Hero allerdings hundert Skills, wäre es mehr als kompliziert für all diese eine einzelne Variable zu erschaffen. Wir nutzen also Zahlenfelder, also eine Variable, die jetzt mehrere Werte hortet. Sie erlauben dir leicht an Werte zu kommen indem du dich mit einer Nummer an sie wendest (Anm. von Max Jet: „Ich weiß das klingt komisch“). Man nennt diese Nummern auch Index.
Kontrollfluss
Dein Programm wird die Dinge oft durchsuchen müssen, Entscheidungen fällen oder mit dem Benutzer interagieren, manchmal ein und dieselbe Aktion wiederholen.. Erinnerst du dich an das „show choices“ Kommando im Rpg-maker 2000? Abhängig von den Auswahlmöglichkeiten gibst du dem Programm ein paar auszuführende Befehle. Im Spiel siehst du dann Auswahlmöglichkeiten die zu unterschiedlichen Effekten führen.
Message Box "Hallo ich verkaufe Katzen, bist du interessiert?" Choices: - Ja Shop Menü öffnen - Nein Message Box "Willst du nichts kaufen? Zu schade!"
Ohne „choices“ wäre der Benutzer einfach dazu gezwungen das „Shop“ Menü aufzurufen, egal ob er denn nun etwas kaufen will, oder nicht. Ein anderes Beispiel ist der allseits bekannte „conditional branch“ (das wenn, dann Kommando) im RPG Maker. Damit kann man bestimmte Ereignisse nur aufrufen, wenn ein bestimmtes Item enthalten ist, ein Schalter aktiviert, oder anderes. Es eignet sich auch um bestimmte Parameter oder Eigenschaften des Spiels zu überprüfen. In Programmiersprachen kontrollierst du den Fluss der Codes. Anfangs kontrollierten wir ob das Passwort korrekt ist, oder nicht. Auch erzeugten wir durch eine Schleife, also immer wieder einen Sprung zur oberen Zeile einen Effekt hundert mal, ohne ihn derart oft befehligen zu müssen. Später mehr dazu.
Objekte
Unsere Welt ist objektorientiert. Sie ist eine Zusammensetzung von Dingen, die bestimmte Aufgaben erfüllen und miteinander interagieren. Ein Mensch ist ein Objekt, welches einen Namen ein Alter und einen Wohnort besitzt.. Er kann laufen, essen, denken, sterben und andere Dinge. Ein Apfel ist ebenfalls ein Objekt; (Anm. von Max Jet Panzergrenadiere auch!) und besitzt Eigenschaften, wie Größe, Farbe, Sorte, Wassergehalt und anderes. Ein Apfel kann schimmeln, vom Baum fallen etc. Wichtiger ist, dass ein Mensch mit einem Apfel interagieren kann, indem er ihn wirft, isst, oder zubereitet. Computer versuchen einfach die logischen Grundkonzepte unserer Welt ohne die metaphysischen Gepflogenheiten zu imitieren. Ein Computer imitiert eine arme vereinfachte Welt mittels Scripts. Das ist auch ein eigentlicher Sinn von Spielen. Sie versuchen die Welt zu imitieren, setzen Charaktere mit Eigenschaften ein, mit Möglichkeiten mit ihrer Umwelt zu interagieren, zu kommunizieren, so weit es ein Programm, in diesem Falle das Spiel erlaubt. Je aufwendiger ein Programm, desto mehr Feinheiten, kann diese imitierte Welt beherbergen. Erkennst du die Verbindung? Je stärker dieses Programm der Welt ähnelt, die es imitiert, desto besser und präziser ist das Programm an sich. Diese logische Interaktion von Objekten ist der Sinn einer objektorientierten Programmiersprache. Im Programmieren ist ein Objekt. Jedes Objekt hat bestimmte Eigenschaften, genannt „properties“ (Variablen, die das Objekt beschreiben) und Methoden, die mit diesen Eigenschaften arbeiten, genannt Funktionen. Ein Objekt kombiniert Variablen und Methoden. Objekte können andere Objekte erben (Anm. Max Jet: „klingt falsch, aber seht selbst nach, was inherit bedeutet!“)(Ein Mensch ist ein Säugetier (Nicht Affe RPG!!!!) ein Apfel eine Frucht.) und mit ihnen interagieren. In der RGSS ist fast alles ein Objekt. Des öfteren wirst du Klassen erschaffen und existierende benutzen, wirf einen Blick auf den Scripteditor. Jede Seite beginnt mit „class“. Klassen werden später noch einmal ausführlicher behandelt, also mach dir keine Sorgen.
Das erste Programm
Müde von den ganzen Erklärungen? Willst du etwas selbst ausprobieren? Öffne den RMXP erschaffe ein Event und wähle eine Grafik aus, Doppelklick die Kommando Liste (die große weiße Box), begib dich zur letzten Seite (Nummer 3) und wähle die letzte Option „Script“. Tipp nun in die Textbox
# Ich bin ein sinnloser Kommentar print 'Hallo Welt!'
Klick o.k und ein weiteres mal auf der hinteren Seite. Starte dein Spiel, begib dich zum Event und spreche es an. „Hallo Welt“ erscheint. Cool was? Was haben wir also getan? Die erste Zeile (# Ich bin ein sinnloser Kommentar) ist ein.... nun sinnloser Kommentar. Kommentare werden vom Ausführer (RMXP) grundsätzlich ignoriert. Nur du kannst sie lesen, wenn du den sogenannten „source code“ öffnest. # < hiermit startest du einen Kommentar, also comment und schreibst daneben den Text, den du willst. (Anm. von Max Jet : „Einige Scripts sind voll von unlesbaren japanischen Zeichen, Überresten der comments der Programmierer. Beim ersten Blick auf den Scripteditor kann das unnötigerweise etwas verwirren. Mich hatte es damals entmutigt die RGSS Sprache zu lernen!) Bleib aber in der gleichen Zeile! Kommentare sind für den Programmierer bestimmt, sie sind seine Notizen, damit er nicht vergisst, was die Funktion oder der Programmablauf macht. Die nächste Zeile (print 'Hallo Welt!') zeigt eine Message Box mit dem entsprechenden Text. Das Kommando „print“ (das eigentlich eine Methode ist) zeigt den Text an. Diese Zeichen hier ' ', sind ungemein wichtig, damit der Computer sieht, wir geben ihm keine Anweisung, sondern nur einen unveränderlichen, nicht auszuführbaren Text, mit dem er grafisch arbeiten soll. Sie zeigen lediglich, dass es sich nicht um einen Code handelt. Erinnere dich daran das jeder Code in einer anderen Zeile stehen muss! (es gibt jedoch Wege das zu umgehen!)
Schlussfolgerung
Für heute ist das alles. Dieses Tutorial sollte dir nur einen kleinen Einblick in die Welt der Programmiersprache geben. Du solltest nicht sofort alles verstehen, sondern zuerst nur wissen um was es in RGSS eigentlich geht, Lies die Zusammenfassung und beschäftige dich mit dem, was dir noch unklar ist. In naher Zukunft werden wir auf alles noch einmal näher eingehen und echte Codes verfassen. Bis dann!
Zusammenfassung
- Computer sind dumm. Sie tun nur das, was du ihnen sagst und stehen dämlich herum, wenn sie dich nicht verstehen. Du musst ihnen korrekte Anweisungen geben, bestehend aus Schlüsselwörtern und einer korrekten „Grammatik“
- Blocks fassen Codes (Instruktionen), die zusammen hängen in eine Gruppe
- Eine Funktion ist ein Block, der in einem Code aufgerufen wird
- Variablen beinhalten Werte, mit denen gearbeitet wird.
- Ein Zahlenfeld „array“ ist eine Variable, die mehrere Werte umfasst
- Programmfluss kann kontrolliert werden, durch Stand und Schleifen
- Objekte sind Dinge, die Daten umfassen (Variablen) und Methoden die mit dem Objekt arbeiten (Funktionen).
- Wir benutzen # um Kommentare (comments) zu schreiben. Sie sind deine Notizen! – „print“ zeigt eine Nachricht an. (Leider nicht mehr)