Listing of file='KALAH' on disk='vmedia/games.wvd.zip'
# Sector 652, program filename = 'KALAH'
0010 REM APRIL FOOL VERSION OF KALAH
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