Schnellstart (für Programmierer): Unterschied zwischen den Versionen
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
AgentCubes setzt viele Aspekte des Programmierens um und eignet sich besonders für komplette Anfängerinnen und Anfänger. Diese Seite enthält die wichtigsten Punkte, die zu beachten sind, wenn man bereits eine Programmiersprache oder Entwicklungsumgebung kennt. | AgentCubes setzt viele Aspekte des Programmierens um und eignet sich besonders für komplette Anfängerinnen und Anfänger. Diese Seite enthält die wichtigsten Punkte, die zu beachten sind, wenn man bereits eine Programmiersprache oder Entwicklungsumgebung kennt. | ||
= Speichern = | = Speichern ist etwas gewöhnungsbedürftig= | ||
AgentCubes hat zwei Modi des Speicherns: | AgentCubes hat zwei Modi des Speicherns: | ||
* Der '''Programmcode'' wird fortlaufend gespeichert, auch ohne dass man etwas drücken oder einstellen muss. | * Der '''Programmcode''' wird fortlaufend gespeichert, auch ohne dass man etwas drücken oder einstellen muss. | ||
* Die '''Levels''' werden durch Drücken auf die Schaltfläche '''Speichern'' abgespeichert. | * Die '''Levels''' werden durch Drücken auf die Schaltfläche '''Speichern''' abgespeichert. | ||
Dieses Verhalten kann in zwei Fällen zu Mehrarbeit führen: | Dieses Verhalten kann in zwei Fällen zu Mehrarbeit führen: | ||
Zeile 11: | Zeile 11: | ||
* Du '''speicherst versehentlich''' eine neue Version des Levels, zum Beispiel nach dem Spielen. Der vorher gespeicherte Zustand wird jetzt überschireben und existiert nicht mehr. | * Du '''speicherst versehentlich''' eine neue Version des Levels, zum Beispiel nach dem Spielen. Der vorher gespeicherte Zustand wird jetzt überschireben und existiert nicht mehr. | ||
Es lohnt sich, dass man sich relativ rasch an die Funktionsweise der "Speichern"-Schaltfläche gewöhnt. Nach einigen Versuchen ist das üblicherweise kein Problem mehr. | |||
= | = Programmcode hängt immer an Agenten = | ||
Bei AgentCubes orientiert sich die Programmierung an so genannten Agenten, also an Spielfiguren, die auf einem Schachbrett-Muster angeordnet sind. Programmanweisungen laufen nur als Teil von Agenten. | |||
Die Programmierung lehnt sich somit eher an die Programmierung von Benutzeroberflächen, wo man Programmcode an Schaltflächen und andere Elemente anfügt. Es gibt in AgentCube keine Möglichkeit, Programmcode zentral zu entwickeln, der dann unabhängig von den Spielfiguren läuft. Wenn man solchen Code benötigt, muss man ihn an einen Agenten hängen. | |||
Zentral benötigten Code kann man beispielsweise wie folgt umsetzen: | |||
* Man hängt ihn an die Spielfigur. Diese existiert typischerweise genau ein Mal und enthält ansonsten nur wenig Programmcode. | |||
* Man hängt ihn an einen eigenen Agenten, zum Beispiel einen roten Block. Man kann diesen Block dann beispielsweise als Schaltfläche verwenden, mit der man den Level zurücksetzen kann. | |||
* Wenn der Code nur zu Spielbeginn verwendet wird, kann man ihn auch an einen eigenen Agenten hängen und diesen dann am Schluss des Codes vom Spielfeld löschen. Das stellt sicher, dass der Code genau ein Mal ausgeführt wird. | |||
= Bedingungen sind mit "AND" verknüpft = | |||
Verschiedene Bedingungen innerhalb eines Blocks sind immer und-verknüpft. Die rechte Seite der Anweisung wird also nur ausgeführt, wenn alle Bedingungen links erfüllt sind. | |||
<code> | |||
'''WENN''' gedrückt (Pfeil nach rechts) | |||
frei (rechts) '''DANN''' bewege (rechts). | |||
</code> | |||
wäre vollständig ausgeschrieben: | |||
<code> | |||
'''WENN''' gedrückt (Pfeil nach rechts) | |||
'''UND''' | |||
frei (rechts) '''DANN''' bewege (rechts). | |||
</code> | |||
= Bedingungen sind untereinander mit "ELSE" verknüpft = | |||
Ein Typischer Codeblock sieht wie folgt aus: | |||
<code> | |||
'''WENN''' gedrückt (Pfeil nach rechts) '''DANN''' bewege (rechts). | |||
'''WENN''' gedrückt (Pfeil nach links) '''DANN''' bewege (links). | |||
'''WENN''' gedrückt (Pfeil nach oben) '''DANN''' bewege (oben). | |||
'''WENN''' gedrückt (Pfeil nach unten) '''DANN''' bewege (unten). | |||
</code> | |||
Wichtig ist: '''Die Anweisungen werden nur so lange evaluiert, bis die erste Bedingung erfüllt ist'''. Vollständig ausgeschrieben wären die Anweisungen mit IF-THEN-ELSE-Blöcken realisiert: | |||
<code> | |||
'''WENN''' gedrückt (Pfeil nach rechts) '''DANN''' bewege (rechts). | |||
'''SONST''' | |||
'''WENN''' gedrückt (Pfeil nach links) '''DANN''' bewege (links). | |||
'''SONST''' | |||
'''WENN''' gedrückt (Pfeil nach oben) '''DANN''' bewege (oben). | |||
'''SONST''' | |||
'''WENN''' gedrückt (Pfeil nach unten) '''DANN''' bewege (unten). | |||
</code> | |||
In den meisten Fällen entspricht dies dem erwarteten Verhalten. Da sich die Spielfigur nur in eine Richtung bewegen kann, erfüllt der Codeblock oben die Erwartungen, auch wenn einmal aus Versehen mehrere Pfeiltasten gedrückt sind. | |||
Durch Anordnen der Anweisungen kann man fast immer erreichen, dass der Code sich den Erwartungen entsprechend verhält. Falls es einmal nötig sein sollte, dass verschiedene Blöcke unabhängig voneinander ausgeführt werden, dann kann man das realisieren, indem man über Nachrichten mehrere Unterprogramme aufruft: | |||
<code> | |||
'''WENN''' '''DANN''' Nachricht (hier, bewegen). | |||
Nachricht (hier, fressen). | |||
</code> | |||
= Stapel und Ebenenen = | = Stapel und Ebenenen = | ||
AgentCubes verfügt über zwei verschiedene Modelle, wie die dritte Dimension realisiert wird: | |||
* Wenn zwei Agenten auf dem gleichen Feld liegen, dann werden sie aufeinander gestapelt. Intern bleiben beide Agenten auf der untersten Ebene. Wenn ich den unteren Agenten entferne oder der obere ein Feld weiterrückt, dann fällt der obere automatisch wieder auf den Boden. | |||
* Ich kann Agenten auf verschiedenen Ebenen platzieren. Die Agenten bewegen sich nun auf ihrer Ebene, unabhängig davon, ob sich etwas unter ihnen befindet oder nicht. | |||
In der Regel ist der Stapelmodus einfach und zugänglich für die meisten Anwendungen. Er kann aber zu Verwirrung führen, wenn ich prüfe, ob ein Feld neben einem Agenten leer ist. Gemeint ist im Stapelmodus immer: Ob ein Feld auf Bodenhöhe leer ist, und nicht, ob das Feld leer ist auf der Höhe, auf welcher der Agent gerade gestapelt ist. | |||
= Ereignisse und Ereignisbehandlung = | = Ereignisse und Ereignisbehandlung = | ||
= Variablen = | = Variablen = |
Aktuelle Version vom 31. Mai 2017, 15:36 Uhr
AgentCubes setzt viele Aspekte des Programmierens um und eignet sich besonders für komplette Anfängerinnen und Anfänger. Diese Seite enthält die wichtigsten Punkte, die zu beachten sind, wenn man bereits eine Programmiersprache oder Entwicklungsumgebung kennt.
Speichern ist etwas gewöhnungsbedürftig
AgentCubes hat zwei Modi des Speicherns:
- Der Programmcode wird fortlaufend gespeichert, auch ohne dass man etwas drücken oder einstellen muss.
- Die Levels werden durch Drücken auf die Schaltfläche Speichern abgespeichert.
Dieses Verhalten kann in zwei Fällen zu Mehrarbeit führen:
- Du änderst etwas am Level und startest das Spiel ohne abzuspeichern. Die Änderungen sind damit verloren, du hast nur noch den Zustand des Levels, in dem er sich aktuell im Spiel befindet, sowie natürlich die zuletzt gespeicherte Version.
- Du speicherst versehentlich eine neue Version des Levels, zum Beispiel nach dem Spielen. Der vorher gespeicherte Zustand wird jetzt überschireben und existiert nicht mehr.
Es lohnt sich, dass man sich relativ rasch an die Funktionsweise der "Speichern"-Schaltfläche gewöhnt. Nach einigen Versuchen ist das üblicherweise kein Problem mehr.
Programmcode hängt immer an Agenten
Bei AgentCubes orientiert sich die Programmierung an so genannten Agenten, also an Spielfiguren, die auf einem Schachbrett-Muster angeordnet sind. Programmanweisungen laufen nur als Teil von Agenten.
Die Programmierung lehnt sich somit eher an die Programmierung von Benutzeroberflächen, wo man Programmcode an Schaltflächen und andere Elemente anfügt. Es gibt in AgentCube keine Möglichkeit, Programmcode zentral zu entwickeln, der dann unabhängig von den Spielfiguren läuft. Wenn man solchen Code benötigt, muss man ihn an einen Agenten hängen.
Zentral benötigten Code kann man beispielsweise wie folgt umsetzen:
- Man hängt ihn an die Spielfigur. Diese existiert typischerweise genau ein Mal und enthält ansonsten nur wenig Programmcode.
- Man hängt ihn an einen eigenen Agenten, zum Beispiel einen roten Block. Man kann diesen Block dann beispielsweise als Schaltfläche verwenden, mit der man den Level zurücksetzen kann.
- Wenn der Code nur zu Spielbeginn verwendet wird, kann man ihn auch an einen eigenen Agenten hängen und diesen dann am Schluss des Codes vom Spielfeld löschen. Das stellt sicher, dass der Code genau ein Mal ausgeführt wird.
Bedingungen sind mit "AND" verknüpft
Verschiedene Bedingungen innerhalb eines Blocks sind immer und-verknüpft. Die rechte Seite der Anweisung wird also nur ausgeführt, wenn alle Bedingungen links erfüllt sind.
WENN gedrückt (Pfeil nach rechts)
frei (rechts) DANN bewege (rechts).
wäre vollständig ausgeschrieben:
WENN gedrückt (Pfeil nach rechts)
UND
frei (rechts) DANN bewege (rechts).
Bedingungen sind untereinander mit "ELSE" verknüpft
Ein Typischer Codeblock sieht wie folgt aus:
WENN gedrückt (Pfeil nach rechts) DANN bewege (rechts).
WENN gedrückt (Pfeil nach links) DANN bewege (links).
WENN gedrückt (Pfeil nach oben) DANN bewege (oben).
WENN gedrückt (Pfeil nach unten) DANN bewege (unten).
Wichtig ist: Die Anweisungen werden nur so lange evaluiert, bis die erste Bedingung erfüllt ist. Vollständig ausgeschrieben wären die Anweisungen mit IF-THEN-ELSE-Blöcken realisiert:
WENN gedrückt (Pfeil nach rechts) DANN bewege (rechts).
SONST
WENN gedrückt (Pfeil nach links) DANN bewege (links).
SONST
WENN gedrückt (Pfeil nach oben) DANN bewege (oben).
SONST
WENN gedrückt (Pfeil nach unten) DANN bewege (unten).
In den meisten Fällen entspricht dies dem erwarteten Verhalten. Da sich die Spielfigur nur in eine Richtung bewegen kann, erfüllt der Codeblock oben die Erwartungen, auch wenn einmal aus Versehen mehrere Pfeiltasten gedrückt sind.
Durch Anordnen der Anweisungen kann man fast immer erreichen, dass der Code sich den Erwartungen entsprechend verhält. Falls es einmal nötig sein sollte, dass verschiedene Blöcke unabhängig voneinander ausgeführt werden, dann kann man das realisieren, indem man über Nachrichten mehrere Unterprogramme aufruft:
WENN DANN Nachricht (hier, bewegen).
Nachricht (hier, fressen).
Stapel und Ebenenen
AgentCubes verfügt über zwei verschiedene Modelle, wie die dritte Dimension realisiert wird:
- Wenn zwei Agenten auf dem gleichen Feld liegen, dann werden sie aufeinander gestapelt. Intern bleiben beide Agenten auf der untersten Ebene. Wenn ich den unteren Agenten entferne oder der obere ein Feld weiterrückt, dann fällt der obere automatisch wieder auf den Boden.
- Ich kann Agenten auf verschiedenen Ebenen platzieren. Die Agenten bewegen sich nun auf ihrer Ebene, unabhängig davon, ob sich etwas unter ihnen befindet oder nicht.
In der Regel ist der Stapelmodus einfach und zugänglich für die meisten Anwendungen. Er kann aber zu Verwirrung führen, wenn ich prüfe, ob ein Feld neben einem Agenten leer ist. Gemeint ist im Stapelmodus immer: Ob ein Feld auf Bodenhöhe leer ist, und nicht, ob das Feld leer ist auf der Höhe, auf welcher der Agent gerade gestapelt ist.