10 REM SNAKE - DIE BILDSCHIRM-SCHLANGE
20 REM A.HERRMANN	15.12.83
30 REM
70 DIM Q%(200,2) : IMAX%=200
80 CTRLZ$=CHR$(&H1A)
82 ESC%=&H1B
84 ESC$=CHR$(ESC%)
90 REM
100 PRINT CTRLZ$;"SNAKE - die Bildschirm-Schlange" : PRINT
102 PRINT "(Abbruch mit ESC)" : PRINT
104 INPUT "Fenster (0,0 .. 159,95) ",XMIN%,YMIN%,XMAX%,YMAX%
106 CALL WINDOW(XMIN%,YMIN%,XMAX%,YMAX%)
108 XMAX%=XMAX%-XMIN% : XMIN%=0
109 YMAX%=YMAX%-YMIN% : YMIN%=0
110 INPUT "DX,DY (0,0 = Ende) = ",DX%,DY%
112 IF DX%=0 AND DY%=0 GOTO 330
120 IF DX%>DY% THEN L%=DX% ELSE L%=DY%
122 IF L%>IMAX% GOTO 110
130 IX=DX%/L% : IY=DY%/L%
132 L%=L%+1
140 X=1.5 : Y=1.5
150 PRINT CTRLZ$;ESC$;"A "	: REM CLEAR SCREEN, CURSOR OFF
160 PEN%=1
162 CALL LINETO(XMIN%,YMAX%,PEN%)
164 CALL LINETO(XMAX%,YMAX%,PEN%)
166 CALL LINETO(XMAX%,YMIN%,PEN%)
168 CALL LINETO(XMIN%,YMIN%,PEN%)
190 REM
200 I%=0 : J%=-1
210 X%=Q%(I%,1) : Y%=Q%(I%,2)
220 PEN%=0 : CALL PUTP(X%,Y%,PEN%)
230 X%=FIX(X) : Y%=FIX(Y)
232 IF X%<>0 OR Y%<>0 GOTO 240
234 IF I%=J% GOTO 310
236 IF J%=-1 THEN J%=I%
237 I% = (I%+1) MOD (L%)
238 GOTO 210
240 IF X%>XMIN% AND X%<XMAX% GOTO 250
242 IX=-IX : X=X+IX : X%=FIX(X)
250 IF Y%>YMIN% AND Y%<YMAX% GOTO 260
252 IY=-IY : Y=Y+IY : Y%=FIX(Y)
260 Q%(I%,1)=X% : Q%(I%,2)=Y%
270 PEN%=1 : CALL PUTP(X%,Y%,PEN%)
280 I% = (I%+1) MOD (L%)
290 X=X+IX*INT(RND*2-0.5) : Y=Y+IY*INT(RND*2-0.5)
300 IF INP(05)<>ESC% GOTO 210	: REM NO ESCAPE ?
310 PRINT ESC$;"A";CHR$(&H22)	: REM CLEAR SCREEN, CURSOR ON
320 GOTO 100
330 END
