Listing of file='MARBLES' on disk='vmedia/games.wvd.zip'
# Sector 166, program filename = 'MARBLES' 0010 REM *** AUTHOR.....KEN PARKER 0020 REM *** TITLE......KALAH 0030 REM *** USE........ALLOWS USER TO SHOW SOME OF THE WANG'S 0040 REM *** VARIOUS CAPABILITIES. 0050 REM *** (ALSO PROVIDES THE MEANS FOR TWO ANALYSTS 0060 REM *** TO MATCH THEIR STRATEGIC ABILITIES AND TO 0070 REM *** INCREASE THEIR ABILITY TO PERFORM THE 0080 REM *** HIGH LEVEL QUICK RESPONSE THINKING NEEDED 0090 REM *** TO COMPLETE ESG STUDIES)............... 0100 REM *** **************************************************** 0110 DIM P1(2),P2(2),A(14) 0120 DIM B$(3) : B$(1)="*** TIE GAME ***" 0130 B$(2)="WINNER PLAYER #1" 0140 PRINT HEX(030A) 0150 B$(3)="WINNER PLAYER #2" 0160 S=3 : P2(1)=14 : P2(2)=7 0170 P1(1)=7 : P1(2)=14 0180 INPUT "(INPUT 1-PLAYER VS PLAYER,2-PLAYER VS COMPUTER)",H 0190 IF H=1 THEN 210 0200 IF H=2 THEN 210 : GOTO 180 0210 INPUT "INPUT INITIAL NUMBER",I 0220 FOR J=1 TO 14 : A(J)=I : NEXT J 0230 A(7),A(14)=0 0240 ON S GOTO 250,260,560 0250 P=1 : S=2 : GOTO 270 0260 P=2 : S=1 : IF H=2 THEN 310 0270 T=25*(P-1)+1 0280 PRINT TAB(T);"FOR PLAYER #";P;"INPUT POT NUMBER"; 0290 INPUT N 0300 GOTO 330 0310 GOSUB 940 0320 REM .....LOGIC FOR CHIPS..... 0330 IF N<7 THEN 350 0340 PRINT "PLEASE PLAY YOU SIDE" : ON S GOTO 260,250 0350 N=N+7*(P-1) 0360 IF A(N)>0 THEN 380 0370 PRINT "THIS POT IS EMPTY. TRY AGAIN" : ON S GOTO 260,250 0380 N1=A(N) : A(N)=0 0390 IF N1=1 THEN 450 0400 FOR J=N1 TO 2 STEP -1 0410 N=N+1 : IF N<15 THEN 420 : N=1 0420 IF N=P2(P) THEN 410 0430 A(N)=A(N)+1 0440 NEXT J 0450 N=N+1 : IF N<15 THEN 460 : N=1 0460 IF N<>P1(P) THEN 490 0470 A(N)=A(N)+1 0480 S=P : GOTO 560 0490 IF N<>P2(P) THEN 500 : N=N+1 : IF N<15 THEN 500 : N=1 0500 ON P GOTO 510,520 0510 IF N<7 THEN 530 : GOTO 540 0520 IF N>7 THEN 530 : GOTO 540 0530 IF A(N)=0 THEN 710 0540 A(N)=A(N)+1 0550 REM ......DISPLAY..... 0560 PRINT HEX(030A) 0570 PRINT TAB(23);"PLAYER # 2" 0580 PRINTUSING 600 0590 PRINTUSING 620,A(13),A(12),A(11),A(10),A(9),A(8) 0600 % (6) (5) (4) (3) (2) (1) 0610 % (1) (2) (3) (4) (5) (6) 0620 % ## ## ## ## ## ## 0630 % ### ### 0640 PRINTUSING 630,A(14),A(7) 0650 PRINTUSING 620,A(1),A(2),A(3),A(4),A(5),A(6) 0660 PRINTUSING 610 0670 PRINT TAB(23);"PLAYER # 1" 0680 PRINT HEX(0A0A) 0690 GOSUB 770 0700 ON S GOTO 250,260,250,160 0710 N2=14-N : IF A(N2)=0 THEN 540 0720 A(P*7)=A(P*7)+A(N2)+1 0730 A(N)=0 0740 A(N2)=0 0750 GOTO 560 0760 REM .....CHECK FOR WIN..... 0770 S1=0 : S2=0 : FOR I=1 TO 6 : S1=S1+A(I) : S2=S2+A(I+7) : NEXT I 0780 IF S1=0 THEN 810 0790 IF S2=0 THEN 810 0800 RETURN 0810 A(7)=A(7)+S1 : A(14)=A(14)+S2 0820 PRINT TAB(10);"END OF GAME" 0830 FOR I=1 TO 2 : PRINT TAB(15);"PLAYER #";I;"=";A(I*7) : NEXT I 0840 W=1 : IF A(7)=A(14) THEN 860 : W=2 : IF A(7)>A(14) THEN 860 0850 W=3 0860 E$=B$(W) 0870 FOR I=1 TO 15 : PRINT TAB(10);E$;HEX(0D); 0880 FOR J=1 TO 50 : NEXT J 0890 PRINT TAB(63);HEX(0D); 0900 FOR J=1 TO 50 : NEXT J 0910 NEXT I : PRINT TAB(10);E$;HEX(0A) 0920 S=4 : RETURN 0930 REM ...POT SEARCH... 0940 N=0 0950 FOR I=13 TO 8 STEP -1 0960 IF A(I)-INT(A(I)/13)*13+(I-7)<>7 THEN 1000 0970 N=I-7 0980 M1=INT(A(I)/13)+1 0990 I=8 1000 NEXT I 1010 IF N=0 THEN 1120 1020 FOR I=13 TO 8 STEP -1 1030 IF A(I)<>13 THEN 1090 : M2=A(14-I) 1040 IF M2=0 THEN 1090 1050 IF A(N+7)>7 THEN 1060 : IF N+7>I THEN 1090 1060 M2=M2+3 1070 IF M2<M1+2 THEN 1090 1080 N=I-7 : M1=M2 1090 NEXT I 1100 RETURN 1110 REM ...LOOK FOR ZERO 1120 W1=8 : W2=13 : GOSUB 1500 1130 IF M1=0 THEN 1160 1140 N=M3-7 : RETURN 1150 REM ...PROTECT FROM ZERO... 1160 W1=1 : W2=6 : GOSUB 1500 1170 IF N1=0 THEN 1350 1180 FOR J=13 TO 8 STEP -1 1190 IF A(J)+J-14<N1 THEN 1220 1200 N=J-7 1210 J=8 1220 NEXT J 1230 IF N=0 THEN 1240 : RETURN 1240 IF N1=0 THEN 1350 : N=7-N1 1250 IF A(N+7)=0 THEN 1260 : RETURN 1260 FOR I=8 TO 13 1270 IF A(I)=0 THEN 1310 1280 IF I<N+7 THEN 1290 : N=I-7 : I=13 : GOTO 1310 1290 IF I+A(J)>=N+7 THEN 1310 1300 N=I-7 : I=13 1310 NEXT I 1320 IF A(N+7)<>0 THEN 1330 : N=0 : GOTO 1350 1330 RETURN 1340 REM ...PROTECT FROM OTHER PLAYER... 1350 FOR I=6 TO 1 STEP -1 1360 IF A(I)+I<>7 THEN 1420 1370 FOR J=13 TO 8 STEP -1 1380 IF A(J)+J-14<I THEN 1410 1390 N=J-7 1400 J=8 : I=1 1410 NEXT J 1420 NEXT I 1430 IF N=0 THEN 1460 1440 RETURN 1450 REM ...WHY NOT!... 1460 N=INT(RND(1)*6)+1 1470 IF A(N+7)=0 THEN 1460 1480 RETURN 1490 REM 1500 REM ...SUBROUTINE FOR BEST ZERO... 1510 REM 1520 M1,N1,M3=0 1530 FOR I=W2 TO W1 STEP -1 1540 IF A(I)<>13 THEN 1570 : M2=A(14-I) 1550 IF M2=0 THEN 1670 : M2=M2+3 1560 IF M2<=M1 THEN 1670 : M1=M2 : N1=I : M3=I : GOTO 1670 1570 IF A(I)<>0 THEN 1670 1580 FOR J=W1 TO W2 1590 IF A(J)>13 THEN 1660 1600 M2=J+A(J) : IF M2-INT(M2/14)*13<>I THEN 1660 1610 IF I=J THEN 1660 1620 M2=A(14-I) 1630 IF M2<>0 THEN 1640 : IF A(J)<6 THEN 1660 1640 M3=J : M2=M2+INT(A(J)/7)*2+1 1650 IF M2<M1 THEN 1660 : M1=M2 : N1=I 1660 NEXT J 1670 NEXT I 1680 RETURN 1700 STOP 1710 DEFFN'31 : LOAD DC F"GAMES"