Listing of file='SNAKEWAR' on disk='vmedia/games-droz01.wvd.zip'
# Sector 706, program filename = 'SNAKEWAR' 0001 REM SNAKEWAR 0002 DEFFN'16"LIMITS T";HEX(22);"SNAKEWAR";HEX(22);",A,B,C,D: PRINT C,D,B-A+1, C/(B-A+1)*100;";HEX(2225220D) 0004 DEFFN' 127"SCRATCHT";HEX(22);"SNAKEWAR";HEX(22);":SAVET()";HEX(22);"SNAKE WAR";HEX(220D) 0005 DEFFN'126 "PRINT HEX(03):LISTS ";HEX(0D) 0007 DIM A$124,B$124,X$2,W$2,L$2,T$2,V$2,R$2,I$1,J$1 0010 PRINT HEX(0202020F03) : F,S,E1,E2,E3,E4,E5,E6,E7,E8,E9,E0=0 : A,B=1 : C=3 : D=3 0020 INPUT "DO YOU WANT TO PLAY SNAKEWAR (1) OR SPACEWAR (2)" L 0030 IF L<1 THEN 20 : IF L>1 AND L<2 THEN 20 : IF L>2 THEN 20 : IF L=2 THEN 710 : PRINT HEX(0306);AT(0,30),"SNAKEWAR" : PRINT 0040 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 0050 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 0060 V$,R$=HEX(C0C0) : M=0 : C1,D1=3 0070 INPUT "FIRST PLAYER'S NAME" C$ : INPUT "SECOND PLAYER'S NAME" D$ 0080 PRINT : INPUT "SELECT SPEED: 0<=E<=2000",E 0090 IF E<0 OR E>2000 THEN 80 : REM CONTROL LOOPS TO LINE 100 AFTER EACH ERROR 0100 KEYIN I$,100,100 : RETURN CLEAR ALL : T$=HEX(0000) : I,V=0 : A,B=1 : X,W=23 : Y=17 : Z=61 : PRINT HEX(0306);BOX (24,79); : C=C1 : D=D1 : J$="Q" 0110 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) 0120 REM THE NEXT FOUR LINES EXTEND THE FIRST PLAYER'S SNAKE 0130 X=X-1 : IF X=-1 THEN 490 : GOSUB 370 : GOTO 230 0140 Y=Y-2 : IF Y=-1 THEN 490 : GOSUB 370 : GOTO 230 0150 X=X+1 : IF X=24 THEN 490 : GOSUB 370 : GOTO 230 0160 Y=Y+2 : IF Y=79 THEN 490 : GOSUB 370 : GOTO 230 0170 REM THE NEXT FOUR LINES EXTEND THE SECOND PLAYER'S SNAKE 0180 W=W-1 : IF W=-1 THEN 550 : GOSUB 410 : GOTO 250 0190 Z=Z-2 : IF Z=-1 THEN 550 : GOSUB 410 : GOTO 250 0200 W=W+1 : IF W=24 THEN 550 : GOSUB 410 : GOTO 250 0210 Z=Z+2 : IF Z=79 THEN 550 : GOSUB 410 : GOTO 250 0220 REM THE NEXT TEN LINES MAINTAIN SNAKE DIRECTION AND SOMETIMES CREATE TARGETS 0230 FOR J=1 TO 2000-E : NEXT J 0240 ON B GOTO 180,190,200,210 0250 KEYIN I$,270,300 0260 GOTO 300 0270 IF I$=J$ THEN KEYIN I$,270,270 : J$=I$ 0280 V=POS("WAXD8426"=I$) : IF V>4 THEN 290 : IF V=0 THEN 300 : A=V : GOTO 300 0290 V=V-4 : B=V 0300 IF 1001*RND(1)<960+E/80 +41*M THEN 340 0310 PRINT AT(G,H);HEX(C0C0); 0320 G=INT(23*RND(1)) : H=2*INT(39*RND(1))+1 0330 T$=BIN(G) : STR(T$,2)=BIN(H) : MAT SEARCH STR(A$,,2*C),=T$ TO L$ STEP 2 : IF L$<>HEX(0000) THEN 320 : MAT SEARCH STR(B$,,2*D),=T$ TO L$ STEP 2 : IF L$<>HEX(0000) THEN 320 : PRINT AT(G,H);HEX(F7FB); 0340 IF X$=T$ THEN GOSUB 460 : IF W$=T$ THEN GOSUB 470 0350 ON A GOTO 130,140,150,160 0360 REM SUBROUTINES 370 AND 410 MAINTAIN SNAKES AND CHECKS FOR COLLISIONS 0370 MAT COPY -STR(A$,,2*C) TO -STR(A$,,2*C+2) 0380 X$,STR(A$,,1) = BIN(X) : STR(X$,2),STR(A$,2,1)=BIN(Y) 0390 PRINT AT(X,Y);HEX(FFFF);AT(VAL(STR(A$,2*C+1,1)),VAL(STR(A$,2*C+2,1)));V$; 0400 MAT SEARCH STR(A$,3,2*C-2),=X$ TO L$ STEP 2 : IF L$<>HEX(0000) THEN 480 : MAT SEARCH STR(B$,,2*D),=X$ TO L$ STEP 2 : IF L$<>HEX(0000) THEN 500 : RETURN 0410 MAT COPY -STR(B$,,2*D) TO -STR(B$,,2*D+2) 0420 W$,STR(B$,,1) = BIN(W) : STR(W$,2),STR(B$,2,1)=BIN(Z) 0430 PRINT AT(W,Z);HEX(F7FB);AT(VAL(STR(B$,2*D+1,1)),VAL(STR(B$,2*D+2,1)));R$; 0440 MAT SEARCH STR(B$,3,2*D-2),=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(0000) THEN 560 : RETURN 0450 REM THE NEXT TWELVE LINES SCORE ERRORS AND HITS 0460 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)+1 : IF F-S>=100 OR F>=100 THEN 600 : RETURN 0470 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)+1 : IF S-F>=100 OR S>=100 THEN 590 : RETURN 0480 PRINT HEX(0306);AT(0,0),C$;" HIT SELF!" : E1=E1+1 : GOTO 510 0490 PRINT HEX(0306);AT(0,0),C$;" HIT THE WALL!" : E2=E2+1 : GOTO 510 0500 PRINT HEX(0306);AT(0,0),C$;" HIT ";D$;"!" : E3=E3+1 0510 F=F-5 : IF F<=-100 OR S-F>=100 OR S>=100 THEN 590 0520 PRINT : PRINT C$;" ";F;" ";D$;" ";S; : FOR J=1 TO 10000 : NEXT J 0530 GOSUB 100 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 : IF S<=-100 OR F-S>=100 OR F>=100 THEN 600 : GOTO 520 0580 REM THE NEXT NINE LINES ANNOUNCE THE WINNER AND GIVE STATISTICS 0590 PRINT HEX(0306);AT(0,0),D$;" WINS! ";S;" ";F : GOTO 610 0600 PRINT HEX(0306);AT(0,0),C$;" WINS ";F;" ";S 0610 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" 0620 PRINT AT(6,0),C$;" LOST A TOTAL OF ";(E1+E2+E3)*5;" POINTS ON ERRORS" 0630 PRINT AT(7,0),C$;" HIT ";E7;" TARGETS FOR A TOTAL OF ";E8;" POINTS. AVERA GE: ";E8/(E7+.0001) 0640 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" 0650 PRINT AT(12,0),D$;" LOST A TOTAL OF ";(E4+E5+E6)*5;" POINTS ON ERRORS" 0660 PRINT AT(13,0),D$;" HIT ";E9;" TARGETS FOR A TOTAL OF ";E0;" POINTS. AVER AGE: ";E0/(E9+.0001) 0670 PRINT AT(15,0); : INPUT "DO YOU WANT TO PLAY AGAIN (Y OR N)" I1$ 0680 IF I1$="N" THEN END 0690 IF I1$="Y" THEN 10 : GOTO 670 0700 REM THE NEXT LINE SETS UP SPACEWAR 0710 V$=HEX(FFFF) : R$=HEX(F7FB) : M=1 : C1,D1=61 : PRINT HEX(0306);AT(0,30),"SPACEWAR" : PRINT 0720 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 0730 PRINT "SPACEWAR IS A STRUGGLE FOR SPACE. IF YOU REVERSE YOURSELF OR HIT Y OUR OPPONENT, YOURSELF, OR A WALL, YOU LOSE FIVE POINTS. WHOEVER RUNS OUT OF SPACE FIRST, THEREFORE, LOSES POINTS. FIRST PLAYER TO -100 LOSES. " : PRINT : GOTO 70 9999 DEFFN'31 : LOAD T "START"