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 erle- digt 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 Spielprogram- men ihre Verwendung finden. Erst einmal zur Arbeitsweise von RND. Mit dem Aus- druck 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 Kommastel- len) in einem vordefinierten Wertebe- reich 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 schrei- ben, 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 For- mel benutzen und vorher in X und Y be- stimmte Werte festlegen. Es sei jedoch noch zu erwähnen, daß die Zufallszahlen, die RND liefert nicht unbedingt "zufällig" sind. Der 64er 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 ha- ben immer dieselben Zufallszahlen erhal- ten. Probieren Sie das doch einmal aus. Lassen Sie sich einmal ein paar Zufalls- zahlen, direkt nach dem Einschalten des 64ers ausgeben, schalten Sie dann wieder AUS und EIN, und rufen Sie wieder mit RND ein paar Zahlen ab. Sie werden fest- stellen, daß diese haargenau dieselben sind, die wir vorher auch hatten. Das kann höchst negative Auswirkungen auf ein Spiel haben, zumal Sie bei dem Lot- tobeispiel von oben immer dieselben Zie- hungen hätten. Um dieses Problem zu umgehen gibt es einen kleinen Trick. Der 64er 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 vor- definierte 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 anzei- gen, 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 Variablendefi- nition 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 in- ternen 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öti- gen, 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änderun- gen 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 Disketten- operationen 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ön- nen 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 einge- hender Behandelt haben) Nun noch zu der Sache mit den Zufalls- zahlen. TI spielt dabei eine große Rol- le. Um praktisch die internen Zufalls- zahlen "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 durcheinander- geworfen haben, so daß wir ab jetzt sehr gut mit unserer Allgemeinformel Zufalls- werte abrufen können, die jetzt auch verschieden voneinander sind. In unserer allgemeinen Formel für Zu- fallszahlen 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 be- deutet das, das immer auf die nächst kleinere Zahl abgeschnitten wird, dem- nach 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 Feh- ler, der schon von Anfang an im Be- triebssystem 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 64er 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 ver- abschiede mich zunächst von Ihnen und hoffe, Ihnen die Programmierung Ihres C64 einigermaßen verständlich veran- schaulicht zu haben.
Ihr Uli Basters