Basic lernen (Einleitung, Vorbereitungen, Kapitel 1, 2, 3, 4, 5, 6)

Tipps zur Ein- und Ausgabe, Farbige Textausgabe, Cursor positionieren, Wartezeiten, Zufallszahlen erzeugen

Sicherlich haben Sie im letzten Kapitel eine ganze Menge gelernt, doch insbesonders die Möglichkeiten der Ein- und Ausgabe wurden im letzten Kapitel noch nicht ausreichend beschrieben. Alleine wenn man bedenkt, dass der Wert einer Variable bei der Ausgabe mehrere Zeichen Breite entfernt steht vom zuvor ausgegebenen Text, so wünscht man sich bei der Ausgabe schnell mehr Möglichkeiten, auch was die Textformatierung angeht. Dieses Kapitel soll diesen Wünschen nachkommen. Ebenso wird gezeigt, wie man den Cursor positioniert sowie Zufallszahlen erzeugt. Mit dem Wissen über das Erzeugen von Zufallszahlen wird es Ihnen auch möglich sein, ein kleines Ratespiel zu programmieren.

2.1; Tipps zur Ein- und Ausgabe:

Wenn Sie eines der beiden Euro-Umrechnungs-Beispiele ausprobiert haben, werden Sie festgestellt haben, dass die Ausgabe optisch eine ziemliche Katastrophe war. Da wurde der auszugebende Wert ziemlich weit rechts neben dem Text angezeigt. Dasselbe in der nächsten Zeile. Um zu verhindern, dass QBasic den Wert nach rechts einrückt, kann man sich mit einem kleinen Trick Abhilfe schaffen. Man schreibt einfach anstelle des Beistriches - wenn es um die Ausgabe geht - ein Semikolon. (Strichpunkt) Das nächste Beispiel demonstriert das. Es zeigt den Euroumrechner (ATS-Euro) in verbesserter Fassung.

CLS
PRINT "Umrechnung ATS-Euro"
INPUT "Eingabe ATS: ", ats
ergebnis# = ats / 13.7603       ' ** Kurs: 1 Euro = 13.7603 ATS **
PRINT ats; " Schilling sind "; ergebnis#; " Euro."

Was tun, wenn man mal einen Zeilenumbruch erzeugen will? Eine Lösung besteht darin, einfach in eine Zeile folgendes zu schreiben:

PRINT ""

2.2; Farbige Textausgabe:

Nun bringen wir etwas Farbe ins Spiel. Es geht darum, färbige Texte zu schreiben. Dabei soll sowohl die Textfarbei als auch die Hintergrundfarbe geändert werden.

Um dies zu erreichen, benötigen wir einen neuen Befehl: COLOR. COLOR hat die folgende Syntax:

COLOR Textfarbe, Hintergrundfarbe

Anstelle von Textfarbe bzw. Hintergrundfarbe müssen Farbwerte geschrieben werden. Diese Werte gehen von 0 bis 31. Die Werte 0 bis 15 stellen die 16 Grundfarben dar, die weiteren Farbwerte charakterisieren blinkende Farben. Das heißt, es in Basic auch mit einfachen Mitteln möglich, Texte blinken zu lassen! Blinken kann sowohl die Text- als auch die Hintergrundfarbe!

Bevor ich die einzelnen Farbwerte aufzähle, möchte ich noch ein einfaches Beispiel bringen. Es soll lediglich die Textfarbe zu Rot geändert werden.

CLS
COLOR 12
PRINT "Dieser Text wird in roter Schrift ausgegeben..."

Die einzig relevante Zeile für die Farbumstellung ist die zweite. Interessant ist, dass kein Farbwert für die Hintergrundfarbe angegeben wurde. Dies ist möglich, denn die Angabe für die Hintergrundfarbe ist nicht unbedingt erforderlich. Es kann auch nur die Hintergrundfarbe umgestellt werden. Übrigens, ändert man nur die Hintergrundfarbe, bleibt die Einstellung der Textfarbe wie bisher. Daher bleibt auch die Hintergrundfarbe wie bisher, wenn nur die Textfarbe geändert wird. Will man nur die Hintergrundfarbe ändern, geht das folgendermaßen:

COLOR , Hintergrundfarbe

Es wurde einfach der Wert für die Textfarbe weggelassen, jedoch ein Beistrich stattdessen stehen gelassen.

Nicht blinkende Farben:
0 Schwarz
1 Dunkelblau
2 Dunkelgrün
3 Dunkelzyan
4 Dunkelrot
5 Dunkelviolett
6 Braun
7 Weiß
8 Grau
9 Hellblau
10 Hellgrün
11 Hellzyan
12 Hellrot
13 Hellviolett
14 Gelb
15 Leuchtendes Weiß
Blinkende Farben:
16 blinkendes Schwarz
17 blinkendes Dunkelblau
18 blinkendes Dunkelgrün
19 blinkendes Dunkelzyan
20 blinkendes Dunkelrot
21 blinkendes Dunkelviolett
22 blinkendes Braun
23 blinkendes Weiß
24 blinkendes Grau
25 blinkendes Hellblau
26 blinkendes Hellgrün
27 blinkendes Hellzyan
28 blinkendes Hellrot
29 blinkendes Hellviolett
30 blinkendes Gelb
31 blinkendes, leuchtendes Weiß

Abschließend folglich noch ein Beispiel hierzu:

CLS
COLOR 4,7
PRINT "Dunkelrote Schrift, weißer Hintergrund"
PRINT ""
COLOR 23,0
PRINT "Schwarzer Hintergrund, weiße blinkende Schrift"

Damit das Beispiel funktioniert, muss man allerdings in den reinen DOS-Modus booten. Bei mir funktionierte das Beispiel unter Windows 2000 in der Eingabeaufforderung nicht korrekt. Aus Dokumentationen weiß ich, dass es auch unter Windows 9x (sowie ME) und 3.x in der Eingabeaufforderung nicht richtig funktioniert.

2.3; Cursor positionieren:

Wie Sie höchstwahrscheinlich bereits festgestellt haben, wird unter DOS im Textmodus (in dem wir im Moment noch arbeiten) eine nicht-proportionale Schrift verwendet. Das heißt, das jedes Zeichen gleich viel Platz einnimmt. Aus einem Textverarbeitungsprogramm (wie Word oder StarWriter) kennen Sie es sicher, dass man mehr "i" als "w" in eine Zeile bekommt. Das "i" nimmt einfach weniger Platz ein - klar. Wenn Sie das nächste Beispiel ausprobieren, sehen Sie, dass genau 80 Zeichen in jede Zeile passen. Egal welche Zeichen dargestellt werden.

CLS
PRINT "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
PRINT "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"

Im nächsten Kapitel werden Sie übrigens sehen, dass man derart viele Zeichen hintereinander auch auf eine viel (!) leichtere Art ausgeben kann. Sie haben gesehen, dass genau 80 Zeichen in eine Zeile passen, 25 Zeilen lassen sich am Bildschirm im Textmodus darstellen.

Dies ist wichtig zu wissen, denn nun wollen wir den Cursor positionieren. Um das zu können, muss man wissen in welcher Zeile und Spalte man ihn positionieren möchte. Man könnte z.B. sagen, man möchte nun den Cursor in Zeile 3, Spalte 4 positionieren.

Eine Frage, die bisher noch nicht geklärt wurde: Wozu eigentlich den Cursor positionieren? An der Stelle, an der der Cursor steht wird auch der Text ausgegeben. Positioniert man den Cursor in Zeile 5, Spalte 7, dann wird auch ab dort der folglich ausgegebene Text ausgegeben. Den bisher ausgegebenen Text beeinflusst das natürlich nicht.

Positioniert wird der Cursor mit LOCATE. Syntax:

LOCATE Zeile, Spalte

Der letzte Wert kann auch problemlos weggelassen werden. Will man stattdessen den ersten Wert weglassen, so ist dabei zu beachten, dass ein Beistrich stehen gelassen wird!

Will man den Cursor nur in eine andere Spaltenposition bringen (gleich Zeile), so funktioniert auch folgendes:

PRINT TAB(Spaltenposition);

2.4; Wartezeiten:

Manchmal während des Programmablaufs ist es einfach nötig, eine Wartezeit einzubauen. Angenommen, ein Programm verlangt nach der Eingabe eines Passworts. Wird das Passwort falsch eingegeben, so könnte das Programm die Zeit bis zur nächstmöglichen Passworteingabe beispielsweise um 2 Sekunden verzögern. So könnte man verhindern, dass Benutzer innerhalb kurzer Zeit eine große Anzahl an Passwörtern ausprobieren.

Um eine Wartezeit festzulegen, benötigt man den Befehl SLEEP. Wichtig ist, als Parameter (Parameter sind übrigens die Werte, die an eine Funktion bzw. an einen SUB (Ich habe bisher immer von Befehlen bzw. Anweisungen gesprochen - werde das fast ausnahmslos auch weiterhin tun) übergeben werden. Beispiel: PRINT "Hallo" . Hier ist der Parameter Hallo, er steht unter Anführungszeichen und wird an PRINT übergeben.) anzugeben, wie lange die Wartezeit sein soll. Die Angabe erfolgt in Sekunden.

SLEEP Wartezeit

Programmierbeispiel:

CLS
PRINT "In 10 Sekunden beendet sich das Programm selbstständig..."
SLEEP 10
PRINT "Ende"

2.5; Zufallszahlen erzeugen:

Immer wieder benötigt man einfach Zufallszahlen. Zahlen, die vom Computer erzeugt werden sollen. Seien es 6 beliebige Zahlen, weil es wieder darum geht, den Lottoschein auszufüllen, oder möchte man einfach nur Zufallszahlen erzeugen, diese überprüfen und je nach erzeugter Zahl soll das Programm eine andere Funktion ausführen. Das soll man aber nicht falsch verstehen. Man sollte Zufallszahlen nicht erzeugen und überprüfen mit dem Ziel, sollte die richtige Zahl herauskommen funktioniert das Programme, ansonsten hätte der Benutzer eben Pech gehabt.

Zunächst einmal muss der Zufallsgenerator initialisiert werden:

RANDOMIZE TIMER

Nun kann mit RND (Abk. für random) eine Zufallszahl erzeugt werden:

RND

Das nächste Beispiel demonstriert gleich die Verwendung:

CLS
RANDOMIZE TIMER
PRINT RND

Wie üblich ist das Beispiel kurz und knapp gehalten, um keine unnötige Verwirrung hervorzurufen. Es beschränkt sich rein auf die wesentlichen Elemente. (von CLS aus optischen Gründen einmal abgesehen) Zunächst wird der Zufallsgenerator initalisiert (Zeile 2), dann liefert RND eine Zufallszahl. Wichtig ist hierbei, dass man bedenken muss, dass RND einen Rückgabewert liefert. Das heißt, RND liefert einen Wert zurück. Wir könnten diesen Wert auch direkt in einer Variable abspeichern. Das würde dann so aussehen:

CLS
RANDOMIZE TIMER
variable = RND

Hier hätte RND die Aufgabe, den Wert direkt an die Variable zu übergeben, daher der Variable den Wert zuzuweisen. Vorhin jedoch wurde der Wert nicht an eine Variable "abgegeben", sondern an PRINT. Somit konnten wir den erzeugten Wert gleich ausgeben.


Vorheriges Kapitel Nächstes Kapitel