Listing of file='KALAH' on disk='vmedia/gamesall.wvd.zip'
# Sector 232, program filename = 'KALAH' 0010 REM KALAH D.ANGEL 0020 COM A$64,A0$ : INIT(09)A$ : INIT(01)A0$ : INIT(0A)STR(A0$,2) 0030 COM T$(2)1,L$ : T$(1)="A" : T$(2)="B" 0040 COM R(2,7),B$1,R9(2,7),T9 : GOSUB 980 : T9=1 0050 D=50 : D0=250 0060 DIM S(2),S1(2),T0$19 0070 DIM A1$7 : A1$=HEX(0A08080808080A) 0080 DIM A2$(2)2 : A2$(1)=HEX(0808) : A2$(2)=HEX(0000) 0090 DIM A3$(2)25 : INIT(08)A3$() : INIT(00)A3$(2) 0100 DIM A4$25 : A4$=" " 0110 SELECT PRINT 005(255) : PRINT HEX(03);"PLAYER; PIECES PER PIT?" 0120 GOSUB 960 : B$=HEX(00) 0130 B=VAL(B$)*5 0140 T8=0 : KEYIN B$,150,130 : GOTO 140 0150 IF B$<>"A" THEN 160 : T8=1 : GOTO 170 0160 IF B$<>"B" THEN 180 : T8=2 0170 KEYIN B$,180,170 : GOTO 170 0180 IF B$<"0" THEN 170 : IF B$>"9"THEN 170 : B=B+VAL(B$)-48 : IF B=0 THEN 170 0190 IF B<5 THEN 200 : D=D/3 0200 PRINT HEX(03);TAB(32);A1$;"6 1";A1$;"5 2";A1$;"4 3";A1$;"3 4";A1$ ;"2 5";A1$;"1 6" 0210 FOR I=1 TO 6 : R(1,I),R(2,I),R9(1,I),R9(2,I)=B : NEXT I 0220 R(1,7),R(2,7)=0 : S(1),S(2)=6*B 0230 GOSUB 960 0240 IF T8=0 THEN 250 : T=3-T8 : GOTO 270 0250 T=1.5+SGN(S(1)-S(2))/2 : IF T<>1.5 THEN 270 : T,T9=3-T9 0260 R=-1 0270 GOSUB '220 0280 FOR I=1 TO 7 0290 GOSUB '200(2,8-I) : GOSUB '200(1,I) 0300 NEXT I 0310 PRINT STR(A0$,1,6);STR(A$,1,50*T-40); 0320 KEYIN B$,330,320 : R=R-1 : GOTO 320 0330 IF R<0 THEN 350 : IF B$=HEX(08)THEN 340 : IF B$=" " THEN 340 : IF B$="!" THEN 340 : GOTO 350 0340 FOR R=1 TO 7 : R(1,R)=R9(1,R) : R(2,R)=R9(2,R) : NEXT R : Q4=0 : GOTO 390 0350 IF B$>"6" THEN 310 : IF B$<"1" THEN 310 0360 B=55-VAL(B$) : IF R(T,B)=0 THEN 320 0370 GOSUB '210(T,B) 0380 R=0 0390 S(1),S(2)=0 0400 FOR I=1 TO 7 0410 S(T)=S(T)+R(T,I) : S(3-T)=S(3-T)+R(3-T,I) 0420 NEXT I 0430 T0$="HIS SIDE." : IF S(T)=R(T,7) THEN 460 : T0$="HIS OPPONENT'S SIDE." : IF S(3-T)=R(3-T,7) THEN 470 0440 KEYIN B$,450,450 : REM THROW AWAY HASTY MOVE 0450 R=D0 : GOSUB 960 : IF Q4=0 THEN 280 : IF Q4=7 THEN 310 : GOSUB '220 : GOTO 330 0460 IF S(3-T)<>R(3-T,7) THEN 470 : T0$="BOTH SIDES!!!" 0470 PRINT HEX(03);"PLAYER ";T$(T);" ENDED GAME BY CLEARING ";T0$ 0480 IF S(1)<>S(2) THEN 490 : PRINT "TIE SCORE !!!!" : GOTO 520 0490 T1=1.5+SGN(S(2)-S(1))/2 : S=(S(T1)-S(3-T1))/2 0500 PRINT "PLAYER ";T$(T1);" WINS WITH SCORE OF";S;"!!!" 0510 S1(T1)=S1(T1)+S 0520 PRINT "TO PLAY AGAIN, PRESS EXECUTE KEY" : GOSUB 960 0530 KEYIN B$,110,110 : GOTO 530 0540 REM 0550 DEFFN'200(Q1,Q2) 0560 IF Q2=7 THEN 650 0570 PRINT STR(A0$,1,2*Q2*SGN(1.5-Q1)+14*Q1-13);STR(A$,1,15+9.5*Q1); 0580 R=R(Q1,Q2) : R0=0 0590 IF R<13 THEN 600 : PRINT "O";A2$(Q1); : R=R-13 : R0=R0+1 : GOTO 590 0600 IF R=0 THEN 630 : R8=0 0610 FOR R9=1 TO R : IF R9=5*INT(R9/5)THEN 620 : PRINT "+";A2$(Q1); : NEXT R9 : GOTO 630 0620 PRINT "*";A2$(Q1); : NEXT R9 0630 R0=R0+R : PRINT STR(A3$(Q1),1,24-R0);STR(A4$,1,25-R0) 0640 RETURN 0650 PRINT STR(A0$,1,14*SGN(1.5-Q1)+14*Q1-13);STR(A$,1,28); : PRINTUSING 670,R(Q1,Q2) 0660 RETURN 0670 %## 0680 DEFFN'210(Q3,Q4) 0690 FOR R=1 TO 7 : R9(1,R)=R(1,R) : R9(2,R)=R(2,R) : NEXT R 0700 Q5=R(Q3,Q4) : R(Q3,Q4)=0 0710 GOSUB '200(Q3,Q4) 0720 IF Q5=0 THEN 780 0730 Q4=Q4+1 : IF Q4<7 THEN 750 : IF Q3<>T THEN 740 : IF Q4<8 THEN 750 0740 Q3=3-Q3 : Q4=1 0750 Q5=Q5-1 : R(Q3,Q4)=R(Q3,Q4)+1 0760 FOR D1=1 TO D : REM DELAY : NEXT D1 0770 GOTO 710 0780 IF R(Q3,Q4)>1 THEN 820 : IF Q4=7 THEN 820 : IF Q3<>T THEN 820 0790 IF R(3-Q3,7-Q4)=0 THEN 820 0800 R(Q3,7)=R(Q3,7)+R(Q3,Q4)+R(3-Q3,7-Q4) : R(3-Q3,7-Q4),R(Q3,Q4)=0 0810 GOSUB '200(3-Q3,7-Q4) : GOSUB '200(Q3,Q4) : GOSUB '200(Q3,7) 0820 RETURN 0830 DEFFN'220 0840 PRINT STR(A0$,1,6);STR(A$,1,50*T-48);" " 0850 B$="#" : KEYIN B$,860,860 : REM THROW AWAY ADVANCE MOVE 0860 IF R<0 THEN 910 0870 PRINT STR(A0$,1,1);STR(A$,1,102-50*T);"NEXT TURN"; 0880 KEYIN B$,890,890 : R=R-1 : IF R>=0 THEN 880 : GOTO 910 0890 IF B$=HEX(08) THEN 920 : IF B$=" " THEN 920 0900 IF B$="!" THEN 910 : B$="#" 0910 T=3-T 0920 PRINT HEX(080808080808080808);" " 0930 PRINT STR(A0$,1,6);STR(A$,1,50*T-48);"PLAYER ";T$(T); 0940 IF B$<>"#" THEN 950 : R=-1 : RETURN 0950 B$=" " : RETURN 0960 PRINT HEX(0C) : PRINT A0$;S1(1),S(1);TAB(41);S(2);TAB(57);S1(2);" ";STR(A0$,1,1); : PRINT : RETURN 0970 REM 0980 PRINT HEX(03);"INSTRUCTIONS FOR GAME OF KALAH:" 0990 PRINT "TO EXECUTE, PRESS EXEC; SCREEN WILL CLEAR" 1000 PRINT "MESSAGE WILL APPEAR: 'PLAYER; PIECES PER PIT?'" 1010 PRINT "(OPTIONAL: TYPE A OR B TO INDICATE WHICH GOES FIRST)" 1020 PRINT "TYPE A DIGIT '1' TO '9' FOR SIZE OF GAME." 1030 PRINT "PLAYER A USES LEFT PITS AND BOTTOM KALAH, PLAYER B USES OTHERS" 1040 PRINT "TO PLAY, PRESS 1 TO 6, TO REPRESENT A PIT TO BE EMPTIED." 1050 PRINT " (ILLEGAL MOVES ARE IGNORED)" 1060 PRINT "APPROXIMATELY 3 SECONDS ARE ALLOWED TO DELETE A MOVE BY" 1070 PRINT " PRESSING 'SPACE' OR 'BACKSPACE' KEY." 1080 PRINT "SCORES ARE ON BOTTOM LINE. IN CORNERS ARE GAME SCORES." 1090 PRINT "INSIDE NUMBERS SHOW PIECE COUNT FOR CURRENT GAME." 1100 KEYIN B$,1110,1100 : GOTO 1100 1110 RETURN 1120 DEFFN'0 : T9,S1(1),S1(2)=0 : RETURN