[Monkey] Tutorial: kostenloses Monkey für Anfänger

Übersicht Andere Programmiersprachen FAQs und Tutorials

Neue Antwort erstellen

Midimaster

Betreff: Tutorial: kostenloses Monkey für Anfänger

BeitragMo, Dez 24, 2012 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Dies ist ein Tutorial für Monkey Anfänger oder Umsteiger von BlitzBasic nach Monkey. Es erklärt wie man die kostenlose Version von Monkey installiert und unter HTML5 startet. Die Systax mit Klassen und Events sowie die Besonderheiten von Monkey gegenüber Basic sind das Hauptthema. Eingaben mit Tastatur und Maus, Einbinden von Modulen von anderen Usern wird ebenfalls erklärt.

(Ich bitte alle, sich mit eigenen Einträgen rauszuhalten und dafür lieber den Thread "Kritik an Midimaster-Tutorials" zu nutzen. Dieses Tutorial soll den Anfänger möglichst durch keine Diskussionen irritieren.) Kritik hier hin: Kritik-Thread

Allen Anfängern lege ich wärmstens ans Herz dieses Tutorial durchzuarbeiten. Es spart euch viele Fehler in späteren Programmen. Fragen von Hilfesuchenden bitte ins Monkey-Beginners-Corner ( https://www.blitzforum.de/forum/viewforum.php?f=50 ), aber auf keinen Fall hier hin posten!

Das Tutorial ist didaktisch konzipiert aufgebaut. Die Lektionen bauen aufeinander auf. Die Befehle werden nie vollständig erklärt, sondern immer nur soweit man es für diese Lektion unbedingt braucht.

Kapitel I: kostenloses Monkey

Kapitel II: Grundgerüst einer lauffähigen App

Kapitel III: Schon bewegt sich was....


Kapitel IV und weitere folgen in Kürze...
  • Zuletzt bearbeitet von Midimaster am Mo, Jun 03, 2013 15:22, insgesamt 2-mal bearbeitet

Midimaster

Betreff: kostenloses Monkey

BeitragMo, Dez 24, 2012 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Kapitel I: kostenloses Monkey

Die Programmiersprache Monkey ist das neueste Produkt von Mark Sibly, von dem auch die anderen Programmiersprachen hier stammen: BlitzBasic, Blitz3D und BlitzMax. Der Vorteil von Monkey ist, dass sich Programme, die damit geschrieben wurden es sich auf sehr vielen Target (=Geräten) starten lassen: PC, MAC, Android-Smarthpones und Apple Iphones, aber auch Flash, Html5 oder Xbox und Playstation.

Entwickelt wird auf einem Windows-PC oder auf einem Max OsX Rechner. Das Eregebnis wird auf das Zielgerät übetragen und läuft dort ohne zusätzliche Änderungen. so ist es möglich tatsächlich mit Monkey Apps auf GooglePlay zu veröffentlichen.

Wer erste Schritte mit dieser Sprache unternehmen will, braucht zunächst kein Geld ausgeben, sondern kann sich die kostenlose Version Monkey Demo V63 von der Homepage des Entwicklers herunterladen und installieren:

Download: http://www.monkeycoder.co.nz/f...Demo63.zip

oder hier:

Homepage: http://www.monkeycoder.co.nz/Store/_index_.php

Das ZIP-File wird heruntergeladen und in ein Verzeichnis extrahiert. Danach kann man bereits die Datei Monkey.Exe in diesem Verzeichnis starten.

Die kostenlose Demo-Version liefert nur das Target HTML5 mit. Das bedeutet, dass sich nur Programme entwickeln lassen, die in einem Browser laufen. Für den Anfänger ist dies kein wirklicher Nachteil, da so auf fast jedem Computer sofort ein Austesten der Programme möglich ist. Als Browser sollte möglichst Firefox verwendet werden. Bei ihm ist HTML5 am zuverlässigsten integriert. Auf einem Internet Explorer laufen HTML5 Programm erst nach einigen Modifikationen. Mein Tipp: Spar dir Ärger, nutze Firefox.

Ein weiterer "Vorteil" des Target HTML5 liegt in seiner "Geschwindigkeit". HTML5 ist das langsamte aller Targets: Wenn Dein Code als HTML5 zufriedenstellend läuft, dann wird er wahrscheinlich auf allen anderen Target noch besser performen.

Wir starten die Monkey.EXE und es öffnet sich die Entwicklungsumgebung mit ihren 3 Teilfenstern. In das größte Fenster schreiben wir später den Code. Das rechte Fenster führt uns zur Befehlsübersicht. Das untere Fenster dient für Fehlermeldungen etc...

Bevor wir eine erste Zeile schreiben können, legen wir ein Projekt mit dem Menüeintrag FILE-NEW an. Dein Spiel erhält hier bereits seinen Namen. Ich würde vorschlagen auf der Festplatte "C" einen Ordner "MONKEY" anzulegen und darin wieder einen Ordner, der genauso heißt wie dein Spiel. Darin legst Du nun die NEW Datei an, die ebenfalls den Namen deines Spiels erhält, also so:

Code: [AUSKLAPPEN]
C:\Monkey\MyGame\MyGame.monkey
  • Zuletzt bearbeitet von Midimaster am Mo, Dez 24, 2012 15:53, insgesamt einmal bearbeitet

Midimaster

Betreff: Grundgerüst einer lauffähigen App

BeitragMo, Dez 24, 2012 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Kapitel II: Grundgerüst einer lauffähigen App

So sieht das absolut kürzeste lauffähige Monkey-Programm aus:
BlitzMax: [AUSKLAPPEN]
Strict
Import mojo

Class Game Extends App

Method OnCreate%()
SetUpdateRate 15
Return 0
End

Method OnUpdate%()
If KeyHit(KEY_ESCAPE) Then Error ""
Return 0
End

Method OnRender%()
Cls
Return 0
End

End

Function Main%()
New Game
Return 0
End



Noch bevor ich erkäre, was die Zeilen bedeuten, kannst Du es bereits mit der Taste F5 starten und beobachten, was passiert:

Zunächst überprüft Monkey die korrekte Syntax unseres Codes, dann übersetzt es unseren Code in die Sprache HTML5, dann startet es einen "HTTP-Server" und den Firefox Browser, der sich das das fertige "Spiel" von diesem "HTTP-Server" holt. Zu sehen ist leider im Spiel nur ein weißes Browserfesnter, weil wir ja auch noch keine "Spielhandlung" einprogrammiert haben.

Browser holen ja Internetseiten normalerweise von einem "Server" draußen im weltweiten Web. Damit dies nun auch mit unserem Spiel gelingt, startet Monkey diesen ominösen "HTTP-Server", der dem Browser einen Server vorgaukelt und ihm so das Spiel "unterschiebt". Wie es funktioniert musst Du auch gar nicht verstehen, Hauptsache ist, das Spiel gelangt ins Browserfenster.

Alle Codezeilen im Beispiel oben sind übrigens PFLICHT in all deinen weiteren Programmen. Am besten startest Du also jedes Projekt mit Kopieren dieser Vorlage.

Nun zu den Erklärungen der Code-Zeilen:
BlitzMax: [AUSKLAPPEN]
Strict
Import mojo


Strict zwingt dich sauber zu coden und findet im Gegenzug sehr viele deiner Fehler.
Import mojo ein Modul von Monkey das IMMER eingebunden werden muss.



BlitzMax: [AUSKLAPPEN]
Class Game Extends App

End

Function Main%()
New Game
Return 0
End


Monkey Programme benötigen immer eine Function Main(). Dort will Monkey den Verweis auf den Haupt-Code ("Game") finden. Dieser Hauptcode ist eine Klasse, die die Klasse APP erweitert. Das hört sich jetzt komplizert an, kann dir aber auch völlig wurscht sein. Hauptsache du schreibst die Zeilen genauso in Deinen Code wie sie hier stehen. Natürlich könnte man den Namen "Game" in "Irgendwas" ändern, müsste dann aber den Code entsprechend anpassen:

BlitzBasic: [AUSKLAPPEN]
Class Irgendwas Extends App

End

Function Main%()
New Irgendwas
Return 0
End



Wie Du siehtst hast Du zunächst nur wenig Freiheiten. Auch die folgenden drei Methoden MÜSSEN in deinem Spiel enthalten sein. Halte Dich genau an die Schreibweisen. Monkey unterscheidet zwischen Groß- und Kleinschreibung und eine Nachlässigkeit hier würde zu einem Programmfehler führen. Dies gilt auch für Variablennamen, etc...

BlitzMax: [AUSKLAPPEN]
	Method OnCreate%()
SetUpdateRate 15
Return 0
End

Method OnUpdate%()
If KeyHit(KEY_ESCAPE) Then Error ""
Return 0
End

Method OnRender%()
Cls
Return 0
End


Diese drei Funktionen werden später von dem Gerät auf dem dein Spiel laufen soll automatisch aufgerufen. Deshalb müssen sie auch vorhanden sein! OnCreate() wird nur einmal beim Starten der App aufgerufen. OnUpdate() wird 15x pro Sekunde immer wieder angesprungen. OnRender() wird immer dann angesprungen, wenn das Gerät meint, der Bildschirm sollte neu gezeichnet werden. Monkey Programme und Apps erwarten von Funktionen immer einen Rückgabewert. Auch wenn wir nix zurückzugeben haben wird trotzdem deshalb immer wenigsten eine Null zurückgegeben. Fehlt das Return 0, führt das zu einem Programmfehler.


Wozu dienen diese drei Methoden genau?

BlitzMax: [AUSKLAPPEN]
	Method OnCreate%()
SetUpdateRate 15
Return 0
End

Die Methode OnCreate() wird nur einmal beim Starten der App vom Gerät angesprungen. Hier schreibst Du also allen Code, der beim Spielstart nur einmalig nötig ist. Dazu zählt vor allem das Laden von Bildern, Sounds und anderen Daten. Der Befehl SetUpdateRate 15 ist PFLICHT und legt fest wie oft pro Sekunde die Methode OnUpdate() aufgerufen werden soll. Sinnvolle Werte sind hier 15Hz, 30Hz oder 60Hz. Je höher dieser Wert gewählt wird, desto genauer arbeitet dein Spiel, verbraucht aber auch sehr viel Rechenleisung. Für unsere Anfängerprogramme genügt hier immer 15.

BlitzMax: [AUSKLAPPEN]
	Method OnUpdate%()
If KeyHit(KEY_ESCAPE) Then Error ""
Return 0
End

die Methode OnUpdate() wird laufend vom Gerät angesprungen. Hier schreiben wir alles hinein, was mit Tastatureingaben, Maus oder Touch-Bewegungen zu tun hat. Ebenso alle Game-Logik, also wie sich Spieler oder Gegner bewegen und beeinflussen sollen. Der Befehl If KeyHit(KEY_ESCAPE) Then Error "" sollte immer enthalten sein, denn so kannst du dein Spiel mit der ESC-Taste jederzeit stoppen.

BlitzMax: [AUSKLAPPEN]
	Method OnRender%()
Cls
Return 0
End

Hier malen wir später einfach alles was auf dem Bildschirm zu sehen sein soll. Anders als bei den alten Blitzsprachen ist kein FLIP notwendig. Gerade für Umsteiger aus Blitzbasic dürfte es sehr befremdlich sein, dass es scheinbar keine Hauptschleife REPEAT/UNTIL mehr gibt. Die gibt es natürlich schon, aber das Gerät selbst verwaltet sie und wir haben keinen Zugriff darauf. Diese Hauptschleife springt dafür aber zuverlässig in die drei Methoden, wo wir dann useren Code einklinken können.
  • Zuletzt bearbeitet von Midimaster am Fr, Dez 28, 2012 4:14, insgesamt 3-mal bearbeitet

Midimaster

Betreff: Schon bewegt sich was....

BeitragMo, Dez 24, 2012 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Schon bewegt sich was....

Den schwierigsten Teil hast Du nun hinter Dir. Ab jetzt ist es deiner Phantasie überlassen, was Du daraus machen willst. Ausgehend vom im Kapitel II genannten Grundgerüst beschreibe ich in den Beispielen nur die Änderugen, es gehört aber immer das gesamte Grundgerüst zu einem erfolgreichem Start.

Mit dem Tasten <A> und <S> bewegst Du ein Recheckt auf dem Bildschirm:
BlitzMax: [AUSKLAPPEN]
Class Game Extends App

Field X%=200

Method OnCreate%()
SetUpdateRate 15
Return 0
End

Method OnUpdate%()
If KeyHit(KEY_ESCAPE) Then Error ""
If KeyDown(KEY_A)
X=X-3
ElseIf KeyDown(KEY_S)
X=X+3
EndIf
Return 0
End

Method OnRender%()
Cls
SetColor 255,0,0
DrawRect X,200,50,50
Return 0
End

End


Die KeyDown() Befehle überprüfen, ob eine Taste gedrückt gehalten wird. KeyHit() überprüft, ob eine Taste einmal kurz gedrückt (und dann wieder losgelassen) wurde. Solche Befehle gehören typischerweise in die OnUpdate(). Eine Variable X% soll in unserem Beispiel durch Gedrückthalten der Taste <A> verändert werden.

Damit eine Variable sowohl in der OnUpdate() als auch in er OnRender() zur Verfügung steht, muss sie am Kopf der Klasse als Field definiert werden.

Beim Zeichnen wird zunächst der Bildschirm mit Cls gereinigt, dann eine Malfarbe mit Setcolor R,G,B festglegt und dann ein Rechteck mit DrawRect X,Y,B,H gezeichnet.

Willst Du genaueres über die Syntax eines Monkey-Befehls wissen, genügt es, mit der Maus den Cursor auf die Stelle in deinen Code zu setzen, dann 2x die <F1> Taste zu drücken. Es öffnet sich die Monkey-Hilfe, die den Befehl und seine Parameter detailiert beschreibt.

Monkey kennt hunderte Befehle wie SetColor() und hunderte vorgefertigte Konstanten wie das im Beispiel verwendete KEY_A. Um Sie alle zu finden gibt es in der Monkey-Anleitung den Index, der alle Keywords alphabetisch auflistet. Alle diese Befehle und Konstanten stehen dir immer für deinen Code zur Verfügung. Diese resevierten Keywords kannst Du natürlich nicht nochmals als Namen für eigene Variable verwenden.

Neue Antwort erstellen


Übersicht Andere Programmiersprachen FAQs und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group