DRAW
DRAW | |
Syntax: | DRAW <str>, <x>, <y>, <f> |
Parameter | |
str: String für die Richtungsdefinitionen | |
x: X-Koordinate (0..319 bzw. 0..159) | |
y: Y-Koordinate (0..199) | |
f: Farbquelle (0..4) | |
Einordnung | |
Typ: | Anweisung |
Kontext: | Grafik |
Aufgabe: | Definieren einer Figur |
Abkürzung: | keine (TSB: dR) |
Token: | $64 $0a (100 10) |
Verwandte Befehle | |
ROT |
Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort DRAW.
Typ: Anweisung
Syntax: DRAW <str>, <x>, <y>, <f>
DRAW ist das schlechte Ergebnis einer guten Idee. Der Befehl dient dazu, immer gleich aussehende Linienzüge platzsparend und flexibel in Simons' Basic eingeben zu können. Dazu hat sich David Simons einen Befehl ausgedacht, der ein bisschen die Turtle-Grafik der Programmiersprachen LOGO oder Comal widerspiegeln sollte. Der Befehl enthält Anweisungen, um den Grafikcursor in eine bestimmte Richtung zu bewegen (in LOGO heißt das "vorwärts" oder kurz "vw"), dabei den Schreibstift entweder hochzuheben (damit er nicht schreibt) oder abzusenken (dann geht's los mit dem Malen), was in LOGO "stift hoch" oder "stift ab" genannt wird. Alle diese Dinge enthält DRAW auch.
Der große Nachteil ist aber nun, dass man diesen Richtungsanweisungen nicht individuell sagen kann, wie weit sie gehen sollen. Dafür gibt es einen Extrabefehl (ROT), der dann für die gesamte Anweisungsfolge gilt. Es wäre auch schön, wenn man andere als nur rechte Winkel verwenden dürfte, aber das ist bei DRAW nicht vorgesehen. Man kann nur das gesamte "Objekt" drehen (wiederum mit ROT), aber auch hier nur in 45-Grad-Schritten, die zudem noch ein ums andere Mal linear vergrößern, also das Objekt verändern.
Funktionsweise im Detail:
Der erste Parameter (<str>) ist ein String, der in Form von Ziffern zwischen 0 und 9 die Richtungsbefehle enthält.
Richtungsbefehl | ohne zu zeichnen, nach... |
Richtungsbefehl | mit zeichnen, nach... |
0 | rechts | 5 | rechts |
1 | oben | 6 | oben |
2 | unten | 7 | unten |
3 | links | 8 | links |
4 | (unten) | 9 | Stop |
Die Ziffer "9" beendet das Abarbeiten eines Strings, auch wenn darin noch mehr folgen sollte. Das ist ganz nützlich, um in so einem String Kommentare unterzubringen, ohne den Interpreter zu stören. Wie immer in BASIC darf ein String jedoch insgesamt nicht länger sein als 255 Zeichen.
Die beiden folgenden Parameter <x> und <y> legen den Startpunkt des Objekts fest, und zwar dessen linke obere Ecke. Der letzte Parameter ist die in Simons' Basic übliche Angabe der Farbquelle bei Grafikbefehlen. Siehe auch HIRES.
Wird kein Parameter eingegeben, so erscheint die Fehlermeldung ?SYNTAX ERROR, bei einem falschen Wert erscheint ?BAD MODE ERROR.
Beispiel[Bearbeiten | Quelltext bearbeiten]
100 w$="777755662255666600" 110 i$="727700" 115 k$="1111777711562577001111" 120 DIM s%(1) 125 HIRES 1,0: x=160: y=100: s=8 130 s%(0)=s: s%(1)=s-s/4 135 d$=w$+i$+k$+i$ 140 REPEAT : GET x$: FOR w=0 TO 7 150 ROT w,s%(w AND 1): DRAW d$,x,y,1 160 DRAW d$,x,y,0 170 NEXT 180 UNTIL x$>"" 185 ROT 0,s: DRAW d$,x,y,1 190 WAIT 198,255
Das Programm erzeugt das Beispielbild.
Die Größe des Objekts wird mit s in Zeile 125 definiert. Da beim Drehen mit Mehrfachen von 45 Grad Verzerrungen entstehen (das Objekt wird ein Viertel größer), werden diese in den Zeilen 130 und 150 wieder herausgerechnet. Korrekterweise müsste die Formel statt s%(1)=s-s/4 lauten: s%(1)=int(s/sqr(2)+.5), was in diesem Fall auf das gleiche Ergebnis hinausläuft.
$ | % | @ | 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