• QBasic - Grafik

Der Bildschirm eines PCs kann unter QBasic in verschiedenen Modi betrieben werden. Man unterscheidet den Text- und den Grafikmodus.

Textmodus


Im Standard-Textmodus (ist beim Aufruf von QBasic eingestellt) sind 25 Zeilen zu je 80 Zeichen darstellbar. Zur Einstellung des gewünschten Textmodus verwendet man den Befehl SCREEN und zur Einstellung der Anzahl der Zeilen und Spalten den Befehl WIDTH.

Das folgende Programm tmodus1.bas stellt den Modus 0 ein und beschreibt alle möglichen Zeilen (bis auf die letzte) mit zufälligen Zeichen des Alphabets. Starte das Programm mehrfach und gib für die Anzahl der Zeilen und Spalten unterschiedliche Werte ein. Beobachte die Bildschirmausgaben.


REM tmodus1
SCREEN 0
RANDOMIZE TIMER
INPUT "Anzahl der Zeilen (25, 43 oder 50): ",zeilen
INPUT "Anzahl der Spalten (40 oder 80): ",spalten
WIDTH spalten,zeilen
CLS
FOR z=1 TO zeilen-1
FOR s=1 TO spalten
PRINT CHR$(65+INT(26*RND));
NEXT s
NEXT z

Abhängig vom verwendeten Bildschirmmodus können verschiedene Farben verwendet werden (meist 16 Farben mit den Farbnummern 0 bis 15). Mit dem Befehl COLOR (Vordergrundfarbe, Hintergrundfarbe) können die Farben für Zeichen (Vordergrundfarbe) und Zeichenhintergrund (Hintergrundfarbe) bestimmt werden. Folgendes Programm (tmodus2.bas) gibt die Zahlen von 0 bis 1000 in Fünferschritten mit gewünschter Farbe aus:

REM tmodus2
SCREEN = 0
CLS
INPUT "Farbe der Zeichen: ", vordergrundfarbe
INPUT "Hintergrundfarbe: ", hintergrundfarbe
FOR zaehler = 0 TO 1000 STEP 5
COLOR vordergrundfarbe, hintergrundfarbe
PRINT zaehler;
NEXT zaehler

In jedem Textverarbeitungsprogramm kann die Schreibmarke mit Hilfe der Cursortasten (Pfeiltasten) an eine beliebige Stelle des Bildschirms gebracht werden. Der anschließend eingegebene Text erscheint exakt an dieser Stelle.
In QBasic kann die Schreibmarke ebenfalls positioniert werden. Dazu dient der Befehl LOCATE.

Das folgende Programm (tmodus4.bas) gibt verschiedene Texte an verschiedenen Stellen des Bildschirms aus. Beachte, daß mehrere Befehle in einer Zeile durch einen Doppelpunkt voneinander getrennt werden.


REM tmodus4
SCREEN 0
WIDTH 80,25
CLS
LOCATE 10,1: PRINT "Zeile 10, Spalte 1"
LOCATE 15,20: PRINT "Zeile 15, Spalte 20"

Das folgende Programm (tmodus5.bas) stellt verschiedene Texte zentriert, d.h in der Bildschirmmitte, dar. Dazu wird das Unterprogramm Center aufgerufen. Der Befehl LEN gibt dabei die Anzahl des Strings text$ inklusive Leerzeichen wieder.


REM tmodus5
SCREEN 0
WIDTH 80,25
CLS
zeile=4: text$="Hallo Computer-Freak": GOSUB Center
zeile=6: text$="Der gesamte Text dieser Seite": GOSUB Center
zeile=7: text$="wird zentriert": GOSUB Center
zeile=8: text$="ausgegeben.": GOSUB Center
END
Center:
LOCATE zeile, (80 - LEN(text$)) / 2: PRINT text$
RETURN

 

Grafikmodus

Im Grafikmodus ist der Bildschirm viel feiner in Zeilen und Spalten aufgeteilt. Wichtige Auflösungen sind z.B. 320 Spalten / 200 Zeilen, 640 Spalten / 200 Zeilen, 640 Spalten / 350 Zeilen oder 640 Spalten / 480 Zeilen. Die linke obere Ecke hat die Koordinaten 0/0, die rechte untere Ecke z.B. 639/479.
Zur Einstellung des Grafikmodus dient ebenfalls der SCREEN-Befehl. Linien werden mit dem LINE-Befehl, Punkte mit dem PSET-Befehl gezeichnet. An jedem Schnittpunkt einer Zeile mit einer Spalte kann ein Punkt in einer bestimmten Farbe gesetzt werden. Ein solcher Punkt heißt Pixel.

Das folgende Programm (gmodus1.bas) zeichnet bei SCREEN 8 (640*200, 16 Farben) einen gelben Rahmen.


REM gmodus1
SCREEN 8
farbe = 14
LINE (0, 0)-(639, 0), farbe
LINE -(639, 199), farbe
LINE -(0, 199), farbe
LINE -(0, 0), farbe
LOCATE 13, 34: PRINT "Ende -> Taste"
DO
a$ = INKEY$
LOOP UNTIL a$ <> ""

 


Das folgende Programm (gmodus3.bas) zeichnet bei SCREEN 12 (640*480, 16 Farben) eine Sinuskurve:


REM gmodus3
SCREEN 12: CLS
farbe = 12
FOR x= 0 TO 639
y = 220+210*SIN(x*x/10000)
NEXT x

Rechteck

Das folgende Programm zeichnet bei SCREEN 12 (640*480, 16 Farben) ein Rechteck. Die linke obere Ecke hat die Koordinate (20,40), die rechte untere Ecke die Koordinate (500,400). Das Rechteck ist blau (9) und gefüllt (BF). Speichere unter rechteck1.bas

REM rechteck1
SCREEN 12
CLS
LINE (20, 40) - (500, 400), 9, BF

Das folgende Programm (rechteck3.bas) zeichnet bei SCREEN 12 (640*480, 16 Farben) 20 verschiedene Rechtecke an zufälligen Bildschirmpositionen.


REM rechteck3
RANDOMIZE TIMER
SCREEN 12
CLS
FOR rechteck = 1 TO 20
LET breite = INT(RND * 80) + 20
LET hoehe = INT(RND * 80) + 20
LET x1 = INT(RND * (640 - breite))
LET y1 = INT(RND * (480 - hoehe))
LET farbe = INT(RND * 15) + 1
LINE (x1, y1)-(x1 + breite, y1 + hoehe), farbe, B
NEXT rechteck

 

Kreis

Mit dem CIRCLE Befehl kann man an einer gewünschten Bildschirmposition einen Kreis mit einem beliebigen Radius und einer beliebigen Farebe zeichnen. Das folgende Programm (kreis1.bas) zeichnet bei SCREEN 12 (640*480, 16 Farben) nach Eingabe von Farbe und Radius (in Pixeln) zentriert auf dem Bildschirm einen Kreis!

REM kreis1
SCREEN 12
CLS
INPUT "Radius (0 - 240): ", radius
INPUT "Farbe (0-15): " , farbe
CIRCLE (320,240), radius, farbe

 

Das Programm kreis3.bas erzeugt 40 verschiedene Kreise mit beliebigen Farben an zufälligen Bildschirmpositionen.


REM kreis3
SCREEN 12
CLS
RANDOMIZE TIMER
FOR kreis = 1 TO 40
LET radius = INT(RND * 80) + 20
LET x = radius + INT(RND * (640 - 2 * radius))
LET y = radius + INT(RND * (480 - 2 * radius))
LET farbe = INT(RND * 15) + 1
CIRCLE (x, y), radius, farbe
NEXT kreis

Ändere die vorletzte Zeile des Programms kreis3.bas wie folgt ab und speichere unter kreis4.bas:


:
CIRCLE (x, y), radius, farbe, , , .5
PAINT (x,y), farbe
NEXT kreis

Der CIRCLE-Befehl wird im obigen Beispiel mit 7 Parametern aufgerufen. x und y sind die Koordinaten des Mittelpunktes, radius ist der Kreisradius, farbe ist die Farbe des Randes. Danach folgen 2 Parameter, die nicht angegeben (ausgelassen werden) und der letzte Parameter (0,5) steht für das Verhältnis der Radien in x bzw. y-Richtung (0,5 bedeutet, daß der y-Radius halb so groß ist wie der x-Radius). Mit dem PAINT - BEFEHL kann man einen Bereich ausfüllen. Die Füllfarbe wird hier zufällig erzeugt.

Weiter mit Lektion 6!


Aufgaben

  1. Ergänze das Programm tmodus1.bas wie folgt: Nach Eingabe der Spalten- und Zeilenzahl sowie der Hintergrundfarbe (Zahl von 1 bis 10) soll das Programm das Alphabet mit gewünschtem Hintergrund in zufälliger Reihenfolge und mit zufälligen Farben ausgeben. Verwende dazu den Befehl COLOR, wobei die Vordergrundfarbe mit dem Befehl INT(15*RND) erzeugt wird. Speichere unter tmodus3.bas
  2. Schreibe ein Programm tmodus6.bas, welches bei Eingabe der Spalten- und Zeilenzahl (siehe tmodus1) den Text aus tmodus5 sowohl in Zeilen als auch in Spalten zentriert wiedergibt. Wähle dazu eine rote Schrift (12) und einen grauen Texthintergrund (15)
  3. Schreibe das Programm gmodus2.bas, welches bei SCREEN 9 (640*350, 16 Farben) ein Kästchenpapier erzeugt. Ein Tipp: Ändere gmodus1.bas um, erzeuge mit zwei FOR NEXT Schleifen waagerechte und senkrechte Linien im Abstand von 16 Pixeln. Die Abbruchbedingung übernimm aus gmodus1.bas
  4. Experimentiere mit den mathematischen Funktionen ähnlich gmodus3. Versuche cos, tan und sqr darzustellen!
  5. Schreibe das Programm rechteck2.bas, welches zur Eingabe der Seitenlängen auffordert. Flächeninhalt und Umfang sollen ausgegeben werden. Dann soll das Rechteck zentriert auf dem Bildschirm gezeichnet werden.
  6. Schreibe das Programm kreis2.bas, welches zur Eingabe des Radius auffordert. Flächeninhalt, Umfang und Kreis sollen ausgegeben werden.
  7. Ändere das obige Programm kreis4.bas so ab, daß 99 Luftballons gezeichnet werden. Wähle dazu als letzten Parameter 1,6. Speichere unter kreis5.bas




... zurück zum Inhalt