image of READY prompt

Wang2200.org

Listing of file='KALAH ' on disk='vmedia/more_games.wvd.zip'

# Sector 703, program filename = 'KALAH'
0010 REM        APRIL FOOL VERSION OF KALAH
0015 LOAD DC T#6,"GAMES"
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