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