Quick Basic: Grafikfunktionen

Mit QuickBASIC ist es auch möglich, Grafiken aus dem Bildschirm auszugeben. Die Rede ist dabei zwar nicht von unendlich hohen Auflösungen und 16 Millionen Farben, aber immerhin 640 mal 480 Pixel und 16 Farben - damit lässt sich schon einiges anstellen. Anspruchsvollere Benutzeroberflächen durch Rahmenelemente und vieles mehr sind damit zu realisieren.

WICHTIG: Diese Funktionen funktionieren nicht, wenn man QuickBASIC in einer Kommandobox unter Windows ausführt! Man braucht dazu entweder ein reines DOS-System oder einen Emulator, wie beispielsweise DOSbox (läuft unter anderem unter Linux und Windows). Auf die Installation dieses Programms wird hier aber nicht näher eingegangen. Wenn hier von einem Auflösungswechsel die Rede ist, ist damit entweder der Vollbildmodus einer DOSbox gemeint, oder es bezieht sich auf die Ausführung unter einem echten DOS-System. In einer DOSbox wird sich stattdessen die Fenstergröße ändern.

Vorbereitungen

Bearbeiten

Bevor wir aber anfangen können, wild die Kontrolle über knapp 300.000 Bildpunkte zu übernehmen, müssen wir uns noch mit einer lästigen Auswahl herumschlagen: der Auswahl eines Grafikbildschirms. Auf den Standardbildschirm mit der Nummer 0 kann man nämlich nichts zeichnen. Es gibt dann einige andere Bildschirme, wovon jener mit der Nummer 12 am praktischten ist: Er steht für den VGA-Modus, also 640 mal 480 Pixel mit je 16 möglichen Farben. Setzen wir also an den Anfang des Programms diese Anweisung, um den Bildschirm umzuschalten:

SCREEN 12

Und das war es auch schon - für die Programmausführung wird die Bildschirmauflösung geändert und man hat Zugriff auf die Grafikfunktionen.

Linien zeichnen mit LINE

Bearbeiten

Es wäre ziemlich lästig, mit PSET ein paar tausend Bildpunkte einzeln zu setzen, und leicht wartbar ist es allemal nicht, geschweige denn übersichtlich. Da diese Funktion wohl auch kaum einer benötigt, wird auf sie nicht eingegangen. Wenden wir uns lieber einer interessanteren Funktion zu, nämlich jener zum Zeichnen von Linien und Rechtecken. Die Syntax ist wie folgt:

LINE [[STEP](x1, y1)] - [STEP](x2, y2)[, [color][, [B[F]][, style]]]

Das Schlüsselwort STEP bedeutet, dass die Koordinaten relativ zu der letzten Cursorposition sind, oder (wenn es beim zweiten Mal angegeben wird) relativ zur ersten Koordinate. Die Angabe des ersten Koordinatenblocks ist optional, dann wird die Linie von der Cursorposition gezeichnet. Als color kann mein eine der 16 Farbnummern einsetzen.

Wird B angegeben (ebenfalls eine Art Schlüsselwort), so wird ein Rechteck gezeichnet. Folgt diesem B ein F, wird der Inhalt des Rechtecks auch noch ausgefüllt.

Beispiel

Bearbeiten

Alles in allem also schon ziemlich viel - es folgt ein Beispiel.

 REM Den Bildschirm wechseln.
 SCREEN 12
 
 REM Eine weiße Linie zeichnen von 50,50 zu 150,150 (relative Angaben!)
 LINE (50, 50)-STEP(100, 100), 15
 
 REM Ein rotes Rechteck irgendwo in der oberen rechten Ecke. (ACHTUNG: Die
 REM Angaben reichen von 0,0 bis 639,479, darum ist letzteres die obere
 REM rechte Bildschirmecke.)
 LINE (539, 0)-(639, 100), 12, B
 
 REM Davon überlappt wird nun ein gelbes Rechteck entstehen.
 LINE STEP(-150, -50)-STEP(75, 75), 14, BF

Kreise zeichnen mit CIRCLE

Bearbeiten

Mit CIRCLE kann man dann auch noch Kreise zeichnen. DIe Syntax ist wie folgt:

CIRCLE [STEP](x, y), radius[, [color][, [start][, [end][, aspect]]]]

Mit STEP kann man auch hier wieder den Gebrauch von relativen Koordinaten anschalten. x und y bezeichnen den Kreismittelpunkt, radius den Radius. color bezeichnet auch hier wieder eine Farbe.

Wenn nur Kreissegmente gezeichnet werden sollen, dann sind die Parameter start und end zu gebrauchen: sie geben die Winkel an, von denen gezeichnet wird. Dieser ist in Radiant angegeben, wer also seinen Winkel wie gewohnt in Grad angeben will, muss seinen Winkel mit pi multiplizieren und durch 180 teilen.

Beispiel

Bearbeiten
 SCREEN 12
 
 REM Zuerst einen einfachen Kreis in der Mitte...
 CIRCLE STEP(0, 0), 100, 15
 
 REM ...dann ein Kreisabschnitt. (WICHTIG: Umrechnung von Grad nach Rad!)
 CIRCLE STEP(0, 0), 150, 14, 0 * 3.141592 / 180, 90 * 3.141592 / 180
 
 REM Und schließlich eine Ellipse, die in der Horizontalen gestreckt ist:
 CIRCLE (320, 240), 200, 12, , , .5