PICO-8: Die Grundlagen

Die Programmierung mit PICO-8 ist super einfach. Die Grundlagen möchte ich hier zeigen. Die Befehle findet ihr alle im Handbuch von PICO-8, falls ihr dort noch mal im Detail nachlesen wollt.

Nachdem man PICO-8 als Programm gesartet hat, reicht ein Druck auf ESC um in den Editier-Modus zu gelangen.

Callback Funktionen

PICO-8 mit Editor und den 3 Hauptfunktionen

Die drei Hauptfunktionen bzw Callback-Funktionen sind _INIT(), _UPDATE() und _DRAW(). Die _INIT() Funktion wird beim Start der Cart einmalig ausgeführt. Hier lassen sich Funktionen programmieren, die das Spiel initialisieren sollen. Also einen Auslieferungszustand herstellen. Die Funktion _UPDATE() wird immer vor der Funktion _DRAW() ausgeführt. In dieser werden unsere Berechnungen durchgeführt, die den Status des Spiels ändern z.B. Interaktionen per Button. In der _DRAW() Funktion werden wir Funktionen programmieren, die den 128×128 Pixel Bildschirm (Screen) zeichnen. Die _DRAW() Funktion wird immer nach der _UPDATE() Funktion aufgerufen.

Pixel ausgeben

Nun wollen wir vier Pixel auf dem Screen ausgeben. Den erst möglichen Pixel Oben Links (x = 0, y = 0). Den letzt möglichen Pixel Oben Rechts (x = 0, y = 127). Den erst möglichen Pixel Unten Links (x = 127, y = 0). Und zum Schluss den letzt möglichen Pixel Unten Rechts (x = 127, y = 127). Die Koordinaten ergeben sich, weil es sich um einen 128×128 Pixel Screen handelt und man bei 0 anfängt zu zählen. Einen Pixel können wir mit der Funktion PSET(X,Y,FARBE) zeichnen. Als Farbe wählen wir ein schlichtes Weiß. Der Farbcode für die Farbe Weiß ist 7. Also schreiben wir folgenden Programmcode.

function _draw()
  pset(0,0,7)
  pset(0,127,7)
  pset(127,0,7)
  pset(127,127,7)
end

Pixel bewegen

Im nächsten Schritt wollen wir einen Pixel über die Cursor-Tasten auf dem Screen bewegen. Dafür erweitern wir unsere _INIT() Callback Funktion um die Koordinaten unseres Pixels. Diesen setzen wir initial auf die Bildschirmmitte (x = 63, y = 63).

function _init()
 x = 63
 y = 63
end

Nun erweitern wir unsere _DRAW() Callback Funktion um die Funktion CLS(). CLS steht für Clean Screen. Wird diese Funktion ausgeführt, so wird Alles, was bisher auf den Screen gezeichnet wurde zurückgesetzt. Anschließend zeichnen wir unseren interaktiven Pixel, indem wir auf die soeben definierten Koordinaten zurückgreifen. Diesmal wählen wir Rot als Farbe (Farbcode 8). Über die Kombination von CLS() und PSET(X,Y,FARBCODE) erreichen wir, dass immer nur ein Pixel auf dem Screen gezeichnet wird.

function _draw()
 -- clean screen
 cls()
 -- interaktiver pixel
 pset(x,y,8)
end

Jetzt fehlt noch die Interaktion mit unserem Pixel. Hierfür erweitern wir unsere _UPDATE() Callback Funktion. Was wir erreichen wollen ist, dass unser Pixel um einen Pixel nach Links wandert, wenn wir die Cursortaste Links ⬅️ drücken. Das heisst von x = 63 auf x = 62. Die x-Koordinate wird um 1 verringert. Also x ist x minus 1.

x = x-1

Zum Überprüfen, welche Taste gedrückt wird, verwenden wir die Funktion BTN(). BTN steht für Button. Eine Überprüfung erreicht man mit einer if-Anweisung. Wenn Button ⬅️ dann ist x gleich x minus 1.

if (btn(⬅️)) x = x-1

Das Selbe Muster wenden wir für die Cursortaste Rechts, Cursortaste Oben und Cursortaste Unten an. Im PICO-8 Editor kann man die Buttons per Tastenkombination eingeben. SHIFT+L für ⬅️, SHIFT+R für ➡️, SHIFT+U für ⬆️ und SHIFT+D für ⬇️.

Insgesamt schreiben wir folgenden Programmcode.

function _init()
 x = 63
 y = 63
end

function _update()
 if (btn(⬅️)) x = x-1
 if (btn(➡️)) x = x+1
 if (btn(⬆️)) y = y-1
 if (btn(⬇️)) y = y+1
end

function _draw()
 -- clean screen
 cls()
 -- interaktiver pixel
 pset(x,y,8)
end

Cart speichern und ausführen

Wollen wir das soeben geschriebene Programm ausführen, so reicht die Tastenkombination STRG+R oder CONTROL+R. Je nachdem, auf welchem System ihr unterwegs seid. Mit der Tastenkombination wird der run Befehl ausgeführt. Dies könnt ihr auch machen, indem ihr mit ESC in die Befehlseingabe geht und dort run eintippt und mit Enter bestätigt. Unsere Cart können wir mit dem save Befehl speichern. Wichtig ist, dass ein Name eingegeben wird.

save lostingames

Habt ihr das einmal getan, so können ihr beim Programmieren mit der Tastenkombination STRG+S oder CONTROL+S speichern.