Schnellstart (für Programmierer)

Aus Scalable Game Design
Wechseln zu: Navigation, Suche

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.


Ereignisse und Ereignisbehandlung

Variablen