Logo PC/GEOS auf dem Mac R-Basic GEOS-PCs Dateien GeoStream

Die Eieruhr - Zeile für Zeile zum eigenen Programm

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 inkl. 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.

Los geht's.

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".

   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 - Ein Dreieinhalb-Minuten-Ei ;-)"

Das Kommando LOCATE positioniert den Cursor für das folgende Kommando INPUT in Zeile 4 und Spalte 33:

   Locate 4,33
INPUT 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);"Herunterzählen durch Halten der ESC-Taste abbrechen.  "

Nun beginnt der Teil des Programms, der für das Herunterzählen der Sekunden zuständig ist.

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 THEN
Wurde ESC gedrückt, wird die bereits vorhandene Textzeile mit diesem Text überschrieben:
   Print at(6,1);"Die 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

Ab hier kümmert sich das Programm um den Alarm der Eieruhr

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

Eieruhr 1.0.0 herunterladen - Klassik-Basic Version. 12.02.10

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.

Weiterführende Links

Alarm!. Die Objekt-Version der Eieruhr.
© Bernd Mützel Aktualisiert 20.08.2015 Impressum Zum Seitenanfang