Magic Disk 64

home to index to text: MD8911-KURSE-BASIC_KURS_TEIL_9-2.txt
 3.) Die kleinen, aber feinen,   Sonder-
funktionen.                             

Im letzten Abschnitt dieses Artikels möchte ich mich noch ein wenig um ein paar kleine Sonderfunktionen kümmern, die BASIC so bietet. Diese kann man nicht einfach unter einem Überbegriff zusammenfassen, denn jede Funktion erledigt jeweils eine in sich abgeschlossene Aufgabe. Fangen wir einmal mit einer der Wichtigsten dieser Funktionen an, der RND-Funktion :
RND steht für RaNDom, was soviel heißt wie Zufall. Mit dieser Funktion können wir uns Zufallszahlen liefern lassen, wie sie in einer Fülle von Spielprogrammen ihre Verwendung finden. Erst einmal zur Arbeitsweise von RND. Mit dem Ausdruck RND( X) liefert Ihnen der C64 einen Zufallswert zwischn 0 und eins, wobei der Wert von X keine Rolle spielt ( X ist eine Variable) . Da man aber meist wenig mit solchen Dezimalbrüchen zwischen 0 und 1 anfangen kann, gibt es auch eine besondere Formel, mit denen man sich auch ganze Zahlen ( also OHNE Kommastellen) in einem vordefinierten Wertebereich abrufen kann. Diese Formel lautet folgendermaßen:
ZU= INT( RND(1)* Y)+ X Wobei X für die untere, und Y für die obere Zahlengrenze steht. Wollten wir also ein kleines Lottoprogramm schreiben, a la "6 aus 49", so müßte unser Ausdruck folgendermaßen lauten :

ZU=INT(RND(1)*49)+1                     

Ich habe hier einmal die Werte von X und Y schon direkt eingesetzt. Natürlich könnten Sie auch unsere allgemeine Formel benutzen und vorher in X und Y bestimmte Werte festlegen.
Es sei jedoch noch zu erwähnen, daß die Zufallszahlen, die RND liefert nicht unbedingt " zufällig" sind. Der 64 er ist eben ein Computer und bei diesen geht alles immer korrekt und logisch zu. Die Zufallszahlen, die RND liefert werden deshalb immer auch nach einem bestimmten Schema berechnet, so daß es Ihnen gut passieren kann, daß Sie, wenn Sie den Rechner gerade frisch eingeschaltet haben immer dieselben Zufallszahlen erhalten. Probieren Sie das doch einmal aus.
Lassen Sie sich einmal ein paar Zufallszahlen, direkt nach dem Einschalten des 64 ers ausgeben, schalten Sie dann wieder AUS und EIN, und rufen Sie wieder mit RND ein paar Zahlen ab. Sie werden feststellen, daß diese haargenau dieselben sind, die wir vorher auch hatten. Das kann höchst negative Auswirkungen auf ein Spiel haben, zumal Sie bei dem Lottobeispiel von oben immer dieselben Ziehungen hätten.
Um dieses Problem zu umgehen gibt es einen kleinen Trick. Der 64 er verwaltet nämlich auch eine kleine interne Uhr.
Diese Uhr benutzt zwei vordefinierte Variablen, ähnlich wie bei ST. Diese Variablennamen dürfen Sie nie für eigene Zwecke benutzen, da sie vom System vordefinierte Werte enthalten. Zum einen wäre da die interne Uhr TI$ . TI$ ist eine Stringvariable, wie man zweifellos erkennen kann. In ihr steht eine immer abrufbereite, interne Uhr zur Verfügung.
Wenn Sie also PRINT TI$ eingeben, so wird der C64 Ihnen die Zeit, seitdem Sie ihren Rechner eingeschaltet haben anzeigen, in dem Format HHMMSS, wobei HH für Stunde steht, MM für Minute und SS für Sekunde. Möchten Sie diese Uhr nun auf einen eigenen Wert setzen, weil Sie zum Beispiel die aktuelle Tageszeit in einem Programm verwenden wollen, so kann man dies mit einer einfachen Variablendefinition bewerkstelligen. Angenommen es ist 10 Uhr 42 und 15 Sekunden, dann reicht folgende Definition vollkommen aus:
TI$="104215" Anschließed steht diese Zeit in der internen Uhr gespeichert, die die Sekunden von diesem Zeitpunkt an mitzählt.
Die zweite Variable, die etwas mit der Uhr zu tun hat, und die wir auch benötigen, um mit RND " richtige" Zufallszahlen zu erhalten, heißt TI. Wie Sie sehen eine numerische Variable. TI wird nun alle 1/60- Sekunde vom C64 hochgezählt.
Das wiederholt sich solange bis Sie TI$ wieder neu setzen. TI selbst können Sie nicht verändern. Man kann diese Variable gut in Programmen benutzt werden, die ziemlich genau arbeiten sollen, jedoch sei gesagt, daß BASIC wahrscheinlich zu langsam ist, als daß solche Veränderungen von BASIC schnell genug festgestellt werden könnten. Sie können ja einmal ein bißchen mit TI herumexperimentieren. . .
Es sei ebenfalls noch erwähnt, daß die interne Uhr TI$ sehr, sehr, ungenau ist.
Es ist gut möglich, daß sie innerhalb von 24 Stunden um eine halbe Stunde ( !) von der wirklichen Zeit abweichen kann.
Auch wenn Sie irgendwelche Operationen mit Ihrem Diskettenlaufwerk machen, kann die Uhr gebremst werden. Bei Diskettenoperationen wird sie nämlich gänzlich abgeschaltet, so daß die Zeit, in der die Floppy tätig war erst gar nicht gezählt wurde. Solche Abweichungen können sich sehr schnell summieren, so daß die Uhr am Ende total falsch geht. Also Vorsicht bei der Benutzung von TI$ . . .
(" richtige" Uhren kann man eigntlich nur in Assembler programmieren, doch ich glaube, daß wir auch schon einmal auf einer Magic Disk dieses Problem eingehender Behandelt haben) Nun noch zu der Sache mit den Zufallszahlen. TI spielt dabei eine große Rolle. Um praktisch die internen Zufallszahlen " zu mischen" benutzt man nämlich einfach folgenden Ausdruck:
X= RND(- TI) Was wir hier als Ergebnis in X erhalten kann ignoriert werden. Wichtig ist, daß wir nun die Zufallszahlen durcheinandergeworfen haben, so daß wir ab jetzt sehr gut mit unserer Allgemeinformel Zufallswerte abrufen können, die jetzt auch verschieden voneinander sind.
In unserer allgemeinen Formel für Zufallszahlen zwischen X und Y ist Ihnen bestimmt der merkwürdige Ausdruck INT aufgefallen. INT stellt ebenfalls eine besondere Funktion dar, dieser Befehl schneidet nämlich ganz einfach bei einer Dezimalzahl den Nachkommastellen ab. Das heißt, daß beispielsweise die Zahl 2 .54873 zu einer einfachen 2 reduziert wird. Die mit INT erhaltenen Zahlen sind also immer gleich oder kleiner als die Ursprungszahl. Bei negativen Zahlen bedeutet das, das immer auf die nächst kleinere Zahl abgeschnitten wird, demnach ist INT(-2 .54873) gleich -3, weil -3 ja kleiner ist als -2 !
Ansonsten hätten wir da noch FRE( X) .
FRE( X) gibt einem den noch verfügbaren Basicspeicher an, wobei es egal ist, welchen Wert X enthält. Allerdings ist diese Funktion etwas fehlerhaft. Es ist quasi unter C64- Kennern ein alter Fehler, der schon von Anfang an im Betriebssystem enthalten war, und meines Wissens niemals geändert wurde. Es benötigt nämlich einer besonderen Formel, um den tatsächlichen freien Speicherplatz zu ermitteln. Geben Sie nämlich nur FRE(0) ein, so wird Ihnen Ihr 64 er eine negative Zahl ausspucken, mit der wir im Endeffekt ja garnichts richtig anfangen können. Um die wahre Anzahl der freien Bytes zu erhalten, müssen Sie mit der folgenden Formel arbeiten :

PRINT 65538+FRE(0)                      

Nun haben Sie den richtigen Wert.
Damit sind wir nun endgültig am Ende unseres Basickurses angelangt. Ich verabschiede mich zunächst von Ihnen und hoffe, Ihnen die Programmierung Ihres C64 einigermaßen verständlich veranschaulicht zu haben.

                        Ihr Uli Basters 

Valid HTML 4.0 Transitional Valid CSS!