Listing of file='SNAKE220' on disk='vmedia/more_games.wvd.zip'
# Sector 1304, program filename = 'SNAKE220' 0000 DEFFN'0 "PRINT HEX(03):LISTSD10,";HEX(0D) 0001 DEFFN' 16"SCRATCHT";HEX(22);"SNAKE 22";HEX(22);":SAVET()";HEX(22);"SNAKE 22";HEX(220D) 0002 DEFFN'126"PRINT HEX(03): LISTSD 0 ," 0010 REM "SNAKE 22" RELEASE 1.1 (04/10/80) 0020 DIM A$(10)124,B$(2)124,X$2,W$2,L$2,T$2,V$2,I$1,J$1,K$1 : E$="900" : J1$="40" 0030 GOSUB 740 0040 PRINT HEX(0202020F03) : F,S,E1,E2,E3,E4,E5,E6,E7,E8,E9,E0,C5=0 : A,B=1 : C,D,C1,D1=3 : V$=HEX(C0C0) : R1$=HEX(F7FB) : R2$=HEX(FFFF) : R3$=HEX(F7FB) : A1=-1 : A2=24 : H=79 0050 PRINT HEX(0306);AT(0,30),"SNAKEWAR" : PRINT 0060 PRINT "YOU CONTROL YOUR SNAKE WITH THE FOLLOWING KEYS: W-TO GO UP,A-TO GO LEFT, X-TO GO DOWN, AND D-TO GO RIGHT." : PRINT 0070 PRINT "IF YOUR SNAKE HITS A WALL, REVERSES ITSELF, HITS THE COMPUTER'S SN AKE, OR HITS YOUR OWN SNAKE, YOU LOSE FIVE POINTS. IF YOU HIT A TARGET Y OU GET FROM 4 TO 20 POINTS. THE FIRST PLAYER TO 100 WINS, OR, TO -100, L OSES." 0080 PRINT : LINPUT "YOUR NAME"C$ 0090 PRINT AT(12,0); : LINPUT "SELECT SPEED: 0<=E<=1000",E$ : CONVERT E$ TO E : ERRORGOTO 90 : IF E<0 OR E>1000 THEN 90 0100 PRINT AT(13,0); : LINPUT "SELECT DISPLAY DURATION: 0<=D<=100",J1$ : CONVERT J1$ TO J1 : ERRORGOTO 100 0110 IF J1<0 OR J1>100 THEN 100 0120 IF R$<>"DE" THEN GOSUB 710 0130 KEYIN I$,130,130 : RETURN CLEAR ALL : T$=HEX(0000) : V,F1,C3=0 : A,B=1 : X,W=22 : IF R$="DE" THEN X,W=23 : Y=17 : Z=61 : IF R$="DE" THEN PRINT HEX(0306);BOX (24,79); : C=C1 : D=D1 : J$="Q" : H=79 0140 IF R$<>"DE" THEN GOSUB 730 0150 A$(),B$()=ALL(00) : STR(A$(),,1),STR(B$(),,1)=BIN(23) : STR(A$(),2,1)=BIN(17) : STR(B$(),2,1)=BIN(61) : STR(A$(),3)=A$() : STR(B$(),3)=B$() : STR(A$(),2*C+1),STR(B$(),2*D+1)=ALL(00) 0160 X=X-1 : IF X=A1 THEN 530 : GOSUB 420 : GOTO 240 0170 Y=Y-2 : IF Y=-1 THEN 530 : GOSUB 420 : GOTO 240 0180 X=X+1 : IF X=A2 THEN 530 : GOSUB 420 : GOTO 240 0190 Y=Y+2 : IF Y=79 THEN 530 : GOSUB 420 : GOTO 240 0200 W=W-1 : IF W=A1 THEN 790 : GOSUB 460 : GOTO 320 0210 Z=Z-2 : IF Z=-1 THEN 790 : GOSUB 460 : GOTO 320 0220 W=W+1 : IF W=A2 THEN 790 : GOSUB 460 : GOTO 320 0230 Z=Z+2 : IF Z=79 THEN 790 : GOSUB 460 : GOTO 320 0240 IF E=1000 THEN 250 : FOR J=1 TO 1000-E : $BREAK 1 : NEXT J 0250 IF H<79 THEN 270 : C2=C2+1 : IF C2>20*RND(1) THEN 840 : GOTO 310 0260 REM TARGET SEEKING CODE 0270 IF W=G AND Z=H THEN 310 : IF B=1 OR B=3 THEN 280 : IF W=G AND B=3+SGN(H-Z) THEN 310 : IF W=G THEN 300 : F1=1 : IF G>W THEN B=3 : ELSE B=1 : GOTO 310 0280 IF Z=H AND B=2+SGN(G-W) THEN 310 : IF Z=H THEN 290 : F1=1 : IF Z>H THEN B=2 : ELSE B=4 : GOTO 310 0290 F1=1 : IF Z>39 THEN B=2 : ELSE B=4 : GOTO 310 0300 F1=1 : IF W>12 THEN B=1 : ELSE B=3 0310 RETURN CLEAR ALL : ON B GOTO 200,210,220,230 0320 KEYIN I$,340,360 0330 GOTO 360 0340 IF I$=J$ THEN KEYIN I$,340,340 : J$=I$ 0350 V=POS("WAXD"=I$) : IF V=0 THEN 360 : A=V : GOTO 360 0360 IF I$=HEX(1F) THEN GOSUB '31 : IF 1001*RND(1)<985 THEN 410 0370 PRINT AT(G,H);V$; 0380 G=INT(22*RND(1))+1 : H=2*INT(39*RND(1))+1 0390 IF R$<>"DE" THEN GOSUB 720 0400 T$=BIN(G) : STR(T$,2)=BIN(H) : MAT SEARCH STR(A$(),,2*C),=T$ TO L$ STEP 2 : IF L$<>HEX(0000) THEN 380 : MAT SEARCH STR(B$(),,2*D),=T$ TO L$ STEP 2 : IF L$<>HEX(0000) THEN 380 : PRINT AT(G,H);R1$; 0410 ON A GOTO 160,170,180,190 0420 X$ = BIN(X) : STR(X$,2)=BIN(Y) : IF X$=T$ THEN GOSUB 500 0430 MAT SEARCH STR(A$(),,2*C),=X$ TO L$ STEP 2 : IF L$<>HEX(0000) THEN GOTO 520 : MAT SEARCH STR(B$(),,2*D),=X$ TO L$ STEP 2 : IF L$<>HEX(0000) THEN GOTO 540 0440 MAT COPY -STR(A$(),,2*C) TO -STR(A$(),,2*C+2) : STR(A$(),,1) = BIN(X) : STR(A$(),2,1)=BIN(Y) 0450 PRINT AT(X,Y);R2$;AT(VAL(STR(A$(),2*C+1,1)),VAL(STR(A$(),2*C+2,1)));V$; : RETURN 0460 W$ = BIN(W) : STR(W$,2)=BIN(Z) : IF W$=T$ THEN GOSUB 510 0470 MAT SEARCH STR(B$(),,2*D),=W$ TO L$ STEP 2 : IF L$<>HEX(0000) THEN GOTO 790 : MAT SEARCH STR(A$(),,2*C),=W$ TO L$ STEP 2 : IF L$<>HEX(0000) THEN GOTO 790 0480 MAT COPY -STR(B$(),,2*D) TO -STR(B$(),,2*D+2) : STR(B$(),,1) = BIN(W) : STR(B$(),2,1)=BIN(Z) 0490 F1=0 : C3=0 : PRINT AT(W,Z);R3$;AT(VAL(STR(B$(),2*D+1,1)),VAL(STR(B$(),2*D+2,1)));V$; : RETURN 0500 H=79 : T$=HEX(FFFF) : K=INT(17*RND(1)) : F=F+K+4 : E7=E7+1 : E8=E8+K+4 : C=C+INT(K*5) : IF C>619 THEN C=619 : IF F-S>=100 OR F>=100 THEN 610 : RETURN 0510 H=79 : T$=HEX(FFFF) : K=INT(17*RND(1)) : S=S+5 : E9=E9+1 : E0=E0+5 : D=D+INT(K/4)+1 : IF S-F>=100 OR S>=100 THEN 600 : RETURN 0520 PRINT HEX(0306);AT(0,0),C$;" HIT SELF!" : E1=E1+1 : GOTO 560 0530 PRINT HEX(0306);AT(0,0),C$;" HIT THE WALL!" : E2=E2+1 : GOTO 560 0540 PRINT HEX(0306);AT(0,0),C$;" HIT THE COMPUTER!" : E3=E3+1 : GOTO 560 0550 FOR J=1 TO J1 : $BREAK 255 : NEXT J : PRINT HEX(0306);AT(0,0),"COMPUTER TRAPPED ITSELF!" : C5=C5+1 : S=S-15 : GOTO 590 0560 F=F-5 : IF F<=-100 OR S-F>=100 OR S>=100 THEN 600 0570 PRINT : PRINT C$;" ";F;" COMPUTER ";S; : FOR J=1 TO J1 : $BREAK 255 : NEXT J 0580 GOTO 130 0590 S=S-5 : IF S<=-100 OR F-S>=100 OR F>=100 THEN 610 : GOTO 570 0600 PRINT HEX(0306);AT(0,0),"COMPUTER WINS! ";S;" ";F : GOTO 620 0610 PRINT HEX(0306);AT(0,0),C$;" WINS ";F;" ";S 0620 PRINT AT(3,0),C$;" HIT SELF ";E1;" TIMES";AT(4,0),C$;" HIT WALL ";E2;" TI MES";AT(5,0),C$;" HIT ";"THE COMPUTER";E3;" TIMES" 0630 PRINT AT(6,0),C$;" LOST A TOTAL OF ";(E1+E2+E3)*5;" POINTS ON ERRORS" 0640 PRINT AT(7,0),C$;" HIT ";E7;" TARGETS FOR A TOTAL OF ";E8;" POINTS. AVERA GE: "; : PRINTUSING "##.###",ROUND((E8/(E7+.000001),3) 0650 PRINT AT(9,0),"COMPUTER HIT SELF ";E4;" TIMES";AT(10,0),"COMPUTER HIT WAL L ";E5;" TIMES";AT(11,0),"COMPUTER HIT ";C$;" ";E6;" TIMES" 0660 PRINT AT(12,0),"COMPUTER LOST A TOTAL OF ";(E4+E5+E6)*5+C5*20;" POINTS ON ERRORS" 0670 PRINT AT(13,0),"COMPUTER HIT ";E9;" TARGETS FOR A TOTAL OF ";E0;" POINTS. AVERAGE: "; : PRINTUSING "##.###",ROUND((E0/(E9+.000001),3) 0680 PRINT AT(14,0),"COMPUTER TRAPPED ITSELF ";C5;" TIMES" 0690 PRINT AT(16,0); : K$="Y" : LINPUT "DO YOU WANT TO PLAY AGAIN (Y OR N)" K$ : IF K$="Y" THEN 40 0700 DEFFN'31 : LOAD T "SNAKMENU" 0710 A1=0 : A2=23 : V$=HEX(2020) : R1$=HEX(8B) : R2$=HEX(58) : R3$=HEX(4F) : RETURN 0720 G=INT(21*RND(1))+1 : H=2*INT(39*RND(1))+1 : RETURN 0730 PRINT HEX(0306) : FOR J=0 TO 23 : PRINT AT(J,79);HEX(86); : NEXT J : FOR J=79 TO 0 STEP -1 : PRINT AT(23,J);HEX(2D); : NEXT J : FOR J=23 TO 0 STEP -1 : PRINT AT(J,0);HEX(86); : NEXT J : FOR J=0 TO 79 : PRINT AT(0,J);HEX(2D); : NEXT J : RETURN 0740 KEYIN Q6$,740,740 0750 PRINT HEX(0208090F) : Q8=0 : Q9=190 : Q6$,Q7$=" " 0760 KEYIN Q7$,770,770 : IF Q8>Q9 THEN 780 : Q8=Q8+1 : GOTO 760 0770 Q6$=Q6$&Q7$ : IF Q7$<>HEX(0D) THEN 760 0780 IF STR(Q6$,,8)=" *2236DE" THEN R$="DE" : ELSE R$="D" : RETURN 0790 REM RESTORE SNAKE : ON B GOTO 800,810,820,830 0800 W=W+1 : GOSUB 870 : GOTO 840 0810 Z=Z+2 : GOSUB 870 : GOTO 840 0820 W=W-1 : GOSUB 870 : GOTO 840 0830 Z=Z-2 : GOSUB 870 0840 REM CHANGE DIRECTION RANDOMLY, FAVORING CENTRALIZATION : F1=1 : C2=0 : IF B=1 OR B=3 THEN 860 0850 IF RND(1)<FNM((24-W)/24) THEN B=3 : ELSE B=1 : GOTO 310 0860 IF RND(1)<FNM((79-Z)/79) THEN B=4 : ELSE B=2 : GOTO 310 0870 W$=BIN(W) : STR(W$,2)=BIN(Z) : IF F1=1 THEN 880 : RETURN 0880 C3=C3+1 : IF C3=4 THEN 550 : B=MOD(B,4)+1 : GOTO 310 0890 DEFFN M(N)=3*N^2-2*N^3