34 lines
1.5 KiB
QBasic
34 lines
1.5 KiB
QBasic
10 PRINT CHR$(147):POKE 53280,5:POKE 53281,0
|
|
20 PRINT " SNAKE TRAIL":PRINT
|
|
30 PRINT "EAT THE DOTS. AVOID WALLS AND YOUR TAIL."
|
|
40 PRINT "W A S D=MOVE Q=QUIT":PRINT:PRINT "PRESS ANY KEY"
|
|
50 GET A$:IF A$="" THEN 50
|
|
60 R=RND(-TI):DIM X(900),Y(900):L=4:DX=1:DY=0:S=0
|
|
70 FOR I=1 TO L:X(I)=21-I:Y(I)=12:NEXT:GOSUB 240
|
|
80 PRINT CHR$(147):FOR I=0 TO 39:POKE 1024+I,160:POKE 1984+I,160:NEXT
|
|
90 FOR I=1 TO 23:POKE 1024+I*40,160:POKE 1063+I*40,160:NEXT
|
|
100 FOR I=1 TO L:POKE 1024+Y(I)*40+X(I),81:NEXT:GOSUB 250
|
|
110 GET A$:IF A$="Q" THEN 330
|
|
120 IF A$="W" AND DY=0 THEN DX=0:DY=-1
|
|
130 IF A$="S" AND DY=0 THEN DX=0:DY=1
|
|
140 IF A$="A" AND DX=0 THEN DX=-1:DY=0
|
|
150 IF A$="D" AND DX=0 THEN DX=1:DY=0
|
|
160 NX=X(1)+DX:NY=Y(1)+DY:IF NX<1 OR NX>38 OR NY<1 OR NY>23 THEN 300
|
|
170 FOR I=1 TO L:IF NX=X(I) AND NY=Y(I) THEN 300
|
|
180 NEXT:E=0:IF NX=FX AND NY=FY THEN E=1
|
|
190 IF E=0 THEN POKE 1024+Y(L)*40+X(L),32
|
|
200 IF E THEN L=L+1:S=S+10
|
|
210 FOR I=L TO 2 STEP -1:X(I)=X(I-1):Y(I)=Y(I-1):NEXT
|
|
220 X(1)=NX:Y(1)=NY:POKE 1024+NY*40+NX,81
|
|
230 IF E THEN GOSUB 240:GOSUB 250
|
|
235 PRINT CHR$(19);" SCORE";S;" LENGTH";L;" ":FOR D=1 TO 45:NEXT:GOTO 110
|
|
240 FX=INT(RND(1)*38)+1:FY=INT(RND(1)*23)+1:F=0
|
|
245 FOR J=1 TO L:IF FX=X(J) AND FY=Y(J) THEN F=1
|
|
247 NEXT:IF F THEN 240
|
|
248 RETURN
|
|
250 POKE 1024+FY*40+FX,46:POKE 55296+FY*40+FX,7:RETURN
|
|
300 PRINT CHR$(147):PRINT "SNAKE CRASHED! SCORE";S:PRINT
|
|
310 PRINT "R=REPLAY Q=QUIT"
|
|
320 GET A$:IF A$="R" THEN RUN
|
|
325 IF A$<>"Q" THEN 320
|
|
330 POKE 53280,14:POKE 53281,6:PRINT CHR$(147):END
|