0 REM SET TO 40X30 CHARS SCREEN 1 SCREEN 0 2 HM$=CHR$(19) : REM HOME CHARACTER 3 DIM EX(9) 4 FOR T=0TO8: READ C: EX(T)=C: NEXT : REM READ PETSCII EXPLOSION 5 TS = 0 : REM SET TOP SCORE 10 GOSUB 1000 : REM READ SPRITE DATA 11 GOSUB 1050 : REM SETUP SPRITE 0 49 REM TITLE SCREEN ----------------- 50 REM SET COLORS TO BLACK AND WHITE, CLEAR SCREEN 51 COLOR 2,0: CLS : REM PRINT TITLE 52 PRINT " y y y " 53 PRINT " y y y " 54 PRINT " y y y y" 55 PRINT " y y y y y y" 56 PRINT " y y y y" : COLOR 11,0 57 PRINT " FALLING SNAKE":COLOR 12 58 PRINT " FALLING SNAKE":COLOR 14 59 PRINT " **";:COLOR 1 60 PRINT "FALLING SNAKE";: COLOR 14: PRINT "**": PRINT: COLOR 15 61 PRINT : PRINT 62 COLOR 7: PRINT " HI-SCORE: "+STR$(TS) 63 PRINT : PRINT : PRINT : COLOR 15 65 PRINT " SIMON SNAKE IS FALLING" 66 PRINT " DOWN A HOLE!": PRINT 67 PRINT " AVOID ALL OBSTACLES": PRINT: PRINT 68 COLOR 7: PRINT " PRESS SPACE TO START" 69 BA$=CHR$(113):BB$=CHR$(119) : REM BALL SYMBOLS 70 COLOR 2,0 : PRINT " "+BA$ 71 PRINT " "+BA$:PRINT " "+BA$ 72 PRINT " "+BA$+BA$+BA$+BA$+BA$+BA$+BA$+BA$+BA$;:COLOR 8:PRINT BB$; 73 COLOR 2: PRINT "=" 75 X0=150: Y0=68: GOSUB 1070 : REM SET SPRITE X,Y 76 D0=0: GOSUB 1070 : REM SET SPRITE DATA OFFSET 77 GOSUB 1020 80 C0=C0+1: IF C0>2 THEN C0=0: C1=C1+1: IF C1>255 THEN C1=0: 82 VPOKE 1,$FA1C,C1: VPOKE 1,$FA1D,C1 85 GET A$: IF A$="" GOTO 80 : REM WAIT FOR KEY 99 REM START GAME ----------------- 100 COLOR 1,0: CLS 101 FOR T=1TO29:PRINT:NEXT 102 BO=29*256:SI=42: : REM BOTTOMSCREENOFFSET, STONEIMAGE 103 PO=15*256:PI=81:PC=2:PX=20 : REM PLAYEROFFSET, PLAYERIMAGE, PLAYERCOLOR 104 DE=1000 : REM DELAY VALUE 105 S=0 : REM SET SCORE 106 D0=4: GOSUB 1070 : REM SET SPRITE DATA OFFSET 199 REM GAME LOOP ----------------- 200 GET A$ 201 IF A$=CHR$(29) AND PX<40 THEN PX=PX+1 : REM GO RIGHT 202 IF A$=CHR$(157) AND PX>0 THEN PX=PX-1: REM GO LEFT 210 X=INT(RND(1)*40)*2: C=INT(RND(1)*15)+1 : REM GET RANDOM STONE POSITION 211 PE=VPEEK( 0, PO+(PX*2)) 212 IF PE=SI THEN GOSUB 1025: GOTO 400 220 VPOKE 0, BO+X, SI: VPOKE 0, BO+X+1, C 221 VPOKE 0, PO+(PX*2), PI: VPOKE 0, PO+(PX*2)+1, PC 295 X0=PX*8: Y0=122: GOSUB 1070 : REM SET SPRITE X,Y 296 FOR W=1 TO DE: NEXT : REM DELAY, SLOW DOWN CODE 297 PRINT : S=S+1 : DE=DE-1 : IF DE<0 THEN DE=0 298 GOTO 200 399 REM GAME OVER ----------------- 400 IF S>TS THEN TS=S 401 REM DRAW EXPLOSION 402 FOR XX=0TO2:FOR YY=0TO2 403 XS=XX+PX-1: YS=YY+15-1 : REM SCREEN X,Y 404 IF PX<1 THEN XS=XX+1 : REM CHECK PLAYER X TO BE ON SCREEN 405 IF PX>38 THEN XS=XX+38 406 DO=XX+(YY*3):SO=(XS*2)+(YS*256) : REM CALC DATA OFFSET, SCREEN OFFSET 407 VPOKE 0,SO,EX(DO) : REM WRITE TO SCREEN 408 VPOKE 0,SO+1,1 : REM WRITE TO SCREEN 409 NEXT:NEXT 410 REM EXPLOSION COLOR EFFECT 411 FOR T=1 TO 50 412 C0=INT(RND(1)*255) 413 C1=INT(RND(1)*255) 414 VPOKE 1,$FA00,C0: VPOKE 1,$FA01,C1 415 NEXT: VPOKE 1,$FA00,0: VPOKE 1,$FA01,0 421 PRINT HM$:PRINT:PRINT:COLOR 14: PRINT " GAME OVER": PRINT 422 COLOR 1: PRINT " SCORE: "+STR$(S); 425 PRINT " HI-SCORE="+STR$(TS) 430 COLOR 7: PRINT: PRINT " PRESS SPACE TRY AGAIN" : PRINT:PRINT 440 GET A$ 441 C0=C0+1: IF C0>2 THEN C0=0: C1=C1+1: IF C1>255 THEN C1=0: 442 VPOKE 1,$FA1C,C1: VPOKE 1,$FA1D,C1 450 IF A$ = "" OR A$=CHR$(29) OR A$=CHR$(157) THEN GOTO 440 452 GOTO 50 1000 REM READ SPRITE DATA 1001 FOR I=O TO 255 1011 READ PX 1012 VPOKE $0,$4000+I,PX 1013 NEXT I 1014 RETURN 1020 POKE $9F29,($40 OR PEEK($9F29)) 1021 RETURN 1025 POKE $9F29,PEEK($9F29)-$40 1026 RETURN 1050 POKE $9F29,($40 OR PEEK($9F29)): PO=0 1051 REM SET SPRITE DATA 1053 VPOKE $1,$FC11,$02 : REM 4BPP, ADDRESS $04000 1060 VPOKE $1,$FC16,$0C : REM NO COLLISION, ZDEPTH 3, NO FLIP 1061 VPOKE $1,$FC17,$50+PO : REM 16X16 PIXELS, PALETTE OFFSET PO 1062 RETURN 1070 REM SET SPRITE 0,X0,Y0 1171 VPOKE $1,$FC12,X0 AND $FF 1172 VPOKE $1,$FC13,(X0 AND $0300)/$100 1173 VPOKE $1,$FC14,Y0 : REM YPOS 128 1174 VPOKE $1,$FC15,$00 1175 RETURN 1080 REM SET SPRITE IMG DATA 1081 VPOKE $1,$FC10,D0 1182 RETURN 10000 REM PETSCI EXPLOSION 10001 DATA $4D, $20 , $4E, $20, $D6, $20, $4E, $20, $4D 11000 DATA $00, $00, $22, $22, $22, $22, $00, $00 11001 DATA $00, $22, $82, $82, $82, $82, $22, $00 11002 DATA $02, $88, $88, $28, $28, $28, $28, $20 11003 DATA $28, $08, $08, $22, $22, $22, $82, $8b 11004 DATA $28, $88, $88, $20, $00, $28, $28, $b0 11005 DATA $02, $82, $82, $00, $02, $82, $8b, $00 11006 DATA $00, $22, $20, $00, $28, $22, $b0, $00 11007 DATA $00, $20, $20, $28, $22, $2b, $00, $00 11008 DATA $00, $00, $02, $82, $2b, $b0, $00, $00 11009 DATA $00, $00, $28, $2b, $b0, $00, $00, $00 11010 DATA $00, $00, $82, $00, $00, $00, $00, $00 11011 DATA $00, $00, $22, $92, $00, $00, $00, $00 11012 DATA $00, $00, $0b, $22, $92, $92, $00, $00 11013 DATA $00, $00, $00, $00, $22, $29, $92, $00 11014 DATA $00, $00, $00, $00, $00, $00, $22, $20 11015 DATA $00, $00, $00, $00, $00, $00, $00, $22 12000 DATA $00, $22, $22, $00, $00, $00, $00, $00 12001 DATA $02, $88, $88, $20, $00, $00, $00, $00 12002 DATA $28, $08, $80, $82, $00, $00, $00, $00 12003 DATA $28, $88, $88, $82, $00, $00, $00, $00 12004 DATA $02, $88, $88, $20, $00, $00, $00, $00 12005 DATA $00, $28, $82, $00, $00, $00, $00, $00 12006 DATA $00, $02, $20, $00, $00, $00, $00, $00 12007 DATA $00, $20, $02, $00, $00, $00, $00, $00 12008 DATA $00, $00, $00, $00, $00, $00, $00, $00 12009 DATA $00, $00, $00, $00, $00, $00, $00, $00 12010 DATA $00, $00, $00, $00, $00, $00, $00, $00 12011 DATA $00, $00, $00, $00, $00, $00, $00, $00 12012 DATA $00, $00, $00, $00, $00, $00, $00, $00 12013 DATA $00, $00, $00, $00, $00, $00, $00, $00 12014 DATA $00, $00, $00, $00, $00, $00, $00, $00 12015 DATA $00, $00, $00, $00, $00, $00, $00, $00