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