Grafik in Forth programmieren

img_0854
img_0853

Sehr schöne Sache: U-Held hat einen ersten Schritt zur Anbindung der G0-Grafiklib an PropForth erstellt. Unter Spin habe ich ja schon mit G0Test und TriBorg mit den Funktionen experimentiert. Die Funktionen in der Forth-G0-Lib sind noch nicht vollständig, aber die grundlegenden Wörter um den G0-Treiber komfortabel zu starten und zu initialisieren sind realisiert. Die anderen Funktionen sind mehr oder weniger Fleißarbeit. Die Programmierung ist auch recht einfach, wie wir gleich sehen werden. Wer also gern in Forth Programme oder Games mit Grafik schreiben möchte, erfährt mehr nach dem Knick…

Wie man erkennen kann, werden die Bibliotheken ari.lib, bel.lib und g0.lib benötigt.  Das eigentliche Testprogramm befindet sich in der Datei tpix.f. Dort wieder ist der Test in dem Wort „tpix“ versteckt:


: tpix
  g0:load setscreen g0:static
  g0:clear 14 g0:width 1 g0:color
  g0:xtiles 0 do i 16 * 8 +
    g0:ytiles 0 do i 16 * 8 + over g0:plot loop drop
  loop
  key g0:clear
  2000 0 do
    rnd 31 and g0:width rnd 3 and g0:color
    rnd rnd g0:plot
  loop
  key g0:reboot
  cr ." erledigt" cr
;

Ok, was passiert hier also genau?:

  g0:load - startet den G0-Grafikcode von SD-Card in Bellatrix
  setscreen - setzt Farbpuffer und Tilescreen des G0-Treibers
  g0:static - konfiguriert G0 in den statischen Modus mit einem Zeichenscreen
  g0:clear - klar, löscht den konfigurierten Zeichenpuffer
  14 g0:widt - "Stiftbreite" setzen
  1 g0:color - "Stiftfarbe" setzen

  So, jetzt geht es erst richtig los:

  g0:xtiles 0 do i 16 * 8 + 
    g0:ytiles 0 do i 16 * 8 + over g0:plot loop drop 
  loop

  Diese Sequenz zeichnet einen Raster von Punkten, wie auf dem Screenshot zu sehen ist. 
  Zu beachten ist dabei, dass die Plotfunktion nicht einen pixel setzt, sondern einen
  runden oder eckigen Punkt unterschiedlicher Größe zeichnet - also mehr oder weniger 
  Kreise oder Rechtecke einstellbarer Größe. Weiter im Programmcode:

  key g0:clear - wartet auf eine Taste und löscht den Screen

  2000 0 do
    rnd 31 and g0:width rnd 3 and g0:color
    rnd rnd g0:plot
  loop
  Hier werden Punkte mit zufälliger Farbe, Größe und Position gezeichnet.

 img_0856