image of READY prompt

Wang2200.org

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"