Comal – Eine Einführung (3)
In dieser Folge unserer Comal-Einführung befassen wir uns mit einem der interessantesten Aspekte dieser Programmiersprache, nämlich der Grafik.
Die Comal-Grafik kann ihre Herkunft von einer anderen Programmiersprache nicht verheimlichen. Befehle wie »SHOWTURTLE« und »TURTLESIZE« sind verräterisch: Die Sprache Logo mit ihrer bekannten Turtle-Grafik stand neben Basic und Pascal Pate beim Entwurf von Comal.
Die Bezeichnung Turtle-Grafik stammt noch aus den Anfängen von Logo. Turtle ist das englische Wort für »Schildkröte« und bezeichnete ursprünglich eine mechanische Schildkröte, die sich per Computersteuerung über ein großes Blatt Papier bewegte und dabei mit einem Schreibstift eine sichtbare Spur hinterließ. Zur Steuerung dieser »Schildkröte« wurde eine spezielle Programmiersprache entwickelt, mit Befehlen wie »FORWARD«, »BACK«, »LEFT« etc. Das funktionierte einige Zeit ganz gut, aber dann tauchten die ersten Mikrocomputer mit Grafikbildschirmen auf, und die Schildkröte hauchte ihr mechanisches Leben aus und degenerierte zu einem kleinen Dreieck auf einem Grafikbildschirm. Doch die grafische Programmiersprache Logo war geboren und ist seitdem immer weiterentwickelt worden.
Das Konzept der Turtle-Grafik wurde vollständig in Comal integriert (Tabelle 1). Daneben gibt es auch spezielle Kommandos zum Zeichnen einzelner Punkte oder Linien, und zwar unabhängig von der jeweiligen Turtleposition. Überhaupt wird der gesamte Bereich von Grafik, Farbe und Bildschirmansteuerung beim C 64 durch Comal-Befehle abgedeckt (Tabelle 2), man muß sich nicht wie im V.2-Basic mit merkwürdigen PEEKs und POKEs herumschlagen.
Anweisung | Bedeutung |
FORWARD n | Turtle n Schritte vorwärts |
BACK n | Turtle n Schritte rückwärts |
HOME | Turtle auf Grundposition zurücksetzen |
LEFT w | Turtle um w Grad links drehen |
RIGHT w | Turtle um w Grad rechts drehen |
SETXY x,y | Turtle auf die Koordinaten x,y setzen |
SETHEADING w | Turtle-Richtung absolut festlegen (w = 0 bedeutet, daß Turtle nach oben zeigt) |
SHOWTURTLE | Turtle sichtbar machen |
HIDETURTLE | Turtle unsichtbar machen |
PENUP | Turtleweg wird nicht mitgezeichnet |
PENDOWN | Turtleweg wird mitgezeichnet |
PENCOLOR n | Zeichenfarbe n wählen |
TURTLESIZE n | Turtlegröße auf n Punkte festlegen |
Anweisung | Bedeutung |
BACKGROUND n | Hintergrundfarbe n wählen |
BORDER n | Rahmenfarbe n wählen |
CLEAR | Grafikbildschirm löschen |
DRAWTO x,y | Zeichnet eine Linie zum Punkt x,y |
FILL | Flächen mit Farbe ausfüllen |
FRAME x1,x2,y1,y2 | Window festlegen |
FULLSCREEN | Ganzer Bildschirm für Grafik |
MOVETO x,y | Grafik-Cursor auf x,y setzen |
PLOT x,y | Grafikpunkt setzen |
PLOTTEXT x,y,text$ | Text in Grafikbildschirm einblenden |
SETGRAPHIC | Grafik-Modus wählen |
SETTEXT | Auf Textbildschirm umschalten |
SPLITSCREEN | In Grafikbildschirm zwei Textzeilen reservieren |
Comal kennt drei verschiedene Bildschirmmodi, nämlich den normalen Textmodus (»SETTEXT«), den hochauflösenden Grafikmodus (»SETGRAPHIC 0«) und den Mehrfarben-Grafikmodus (»SETGRAPHIC 1«). Der Textmodus wird auch mit der Funktionstaste fl eingeschaltet, während f5 die Grafik einschaltet. Im hochauflösenden Modus kann mit f3 zusätzlich noch ein Textfenster eingeblendet werden, was beim Experimentieren mit der Turtle-Grafik recht nützlich ist. Die oberen beiden Bildschirmzeilen bilden dann das Textfenster, mit dessen Hilfe man beispielsweise im Direktmodus mit entsprechenden Befehlen die Turtle steuern kann.
Geben Sie einmal im Direktmodus den Befehl »CLEAR« ein (um den Grafikbildschirm zu löschen) und schalten Sie danach durch Drücken der f3-Taste in die hochauflösende Grafik mit Textfenster um. Sie sehen in der Mitte des ansonsten leeren Bildschirms ein kleines weißes Dreieck, die Turtle. In der linken oberen Bildschirmecke blinkt der Cursor und zeigt damit an, daß die Turtle auf Befehle von Ihnen wartet.
So wird die »Schildkröte« bewegt
Geben Sie jetzt »FORWARD 50« ein. Die Turtle bewegt sich damit um 50 Einheiten vorwärts und zieht dabei eine Linie längs ihres Weges. Mit »LEFT 90« erreichen Sie eine Drehung der Turtle um 90 Grad nach links. Wenn Sie jetzt nochmals »FORWARD 50« eingeben, bewegt sich die Turtle in die neue Richtung. Soll eine Bildschirmstelle angefahren werden, ohne eine Linie dorthin zu ziehen, dann wird mit dem Kommando »PENUP« einfach der symbolische Schreibstift von der Zeichenfläche abgehoben. Die Turtle kann dann nach Belieben über den gesamten Bildschirm dirigiert werden, ohne Spuren zu hinterlassen. Aber keine Angst, nach »PENDOWN« zeichnet sie wieder.
Wenn Sie es gerne etwas bunter hätten, bitte sehr. »PENCOLOR« wählt die Schreibfarbe der Turtle, »BORDER« und »BACKGROUND« wählen Rahmen- und Hintergrundfarbe. Erscheint Ihnen die Turtle zu gut genährt, dann können Sie zum Beispiel mit »TURTLESIZE 5« bedenkenlos etwas Speck entfernen. Und sollte Ihnen die Turtle insgesamt nicht ganz geheuer sein, dann tippen Sie einfach »HIDETURTLE« in Ihren Computer ein. Die »Schildkröte« wird sich daraufhin schmollend von der Bildfläche zurückziehen, aber zum Glück wird ihr Wirken dadurch nicht behindert: Aus dem Unsichtbaren befolgt sie weiter Ihre Befehle und zieht fleißig ihre Linien.
Kleine Programme mit großer Wirkung
Natürlich ist die Grafikerzeugung mit dieser sehr direkten Methode auf die Dauer entschieden zu langwierig. Wenn Sie das kleine Programm aus Listing 1 einmal ausprobieren, werden Sie feststellen, daß effektvolle Grafikprogramme in Comal weder besonders komplex noch langsam zu sein brauchen. Experimentieren Sie ruhig mit ähnlichen Programmen; Sie werden sehr schnell ein gewisses Gespür dafür entwickeln, wie Sie durch Wiederholung einfacher Grundfiguren mit jeweils einem etwas geänderten Parameter interessante grafische Effekte erzielen können.
Zugabe: Sprites in Comal programmiert
Der große Vorteil der Turtle-Grafik gegenüber dem Zeichnen von Linien nach festen Koordinaten ist ja gerade die erstaunliche Einfachheit, mit der sich recht komplexe Strukturen vom Standpunkt der »Schildkröte« aus darstellen. Mit Comal können Sie wirklich eine »Reise durch die Wunderwelt der Grafik« antreten — auch ohne sich mit Bits und Bytes abzuplagen und mit komplizierten mathematische Formeln zu jonglieren.
Die Turtle-Grafik ist nur die eine Seite der grafischen Fähigkeiten des C 64 - Comal. Es stehen nämlich zusätzlich eine Reihe von leistungsfähigen Anweisungen zur Erzeugung und Kontrolle von Sprites zur Verfügung.
Auch bei Sprites wird zwischen Hochauflösung (Hires) und Mehrfarbendarstellung (Multicolor) unterschieden. Ein Hires-Sprite besteht bekanntlich aus 24 x 21 Punkten oder aus 21 Reihen zu je drei Byte. Bei Multicolor-Sprites haben wir nur 12 x 21 Punkte, dafür benötigt jeder Bildpunkt aber intern zwei Bit, da vier verschiedene Farben pro Punkt möglich sind. In beiden Fällen kann die in einem Sprite enthaltene Information in 63 Bytes dargestellt werden. Comal verwendet ein zusätzliches Byte, das angibt, ob es sich um ein Hires-Sprite (Byte 64 = 0) oder um ein Multicolor-Sprite (Byte 64 < > 0) handelt. Beide Spritearten werden im übrigen mit völlig gleichartigen Befehlen angesprochen.
Zur Spriteerzeugung dient der Befehl »DEFINE«. Als Parameter wird eine Definitions-Nummer sowie ein String angegeben. Die Definitions-Nummer kann irgendeine Zahl von 0 bis 95 sein, denn Comal kann bis zu 96 verschiedene Spritemuster verwalten. Der anzugebende String muß eine Länge von 64 Zeichen haben und das Punktmuster des Sprites enthalten. Das Beispielprogramm in Listing 2 zeigt, wie man in Comal mit Sprites umgeht.
Wichtig ist es, genau zwischen der Definitions-Nummer eines Sprites und der eigentlichen Spritenummer zu unterscheiden. Es können hardwarebedingt ja immer nur acht Sprites gleichzeitig auf dem Bildschirm sein. Wird die Turtle benutzt, die selber ein Sprite ist, dann verringert sich diese Anzahl auf sieben.
Mit dem »IDENTIFY«-Kommando wird die Beziehung zwischen Sprite-Nummer und Definitions-Nummer hergestellt. »IDENTIFY 1,30« bewirkt beispielsweise, daß das Sprite mit der Definitions-Nummer 30 als Sprite 1 auf dem Bildschirm dargestellt wird. So kann sehr schnell zwischen verschiedenen Sprites umgeschaltet werden, was zur Erzeugung von zeichentrickähnlichen Effekten benutzt werden kann.
Wie aus Tabelle 3 zu ersehen ist, gibt es eine Vielzahl von weiteren Comal-Befehlen speziell zur Sprite-Kontrolle. Die Wirkungsweise solcher Anweisungen wie »SPRITECOLOR« oder »SPRITEPOS« dürfte wohl jedem verständlich sein, der sich schon einmal von Basic aus an die Spriteprogrammierung gewagt hat.
Anweisung | Bedeutung |
DATACOLLISION n,b | Sprite-Hintergrund- Kollisionsabfrage für Sprite n (die Variable b wird 1, falls Kollision, sonst b=0) |
SPRITECOLLISION n,b | Sprite-Sprite-Kollisionsabfrage für Sprite n (b wird 1, falls Kollision, sonst b=0) |
DEFINE d,x$ | Der Inhalt der Stringvariablen x$ definiert ein Sprite mit Definitionsnummer d |
IDENTIFY n,d | Ordnet dem mit Nummer d definierten Sprite die Spritenummer n zu |
PRIORITY n,p | Hintergrund hat Priorität vor Sprite n (p=0), umgekehrt für p=1 |
SPRITEBACK a,b | Setzt a und b als zusätzliche Farben für Multicolor-Sprites |
HIDESPRITE n | Sprite n nicht anzeigen |
SHOWSPRITE n | Sprite n anzeigen |
SPRITECOLOR n,c | Farbe c für Sprite n wählen |
SPRITEPOSITION n,x,y | Sprite n auf Position x,y setzen |
SPRITESIZE n,x,y | Sprite n in x- oder y-Richtung vergrößern |
Comal oder Basic?
Wie die drei Folgen unserer kleinen Comal-Einführung hoffentlich gezeigt haben, hat Comal dem Commodore V.2-Basic einiges voraus. Die von Pascal entlehnte Programmstrukturierung mittels Prozeduren und die aus Logo stammende Turtle-Grafik haben sich mit dem aus Basic übernommenen Konzept einer benutzerfreundlichen, interaktiven Programmiersprache zu einer gelungenen Synthese zusammengefügt. Die hier besprochene Comal-Version 0.14 ist dabei nur als eine Art Vorabversion zu werten. Eine nochmals wesentlich erweiterte und verbesserte Version 2.0 wird von Commodore Dänemark bereits als Steckmodul (64 KByte ROM, 30 KByte RAM frei) vertrieben. Es ist zu hoffen, daß auch Commodore Deutschland diese zukunftsweisende Programmiersprache bald anbieten wird.
(ev)Info: Comal-Literatur:
Borge Christensen, Heiko Wolgast: Comal 0.14-Handbuch, 80 Seiten, Verlag Schmidt & Klaunig, Ringstraße, 2300 Kiel.
Borge Christensen: Strukturierte Programmierung mit Comal, 230 Seiten, Verlag R. Oldenbourg, München, ISBN 3-486-26901-1