TEST
TEST | |
Syntax: | TEST(<x>,<y>) |
Parameter | |
x: X-Koordinate des Grafikpunktes (0..319 / 0..159) | |
y: Y-Koordinate des Grafikpunktes (0..199) | |
Einordnung | |
Typ: | numerische Funktion |
Kontext: | Grafik |
Aufgabe: | Prüfen, ob ein Punkt gesetzt ist |
Abkürzung: | keine (TSB: tE) |
Token: | $64 $58 (100 88) |
Verwandte Befehle | |
keine |
Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort TEST.
Typ: numerische Funktion Syntax: TEST(<x>,<y>)
TEST dient dazu, herauszufinden, ob ein Punkt gesetzt ist (in der Farbe <ink> erscheint, siehe HIRES) oder nicht (also in der Hintergrundfarbe erscheint). Zulässige Werte für <x> sind 0..319 (im Hires-Modus) bzw. 0..159 (im Multicolor-Modus). Für <y> sind in beiden Fällen Werte von 0 bis 199 erlaubt. Der Punkt 0,0 ist in der linken oberen Ecke.
Im Multicolor-Modus liefert die Funktion den Wert der Farbquelle zurück: 0 ist die Hintergrundfarbe (gleichbedeutend mit "Punkt nicht gesetzt"), 1..3 sind die entsprechenden Farbquellen bei MULTI bzw. LOW COL. Diese Werte werden auch in der Systemvariablen ST (STATUS) zwischengespeichert und sind dort abrufbar, bis ST geändert wird. Das Handbuch erwähnt diese beiden Eigenschaften von TEST nicht.
Wird kein Argument in der Funktion angegeben, so erscheint die Fehlermeldung ?SYNTAX ERROR, bei einem falschen Wert erscheint ?ILLEGAL QUANTITY ERROR.
Anmerkung: TEST führt intern ein PLOT mit dem Wert 11 für die Farbquelle aus. Es ist auch möglich, direkt mit PLOT zu testen, wobei das Ergebnis dann nur in ST zur Verfügung steht.
Beispiel[Bearbeiten | Quelltext bearbeiten]
Das Beispiel erzeugt die abgebildete Grafik; vv steuert die Neigung der Kugel - (-π..+π), mit u wird festgestellt, ob ein Punkt auf der Kugel sichtbar ist; TEST prüft, ob an der aktuellen Stelle im Buchstaben selbst ein Bit gesetzt ist oder nicht.
Beispiel übernommen und angepasst aus dem Buch Spiele mit Computergrafik.
(Die Abarbeitungszeit auf einem Original-C64 ist sehr lang.)
100 HIRES 8,11: bb=-1: vv=.6 105 CIRCLE 160,100,100,100,1: PAINT 160,100,1 Anfangskreis malen und füllen 110 BLOCK 0,0,8,8,0 120 a=a+1: IF a>26 THEN a=1 Buchstaben schreiben 130 CHAR 0,0,a,1,1 140 bb=b+.008/COS(bb): ll=ll+.2/COS(bb) 150 IF bb>1.45 THEN 240 160 FOR i=0 TO 8 STEP .5: FOR j=0 TO 8 STEP .5 170 IF TEST(i,8-j)=0 THEN 230 180 b=bb+.02*j: l=ll+.02/COS(bb)*i 190 x=SIN(l)*COS(b): y=COS(l)*COS(b): z=SIN(b) Buchstaben auf die Kugel übertragen 200 u=y*COS(vv)+z*SIN(vv): v=-y*SIN(vv)+z*COS(vv) 210 IF u<0 THEN i=8: j=8: GOTO 230 220 PLOT 160+100*x,100-100*v,0 230 NEXT: NEXT: GOTO 110 240 CIRCLE 160,100,100,100,1 250 BLOCK 0,0,8,8,0 Schlusskreis malen 260 WAIT 198,255
$ | % | @ | ANGL | ARC | AT | AUTO | BCKGNDS | BFLASH | BLOCK | CALL | CENTRE | CGOTO | CHAR | CHECK | CIRCLE | CMOB | COLD | COLOUR | COPY | CSET | DELAY | DESIGN | DETECT | DIR | DISABLE | DISAPA | DISK | DISPLAY | DIV | DOWN | DRAW | DUMP | DUP | ELSE | END LOOP | END PROC | ENVELOPE | ERRLN | ERRN | EXEC | EXIT | EXOR | FCHR | FCOL | FETCH | FILL | FIND | FLASH | FRAC | GLOBAL | GRAPHICS | HI COL | HIRES | HRDCPY | INKEY | INSERT | INST | INV | JOY | KEY | LEFT | LIN | LINE | LOCAL | LOOP | LOW COL | MEM | MERGE | MMOB | MOB OFF | MOB SET | MOD | MOVE | MULTI | MUSIC | NO ERROR | NRM | OFF | OLD | ON ERROR | ON KEY | OPTION | OUT | PAGE | PAINT | PAUSE | PENX | PENY | PLACE | PLAY | PLOT | POT | PROC | RCOMP | REC | RENUMBER | REPEAT | RESET | RESUME | RETRACE | RIGHT | RLOCMOB | ROT | SCRLD | SCRSV | SECURE | SOUND | TEST | TEXT | TRACE | UNTIL | UP | USE | VOL | WAVE