Listing of file='SNAKEWAR' on disk='vmedia/more_games.wvd.zip'
# Sector 1330, program filename = 'SNAKEWAR' 0000 DEFFN'0 "PRINT HEX(03):LISTSD10,";HEX(0D) 0001 DEFFN' 16"SCRATCHT";HEX(22);"SNAKEWAR";HEX(22);":SAVET()";HEX(22);"SNAKEW AR";HEX(220D) 0002 DEFFN'126"PRINT HEX(03): LISTSD ," 0010 REM SNAKEWAR RELEASE 1.1 (04/10/80) 0015 E$="95" : J9$="05" 0020 DIM A$(10)124,B$(10)124,X$2,W$2,L$2,T$2,V$2,I$1,J$1,K$1 0030 PRINT HEX(0202020F03) : F,S,E1,E2,E3,E4,E5,E6,E7,E8,E9,E0=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 0040 PRINT HEX(0306);AT(0,30),"SNAKEWAR" : PRINT 0050 PRINT "THE PLAYER ON THE LEFT CONTROLS HIS SNAKE WITH THE FOLLOWING KEYS: W-TO GO UP,A-TO GO LEFT, X-TO GO DOWN, AND D-TO GO RIGHT. THE PLAYER O N THE RIGHT USES 8,4,2, AND 6 ON THE NUMBER PAD." : PRINT 0060 PRINT "IF YOUR SNAKE HITS A WALL, REVERSES ITSELF, HITS YOUR OPPONENT'S S NAKE, 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." : PRINT 0070 LINPUT "FIRST PLAYER'S NAME"C$ : LINPUT "SECOND PLAYER'S NAME"D$ 0080 PRINT : LINPUT "SELECT SPEED: 0<=E<=100",E$ : CONVERT E$ TO E : ERRORGOTO 80 : IF E<0 OR E>100 THEN 80 0090 PRINT : LINPUT "SELECT DISPLAY DURATION: 0<=D<=100",J9$ : CONVERT J9$ TO J9 : ERRORGOTO 90 0100 IF J9<0 OR J9>100 THEN 90 0110 GOSUB 710 0120 IF R$<>"DE" THEN GOSUB 680 0130 KEYIN I$,130,130 : RETURN CLEAR ALL : T$=HEX(0000) : V=0 : A,B=1 : X,W=23 : Y=17 : Z=61 : IF R$="DE" THEN PRINT HEX(0306);BOX (24,79); : C=C1 : D=D1 : J$="Q" 0140 IF R$<>"DE" THEN GOSUB 700 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 500 : GOSUB 380 : GOTO 240 0170 Y=Y-2 : IF Y=-1 THEN 500 : GOSUB 380 : GOTO 240 0180 X=X+1 : IF X=A2 THEN 500 : GOSUB 380 : GOTO 240 0190 Y=Y+2 : IF Y=79 THEN 500 : GOSUB 380 : GOTO 240 0200 W=W-1 : IF W=A1 THEN 550 : GOSUB 420 : GOTO 260 0210 Z=Z-2 : IF Z=-1 THEN 550 : GOSUB 420 : GOTO 260 0220 W=W+1 : IF W=A2 THEN 550 : GOSUB 420 : GOTO 260 0230 Z=Z+2 : IF Z=79 THEN 550 : GOSUB 420 : GOTO 260 0240 IF E=100 THEN 250 : FOR J=1 TO 100-E : $BREAK 5 : NEXT J 0250 ON B GOTO 200,210,220,230 0260 KEYIN I$,280,310 0270 GOTO 310 0280 IF I$=J$ THEN KEYIN I$,280,280 : J$=I$ 0290 V=POS("WAXD8426"=I$) : IF V>4 THEN 300 : IF V=0 THEN 310 : A=V : GOTO 310 0300 V=V-4 : B=V 0310 IF I$=HEX(1F) THEN GOSUB '31 : IF 1001*RND(1)<980 THEN 360 0320 PRINT AT(G,H);V$; 0330 G=INT(23*RND(1)) : H=2*INT(39*RND(1))+1 0340 IF R$<>"DE" THEN GOSUB 690 0350 T$=BIN(G) : STR(T$,2)=BIN(H) : MAT SEARCH STR(A$(),,2*C),=T$ TO L$ STEP 2 : IF L$<>HEX(0000) THEN 330 : MAT SEARCH STR(B$(),,2*D),=T$ TO L$ STEP 2 : IF L$<>HEX(0000) THEN 330 : PRINT AT(G,H);R1$; 0360 IF X$=T$ THEN GOSUB 470 : IF W$=T$ THEN GOSUB 480 0370 ON A GOTO 160,170,180,190 0380 X$ = BIN(X) : STR(X$,2)=BIN(Y) 0390 MAT SEARCH STR(A$(),,2*C),=X$ TO L$ STEP 2 : IF L$<>HEX(0000) THEN 490 : MAT SEARCH STR(B$(),,2*D),=X$ TO L$ STEP 2 : IF L$=HEX(0001) THEN 460 : IF L$<>HEX(0000) THEN 510 0400 MAT COPY -STR(A$(),,2*C) TO -STR(A$(),,2*C+2) : STR(A$(),,1) = BIN(X) : STR(A$(),2,1)=BIN(Y) 0410 PRINT AT(X,Y);R2$;AT(VAL(STR(A$(),2*C+1,1)),VAL(STR(A$(),2*C+2,1)));V$; : RETURN 0420 W$ = BIN(W) : STR(W$,2)=BIN(Z) 0430 MAT SEARCH STR(B$(),,2*D),=W$ TO L$ STEP 2 : IF L$<>HEX(0000) THEN 540 : MAT SEARCH STR(A$(),,2*C),=W$ TO L$ STEP 2 : IF L$=HEX(0001) THEN 460 : IF L$<>HEX(0000) THEN 560 0440 MAT COPY -STR(B$(),,2*D) TO -STR(B$(),,2*D+2) : STR(B$(),,1) = BIN(W) : STR(B$(),2,1)=BIN(Z) 0450 PRINT AT(W,Z);R3$;AT(VAL(STR(B$(),2*D+1,1)),VAL(STR(B$(),2*D+2,1)));V$; : RETURN 0460 ON INT(RND(1)*2)+1 GOTO 510,560 0470 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/4)+20 : IF C>619 THEN C=619 : IF F-S>=100 OR F>=100 THEN 590 : RETURN 0480 H=79 : T$=HEX(FFFF) : K=INT(17*RND(1)) : S=S+K+4 : E9=E9+1 : E0=E0+K+4 : D=D+INT(K/4)+20 : IF C>619 THEN C=619 : IF S-F>=100 OR S>=100 THEN 580 : RETURN 0490 PRINT HEX(0306);AT(0,0),C$;" HIT SELF!" : E1=E1+1 : GOTO 520 0500 PRINT HEX(0306);AT(0,0),C$;" HIT THE WALL!" : E2=E2+1 : GOTO 520 0510 PRINT HEX(0306);AT(0,0),C$;" HIT ";D$;"!" : E3=E3+1 0520 F=F-5 0530 PRINT : PRINT C$;" ";F;" ";D$;" ";S; : FOR J=1 TO J9 : $BREAK 255 : NEXT J : IF F<=-100 OR S-F>=100 OR S>=100 THEN 580 : IF S<=-100 OR F-S>=100 OR F>=100 THEN 590 : GOTO 120 0540 PRINT HEX(0306);AT(0,0),D$;" HIT SELF!" : E4=E4+1 : GOTO 570 0550 PRINT HEX(0306);AT(0,0),D$;" HIT THE WALL!" : E5=E5+1 : GOTO 570 0560 PRINT HEX(0306);AT(0,0),D$;" HIT ";C$;"!" : E6=E6+1 0570 S=S-5 : GOTO 530 0580 PRINT HEX(0306);AT(0,0),D$;" WINS! ";S;" ";F : GOTO 600 0590 PRINT HEX(0306);AT(0,0),C$;" WINS ";F;" ";S 0600 PRINT AT(3,0),C$;" HIT SELF ";E1;" TIMES";AT(4,0),C$;" HIT WALL ";E2;" TI MES";AT(5,0),C$;" HIT ";D$;" ";E3;" TIMES" 0610 PRINT AT(6,0),C$;" LOST A TOTAL OF ";(E1+E2+E3)*5;" POINTS ON ERRORS" 0620 PRINT AT(7,0),C$;" HIT ";E7;" TARGETS FOR A TOTAL OF ";E8;" POINTS. AVERA GE: "; : PRINTUSING "##.###",E8/(E7+.000001) 0630 PRINT AT(9,0),D$;" HIT SELF ";E4;" TIMES";AT(10,0),D$;" HIT WALL ";E5;" T IMES";AT(11,0),D$;" HIT ";C$;" ";E6;" TIMES" 0640 PRINT AT(12,0),D$;" LOST A TOTAL OF ";(E4+E5+E6)*5;" POINTS ON ERRORS" 0650 PRINT AT(13,0),D$;" HIT ";E9;" TARGETS FOR A TOTAL OF ";E0;" POINTS. AVER AGE: "; : PRINTUSING "##.###",E0/(E9+.000001) 0660 PRINT AT(15,0); : K$="Y" : LINPUT "DO YOU WANT TO PLAY AGAIN (Y OR N)" K$ : IF K$="Y" THEN 20 0670 DEFFN'31 : LOAD T"SNAKMENU" 0680 A1=0 : A2=23 : V$=HEX(2020) : R1$=HEX(8B) : R2$=HEX(58) : R3$=HEX(4F) : RETURN 0690 G=INT(21*RND(1))+1 : H=2*INT(39*RND(1))+1 : RETURN 0700 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 0710 KEYIN Q6$,710,710 0720 PRINT HEX(0208090F) : Q8=0 : Q9=190 : Q6$,Q7$=" " 0730 KEYIN Q7$,740,740 : IF Q8>Q9 THEN 750 : Q8=Q8+1 : GOTO 730 0740 Q6$=Q6$&Q7$ : IF Q7$<>HEX(0D) THEN 730 0750 IF STR(Q6$,,8)=" *2236DE" THEN R$="DE" : ELSE R$="D" : RETURN