12.02.10 - Mit der Eieruhr habe ich versucht, ein Beispielprogramm zu schreiben, das man auch tatsächlich halbwegs sinnvoll einsetzen könnte. Es verwendet eine ganze Reihe unterschiedlicher Kommandos, ist aber trotz dreier Kommentarzeilen insgesamt nur 34 Zeilen lang. Also ein echtes Einsteigerprojekt :-)
Das Tutorial ist etwas umfangreicher geworden als zuerst beabsichtigt, doch zum besseren Verständnis der Zusammenhänge wollte ich möglichst viele Einzelheiten zumindest kurz erwähnt haben. Am Ende der Seite finden Sie den Programmcode auch zusammengefasst in einem Bildschirmfoto, damit Sie ihre abgetippten Programmzeilen leichter kontrollieren können.
Um mit dem Programmieren zu beginnen, starten Sie R-Basic und wählen in der Dialogbox den Knopf
"Neu - Ein neues BASIC-Programm anlegen" aus. Nachdem Sie ein paar Zeilen Programmcode geschrieben haben, sollten Sie Ihr Programm abspeichern. Wenn Ihnen der Name Eieruhr nicht gefällt, können Sie das Programm auch Countdown oder Wecker nennen, oder wie immer Sie mögen.
Der Programmcode beginnt mit einer Kommentarzeile, die beschreibt, wie das Programm heisst, wer der Autor ist und wann die letzte Änderung vorgenommen wurde. Kommentarzeilen können mit einem Hochkomma, einem Ausrufezeichen oder dem Wort REM beginnen.
'Eieruhr, DeinName, 12.02.10
Mit DIM werden R-Basic die zwei im Programm benötigten Variablen mitgeteilt. Programmierer sagen: "Sie werden definiert". In diesem Tutorial finden Sie weitere Informationen zu Variablen.
DIM zeit, farbe
Die beiden folgenden Kommandos bauen in diesem Fall auf einander auf und gehören somit zusammen. COLOR setzt die Farbwerte für die Vordergrundfarbe (wird von der Schrift benutzt, in diesem Fall weiß = 15) und für die Hintergrundfarbe des Programmfensters (in diesem Fall hellgrau = 7).
Color 15,7
Cls löscht den gesamten Inhalt des Programmfensters in der eingestellten Hintergrundfarbe (voreingestellt ist blau, in diesem Fall aber in der zuvor von Color gesetzten Farbe hellgrau).
Cls
Durch das Kommando Delay lässt sich der Programmablauf für eine bestimmte Zeitspanne verzögern, der Wert 60 entspricht einer Verzögerung von einer Sekunde. In dieser Zeile wird das Kommando lediglich aktiviert. Die eigentliche Verzögerung wird weiter unten im Programm benötigt und durch einen erneuten Aufruf des Kommandos Delay (dann aber ohne Angabe eines Wertes) ausgelöst.
Delay 60
Hier folgen vier Zeilen Text. Das Kommando PRINT zusammen mit dem Parameter AT(Zeile,Spalte) ermöglicht die genaue Positionierung des Textes im unsichtbar nach Spalten und Zeilen aufgeteilten Programmfenster. Der Text muss in doppelten Anführungszeichen stehen.
Print at(1,24);"*** Eieruhr ***" Print at(3,1);"Geben Sie eine Alarmzeit in Sekunden ein" Print at(4,1);"und drücken Sie die Enter-Taste:" Print at(6,1);"Beispiel: 210 - Ergäbe ein weiches Dreieinhalb-Minuten-Ei ;-)"
Das Kommando LOCATE positioniert den Cursor für das folgende Kommando INPUT in Zeile 4 und Spalte 33.
Locate 4,33INPUT wartet auf eine Tastatureingabe des Benutzers und teilt dies normalerweise durch die Anzeige eines Fragezeichens mit. Die zwei unmittelbar nacheinander folgenden doppelten Anführungszeichen verhindern jedoch die Anzeige des Fragezeichens. Anschließend folgt das Semikolon und als Letztes der Name der weiter oben mit dem Befehl DIM definierten Variable "zeit". In dieser Variable speichert das Kommando INPUT die Tastatureingabe des Benutzers.
Input ""; zeit
Nachdem der Benutzer eine Zahl eingegeben und Enter gedrückt hat, läuft das Programm weiter. Der bereits vorhandene Text, der in Zeile 6 bei Spalte 1 beginnt, wird mit einem neuen Text überschrieben. Die Leerzeichen am Ende überschreiben die Reste der alten Textzeile, da diese länger war.
Print at(6,1);"Alarm vorzeitig abbrechen durch Halten der ESC-Taste. "
Zuerst wird eine Pause von einer knappen Sekunde eingelegt. Hat der Benutzer mit INPUT z.B eine 12 eingegeben, bleibt diese Zahl nun für ca. eine Sekunde sichtbar, bevor weiter unten im Programm eine Sekunde später die 11 als nächste Zahl angezeigt wird. Das Kommando PAUSE wartet in 1/10-Sekundenschritten, PAUSE 10 wäre also eine Sekunde Pause. Bei mir hat eine etwas kürzere Zeitspanne zu einer genaueren Wartezeit geführt. Dies hängt u.a. damit zusammen, dass auch etwas Zeit für die Ausführung der anderen Befehle verloren geht. Auf unterschiedlich schnellen Rechnern kann die Zeitdifferenz ebenfalls unterschiedlich lang ausfallen.
Pause 8
Mit FOR beginnt eine so genannte Zählschleife, die über mehrere Zeile bis zum Kommando NEXT reicht. Alles, was zwischen diesen beiden Kommandos steht, wird so oft wiederholt, wie es in der ersten Zeile vereinbart ist.
Direkt hinter dem Kommando FOR steht wieder unsere Variable "zeit", die mittlerweile eine Zahl von der Eingabe durch INPUT enthält. Nehmen wir an, es wurde eine 12 eingegeben. Umgangssprachlich übersetzt heisst diese Zeile dann:
Wiederhole die Schleife so oft, bis sie in Einerschritten von 12 bis 0 heruntergezählt hat.
Oder auch: 11 = 12 BIS 0 IN EINERSCHRITTEN
FOR zeit = zeit TO 0 STEP -1
Nun wird bei jedem Durchlauf der Zählschleife geprüft, ob die ESC-Taste gedrückt ist. Falls ja, nimmt das Programm einen anderen Verlauf. Umgangssprachlich übersetzt heisst die Zeile etwa:
Wenn das Kommando GetKey den Wert 65307 (den Dezimalwert der ESC-Taste) zurückliefert, dann verarbeite alle Zeilen, die bis zum Kommando END IF folgen. Andernfalls mache sofort hinter der Zeile END IF weiter.
IF GetKey = 65307 THENWurde ESC gedrückt, wird die bereits vorhandene Textzeile mit diesem Text überschrieben.
Print at(6,1);"Eieruhr wurde vorzeitig beendet. "
Das Kommando END macht genau, was der Name sagt, es beendet das Programm sofort. Eine Verarbeitung der nachfolgenden Programmzeilen findet nicht mehr statt.
END
Hier endet der Bereich der Verzweigung. Das Programm läuft hinter END IF weiter, wenn ESC nicht gedrückt wurde.
END IF
Der Cursor wird wieder hinter dem INPUT-Kommando von vorhin positioniert.
LOCATE 4,33
Und zum ersten Mal wird die durch die Zählschleife um 1 verringerte Benutzereingabe angezeigt.
Print zeit;
Ebenfalls zum ersten Mal wird das vorhin aktivierte Delay-Kommando aufgerufen, um in der vorhin definierten Zeit (eine Sekunde) zu warten.
Delay
Mit NEXT geht's wieder nach oben zum Anfang der Zählschleife, wenn der Zähler noch nicht bei Null angekommen ist. Andernfalls verlässt das Programm die Schleife und macht in der Zeile hinter NEXT weiter.
NEXT
Der letzte Abschnitt des Programms ist komplett in eine WHILE-WEND-Schleife eingeschlossen. Die Schleife wird solange wiederholt, bis Sie irgend eine Taste drücken und damit das Programm beenden. WHILE ruft dazu vor jedem Schleifendurchlauf das Kommando GetKey auf und prüft, ob GetKey den Wert Null zurückmeldet. Andere Werte als Null repräsentieren bestimmte Tastendrücke, 65307 ist z.B. der Wert für die ESC-Taste.
WHILE GetKey = 0
Jetzt wieder eine Verzweigung. Diesmal wird der Variable "farbe" jeweils einer von zwei Farbwerten zugewiesen. Weil einer der beiden Farbwerte mit dem Farbwert der Fensterhintergrundfarbe übereinstimmt, wird die Textzeile bei jedem zweiten Schleifendurchlauf in der gleichen Farbe wie der Hintergrund dargestellt und damit unsichtbar. So entsteht der Effekt einer blinkenden Textzeile.
IF farbe = 7 THEN
Die Variable "farbe" erhält den Wert 14 zugewiesen.
farbe = 14
oder...
ELSE
den Wert 7.
farbe = 7
Hier endet der Bereich der Verzweigungen und es geht in der nächsten Zeile weiter.
END IF
Zum letzten Mal wird eine vorhandene Textzeile durch eine neue ersetzt.
Print at(6,1);Ink(farbe);"Alarm durch Halten einer beliebigen Taste beenden. "
Ein Piepton wird ausgegeben.
Beep
Eine Sekunde warten.
Delay
Und wieder nach oben zum Anfang der Schleife.
WEND
Weiterführende Informationen zu den einzelnen Kommandos finden Sie in der R-Basic Helpdatei, oder indem Sie den Cursor hinter einem eingetippten Kommando platzieren und dann F2 drücken.