image of READY prompt

Wang2200.org

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