     '     YATZEE
     ' ORIGINAL BY JL HELMS & MF PEZOK FOR CCII
     ' CORONADO, CA
     ' ADAPTED TO IBM PC BY PATRICK LEABO
     ' TUCSON, AZ
     '
     DEFINT A-Z
     DIM C(5): DIM K(18, 7): DIM F(5): DIM A$(7)
     DIM S(6, 5): DIM M(13), TN(6), DU(6): KEY OFF: COLOR 7, 0: WIDTH 80
     SCREEN 0, 1: RESTORE 1150: FOR N = 1 TO 6: READ TN(N): NEXT
     CLS
1110 GOSUB 5110
     C1 = 39: C2 = 63: C3 = 33: C4 = 56
     GOSUB 4680
     CLS : GOSUB 4450
1150 DATA 49,51,53,54,56,61
     GOSUB 6820: REM  draw yatzee board
     RANDOMIZE VAL(RIGHT$(TIME$, 2))
1180 LOCATE 25, 1
     PRINT "HOW MANY PLAYERS?  "; : LOCATE , , 1: GOSUB 2110
     GOSUB 7100: N = ASC(KB$) - 48
     IF N < 1 OR N > 5 THEN 1180
     IF N < 5 THEN GOSUB 6020
     IF CC = 1 THEN GOSUB 5500
     FOR A = 1 TO N
1250 LOCATE 25, 1: PRINT STRING$(70, " "); : LOCATE 25, 1
     PRINT "PLAYER NUMBER"; A; "NAME PLEASE  ";
     GOSUB 2110: LINE INPUT ; A$(A): IF A$(A) = "" THEN BEEP: GOTO 1250
     A$(A) = LEFT$(A$(A), 9)
     NEXT A
     IF CC = 1 THEN N = N + 1: A$(N) = "IBM PC"
     LOCATE 23, 1
     A = 0
1330 REM
     REM   NEXT ROLL PRESET
     REM
1360 A = A + 1: IF A > N THEN A = 1
     H = 0: GOSUB 5360
     IF A = 0 THEN 4780
     IF K(18, A) = 2 THEN 1360
     LOCATE 23, 1: PRINT STRING$(60, " ");
     LOCATE 23, 4 * (A - 1) + 14
     PRINT A$(A);
1430 REM
     REM   INITIAL ROLL
     REM
     H = H + 1: MR = 0
     FOR B = 1 TO 5
     J = B - 1: C(B) = INT(6 * RND(1) + 1)
     DIE = C(B): F(B) = 0
     GOSUB 5270
     GOSUB 5550
     NEXT B
     IF A * CC = N THEN 2160
1540 REM
     REM  PLAYER SELECTS QTY TO ROLL
     REM
1570 GOSUB 7080
     IF H > 2 THEN 1960
     POKE 106, 0: PRINT " HOW MANY DICE TO ROLL AGAIN? "; : LOCATE , , 1: GOSUB 2100: GOSUB 7100: F$ = KB$: PRINT F$; : F = ASC(F$) - 48: LOCATE , , 0
     IF F = -1 THEN GOSUB 7080
     IF F < 0 OR F > 5 THEN 1570
     IF F = 0 THEN 1960
     IF F = 5 THEN 1430
     REM
     REM  PLAYER SELECTS DICE TO ROLL
     REM
     H = H + 1
1680 GOSUB 7080
     FOR NN = 1 TO 4: F(NN) = 0: NEXT
     IF F > 1 THEN 1720
     PRINT " ROLL WHICH"; F; "DIE AGAIN?  "; : LOCATE , , 1: GOTO 1730
1720 PRINT " ROLL WHICH"; F; "DICE AGAIN   "; : LOCATE , , 1
1730 GOSUB 2110: FOR ND = 1 TO F:
1740 GOSUB 7100: F$ = KB$: : F(ND) = ASC(F$) - 48: GOSUB 2140: IF F(ND) = 0 AND ND = 1 THEN ND = F: GOTO 1760
     IF F(ND) < 1 OR F(ND) > 5 THEN 1740
1760 PRINT F(ND); : NEXT
     X = 2: XF = 0
     FOR J = 1 TO F
     IF F = 1 THEN 1810
     IF F(J) = F(J + 1) THEN X = 1
1810 IF F(1) = 0 THEN XF = 1
     NEXT J: IF XF = 1 THEN H = H - 1: GOTO 1570
     ON X GOTO 1680, 1840
1840 REM
     REM  PLAYER ROLLS DICE AGAIN
     REM
     FOR B = 1 TO 4
     IF F(B) = 0 THEN 1940
     C(F(B)) = INT(6 * RND(1) + 1)
     DIE = C(F(B)): J = F(B) - 1
     GOSUB 5270
     GOSUB 5550
     F(B) = 0
1940 NEXT B
     GOTO 1540
1960 REM
     REM   PLAY BOARD NUMBER
     REM
1990 GOSUB 7080
2000 PRINT " PLAY BOARD NUMBER?  "; : LOCATE , , 1: GOSUB 2100: GOSUB 7100: I$ = KB$: I = ASC(I$) - 48: LOCATE , , 0: IF I > 9 THEN I = I - 7
     GOSUB 2140: IF I > 9 THEN PRINT CHR$(I + 55); : GOTO 2030
     PRINT I;
2030 IF I < 1 OR I > 13 THEN 1990
     IF I = 12 AND K(12, A) > -1 THEN 2160
     IF K(I, A) = 0 THEN 2160
     LOCATE 24, 1: BEEP
     PRINT "NO - NO - DUMMY - - TRY AGAIN"; : FOR ND = 1 TO 1500: NEXT: LOCATE 24, 1: PRINT STRING$(60, " ");
     LOCATE 25, 1: PRINT STRING$(60, " "); : LOCATE 25, 1
     GOTO 2000
2100 REM  HIGH PITCH CLICK
2110 PLAY "L64T200N70": RETURN
     REM  GLISSANDO SOUND
2130 PLAY "MBt255MLL64O5CC#DD#EFF#GG#AA#B": RETURN
2140 ' LO PITCH CLICK
     PLAY "L64T200N46": RETURN
2160 REM
     REM  DICE LOGIC
     REM  CLEAR/SET S(M,K)
     REM
     FOR M = 0 TO 6
     FOR K = 0 TO 5
     S(M, K) = 0
     NEXT K
     NEXT M
     FOR J = 1 TO 5
     X = C(J): S(X, 0) = S(X, 0) + 1
     P = S(X, 0): S(X, P) = J
     NEXT J
     REM
     REM  SET S(0,K)=M SEQUENCE BY QTY
     REM
     X = 0
     FOR J = 5 TO 1 STEP -1
     FOR M = 6 TO 1 STEP -1
     IF S(M, 0) <> J THEN 2370
     S(0, X) = M: X = X + 1
2370 NEXT M
     NEXT J
     IF A * CC = N THEN 2760
     IF I > 6 THEN 2480
     REM
     REM  CHECK PLAYER BOARD 1-6
     REM
     GOSUB 6110
     IF X = -1 THEN 2740
     K(I, A) = I * S(S(0, X), 0)
     GOTO 4000
2480 REM
     REM  CHECK PLAYER BOARD 7-13
     REM
     ON I - 6 GOTO 2520, 2540, 2560, 2580, 2630, 2670, 2700
2520 IF S(S(0, 0), 0) < 3 THEN 2740
     GOSUB 6190: GOTO 4000
2540 IF S(S(0, 0), 0) < 4 THEN 2740
     GOSUB 6190: GOTO 4000
2560 IF S(S(0, 0), 0) <> 3 OR S(S(0, 1), 0) <> 2 THEN 2740
     K(9, A) = 25: GOTO 4000
2580 IF S(1, 0) > 0 AND S(2, 0) > 0 AND S(3, 0) > 0 AND S(4, 0) > 0 THEN 2620
     IF S(2, 0) > 0 AND S(3, 0) > 0 AND S(4, 0) > 0 AND S(5, 0) > 0 THEN 2620
     IF S(3, 0) > 0 AND S(4, 0) > 0 AND S(5, 0) > 0 AND S(6, 0) > 0 THEN 2620
     GOTO 2740
2620 K(10, A) = 30: GOTO 4000
2630 IF S(1, 0) AND S(2, 0) AND S(3, 0) AND S(4, 0) AND S(5, 0) = 1 THEN 2660
     IF S(2, 0) AND S(3, 0) AND S(4, 0) AND S(5, 0) AND S(6, 0) = 1 THEN 2660
     GOTO 2740
2660 K(11, A) = 40: GOTO 4000
2670 IF S(S(0, 0), 0) <> 5 THEN 2740
     IF K(12, A) = 0 THEN K(12, A) = 50: GOTO 4000
     K(12, A) = K(12, A) + 100: GOTO 4000
2700 GOSUB 6190: GOTO 4000
     REM
     REM  SET PLAYER INVALID
     REM
2740 K(I, A) = -1
     GOTO 4000
2760 REM
     REM  COMPUTER CHECKS
     REM
     I = 12
     IF S(S(0, 0), 0) = 5 AND K(12, A) = 0 THEN K(12, A) = 50: GOTO 4000
     IF S(S(0, 0), 0) = 5 AND K(12, A) > 0 THEN K(12, A) = K(12, A) + 100: GOTO 4000
     I = 8
     IF S(S(0, 0), 0) = 4 AND K(8, A) = 0 THEN GOSUB 6190: GOTO 4000
     I = 9
     IF S(S(0, 0), 0) = 3 AND S(S(0, 1), 0) = 2 AND K(9, A) = 0 THEN K(9, A) = 25: GOTO 4000
     IF K(11, A) <> 0 THEN 2920
     I = 11
     IF S(1, 0) AND S(2, 0) AND S(3, 0) AND S(4, 0) AND S(5, 0) = 1 THEN 2910
     IF S(2, 0) AND S(3, 0) AND S(4, 0) AND S(5, 0) AND S(6, 0) = 1 THEN 2910
     GOTO 2920
2910 K(11, A) = 40: GOTO 4000
2920 IF K(10, A) <> 0 THEN 2990
     I = 10
     IF S(1, 0) > 0 AND S(2, 0) > 0 AND S(3, 0) > 0 AND S(4, 0) > 0 THEN 2980
     IF S(2, 0) > 0 AND S(3, 0) > 0 AND S(4, 0) > 0 AND S(5, 0) > 0 THEN 2980
     IF S(3, 0) > 0 AND S(4, 0) > 0 AND S(5, 0) > 0 AND S(6, 0) > 0 THEN 2980
     GOTO 2990
2980 K(10, A) = 30: GOTO 4000
2990 IF H < 3 THEN 3160
     I = 6
     IF S(6, 0) > 2 AND K(6, A) = 0 THEN K(6, A) = 6 * S(6, 0): GOTO 4000
     I = 5
     IF S(5, 0) > 2 AND K(5, A) = 0 THEN K(5, A) = 5 * S(5, 0): GOTO 4000
     I = 4
     IF S(4, 0) > 2 AND K(4, A) = 0 THEN K(4, A) = 4 * S(4, 0): GOTO 4000
     I = 3
     IF S(3, 0) > 2 AND K(3, A) = 0 THEN K(3, A) = 3 * S(3, 0): GOTO 4000
     I = 7
     IF S(S(0, 0), 0) > 2 AND K(7, A) = 0 THEN GOSUB 6190: GOTO 4000
     I = 2
     IF S(2, 0) > 2 AND K(2, A) = 0 THEN K(2, A) = 2 * S(2, 0): GOTO 4000
     I = 1
     IF S(1, 0) > 2 AND K(1, A) = 0 THEN K(1, A) = S(1, 0): GOTO 4000
     I = 13: IF K(13, A) <> 0 THEN 3160
     IF C(1) + C(2) + C(3) + C(4) + C(5) > 19 THEN GOSUB 6190: GOTO 4000
3160 REM
     REM  CLEAR DICE NUMBER F(B)
     REM  COMPUTER
     REM
     FOR B = 1 TO 5
     F(B) = 0
     NEXT B
     REM
     REM  GET DICE CONTROL
     REM  COMPUTER
     REM
     H = H + 1: IF H > 3 THEN 3860
3280 I = M(MR): IF I <> 0 THEN 3310
3290 MR = MR + 1: IF MR > 13 THEN MR = 1
     GOTO 3280
3310 IF I = 12 AND K(12, A) > -1 THEN 3350
     IF K(I, A) <> 0 THEN 3290
     IF I = 9 THEN 3460
     IF I = 10 OR I = 11 THEN 3580
3350 REM
     REM  GET DICE 1,2,3,4
     REM  COMPUTER
     REM
     M = 0: J = 1
3400 M = M + 1: IF M > 4 THEN 3740
     K = S(0, M): IF K = 0 THEN 3740
     FOR L = 1 TO S(K, 0)
     F(J) = S(K, L): J = J + 1
     NEXT L
     GOTO 3400
3460 REM
     REM  GET DICE FH
     REM  COMPUTER
     REM
     M = 0: J = 1
3510 M = M + 1: IF M > 4 THEN 3740
     K = S(0, M): IF K = 0 THEN 3740
     IF K > 1 THEN 3510
     FOR L = 1 TO S(K, 0)
     F(J) = S(K, L): J = J + 1
     NEXT L
     GOTO 3510
3580 REM
     REM  GET DICE LG/SM ST
     REM  COMPUTER
     REM
     M = 0: J = 1
3630 M = M + 1: IF M > 4 THEN 3700
     K = S(0, M): IF K = 0 THEN 3700
     IF S(K, 0) = 1 THEN 3630
     FOR L = 1 TO S(K, 0)
     F(J) = S(K, L): J = J + 1
     NEXT L
     GOTO 3630
3700 IF F(1) <> 0 THEN 3740
     L = INT(2 * RND(1) + 1)
     F(1) = 5
     IF L = 1 THEN F(1) = 1
3740 REM
     REM  COMPUTER ROLL AGAIN
     REM
     FOR B = 1 TO 4
     IF F(B) < 1 THEN 3830
     C(F(B)) = INT(6 * RND(1) + 1)
     DIE = C(F(B)): J = F(B) - 1
     GOSUB 5270
     GOSUB 5550
3830 F(B) = 0
     NEXT B
     GOTO 2160
3860 REM
     REM  COMPUTER MUST SCORE
     REM
3890 MR = MR + 1: IF MR > 13 THEN MR = 1
     I = M(MR): IF I = 0 THEN 3890
     IF K(I, A) <> 0 THEN 3890
     IF I > 6 THEN 3980
     GOSUB 6110
     IF X = -1 THEN 3990
     IF K(I, A) <> 0 THEN 3890
     K(I, A) = S(I, 0) * I
     IF K(I, A) <> 0 THEN 4000
3980 IF I = 13 AND K(13, A) = 0 THEN GOSUB 6190
3990 IF K(I, A) = 0 THEN K(I, A) = -1
4000 REM
     REM  GET SCOREBOARD TOTALS
     REM
     FOR J = 14 TO 17
     K(J, A) = 0
     NEXT J
     FOR J = 1 TO 6
     IF K(J, A) < 0 THEN 4090
     K(15, A) = K(15, A) + K(J, A)
4090 NEXT J
     IF K(15, A) > 62 THEN K(14, A) = 35
     FOR J = 7 TO 13
     IF K(J, A) < 0 THEN 4140
     K(16, A) = K(16, A) + K(J, A)
4140 NEXT J
     K(17, A) = K(14, A) + K(15, A) + K(16, A)
     REM
     REM  PRINT SCORE
     REM
     GOSUB 2130
     COLOR 15, 0
     FOR J = 1 TO 6
     IF K(J, A) < 0 THEN LOCATE J + 1, 4 * (A - 1) + 15: PRINT "  0"; : GOTO 4250
     IF K(J, A) < 1 THEN 4250
     LOCATE J + 1, 4 * (A - 1) + 15: PRINT USING "###"; K(J, A);
4250 NEXT J
     FOR J = 7 TO 13
     IF K(J, A) < 0 THEN LOCATE J + 4, 4 * (A - 1) + 15: PRINT "  0": GOTO 4300
     IF K(J, A) < 1 THEN 4300
     LOCATE J + 4, 4 * (A - 1) + 15: PRINT USING "###"; K(J, A)
4300 NEXT J
     LOCATE 9, 4 * (A - 1) + 15: PRINT USING "###"; K(15, A)
     LOCATE 19, 4 * (A - 1) + 15: PRINT USING "###"; K(16, A)
     LOCATE 20, 4 * (A - 1) + 15: PRINT USING "###"; K(14, A)
     LOCATE 21, 4 * (A - 1) + 15: PRINT USING "###"; K(17, A)
     COLOR 7, 0
     IF A * CC <> N THEN 1330
     REM
     REM  RESET M(I) COMPUTER PRIORITIES
     REM
     FOR B = 1 TO 13
     IF M(B) = 12 THEN 4430
     IF M(B) = I THEN M(B) = 0
4430 NEXT B
     GOTO 1330
4450 REM
     REM   INSTRUCTIONS
     REM
     PRINT "            Y A H T Z E E "
     PRINT "THIS IS THE GAME OF YAHTZEE - "
     PRINT "FROM 1 TO 5 PLAYERS MAY PLAY AT THE SAME TIME"
     PRINT "WITH EACH PLAYERS CURRENT STATUS SHOWN ON THE"
     PRINT "PLAYING BOARD, INCLUDING TOTAL SCORES"
     PRINT
     PRINT "THE ONLY DIFFERENCE BETWEEN THIS GAME AND THE"
     PRINT "POPULAR HOME GAME IS THAT YOU MAY GET MULTIPLE"
     PRINT "YAHTZEES HERE ..... THE FIRST YAHTZEE SCORES"
     PRINT "50 POINTS, AND EACH ADDITIONAL ONE WILL YIELD"
     PRINT "A BONUS OF 100 POINTS (IF THE YAHTZEE IS PUT"
     PRINT "INTO THE YAHTZEE BLOCK)..... IN ADDITION YOU"
     PRINT "WILL BE GIVEN AN EXTRA TURN AT THE END OF"
     PRINT "THE GAME": PRINT : PRINT
     PRINT "THE WINNER WILL BE ANNOUNCED AT THE END OF"
     PRINT "THE GAME - - BUT I WOULDNT ADVISE ANYONE"
     PRINT "TO BE LAST......."
     PRINT : PRINT
     GOSUB 2110: INPUT "HIT RETURN TO CONTINUE  "; Y$: BEEP
     RETURN
4680 RETURN
     LOCATE 10, 10: PRINT "YATZEE.BAS     VER 3.2"
     LOCATE 12, 10: PRINT "27 JUN 79"
     LOCATE 14, 10: PRINT "DEVELOPED BY"
     LOCATE 15, 13: PRINT "J.L. HELMS    &    M.F. PEZOK"
     LOCATE , 16, 13: PRINT "1009 LEYTE RD / 1321 SAIPAN RD"
     LOCATE 17, 17: PRINT "CORONADO,  CA.  92118"
     LOCATE 18, 15: PRINT "(714) 435-6992 / 437-4659"
     PRINT CHR$(11)
     RETURN
4780 REM
     REM   END - SORT WINNER
     REM
     X = 2: IF N = 1 THEN 4890
     FOR J = 1 TO N - 1
     IF K(17, J) > K(17, J + 1) THEN 4870
     K = K(17, J): K(17, J) = K(17, J + 1): K(17, J + 1) = K
     A$ = A$(J): A$(J) = A$(J + 1): A$(J + 1) = A$
     X = 1
4870 NEXT J
     ON X GOTO 4780, 4890
4890 REM
     REM   PRINT WINNERS STANDINGS
     REM
     RESTORE 5220
     FOR J = 1 TO N
     LOCATE 25, 1: PRINT STRING$(60, " ");
     IF J > 1 AND J = N THEN RESTORE 5260
     LOCATE 25, 1: READ A$
     PRINT A$; "     "; A$(J); " ";
     TT = 500 * (N - J + 1): IF TT < 1500 THEN TT = 1500
     FOR T = 1 TO TT: NEXT T
     NEXT J
     LOCATE 25, 1: PRINT STRING$(60, " ");
     LOCATE 24, 1: PRINT "+++   END OF GAME   +++";
     FOR T = 1 TO 2000: NEXT T
     '
     GOSUB 2110: LOCATE 25, 1: PRINT "PLAY AGAIN?  Y/N  ";
5060 Y$ = INKEY$: IF Y$ = "" THEN GOTO 5060
     IF Y$ = "Y" OR Y$ = "y" THEN GOSUB 5110: GOTO 1110
     IF Y$ = "N" OR Y$ = "n" THEN BEEP: GOTO 5100
     GOTO 5060
5100 CLS
5110 REM
     REM   CLEAR MATRICES
     REM
     FOR K = 1 TO 7
     FOR J = 1 TO 18
     K(J, K) = 0
     NEXT J
     A$(K) = ""
     NEXT K
RETURN
     CLS
5220 DATA "+++   THE WINNER   +++"
     DATA " SECOND PLACE"," THIRD PLACE "
     DATA " FOURTH PLACE "," FIFTH PLACE "
     DATA " SIXTH PLACE "
5260 DATA " DEAD LAST "
EndOf:
CLS : PRINT "Please Wait...": CHAIN "moneycga"
5270 REM
     REM   ERASE DIE
     REM
     COLOR 0, 7: PRINT ""; :
     LOCATE 4 * J + 1, 50: PRINT "       ";
     LOCATE 4 * J + 2, 50: PRINT "       ";
     LOCATE 4 * J + 3, 50: PRINT "       ";
     COLOR 7, 0
     RETURN
5360 REM
     REM    CHECK IF DONE
     REM
     X = 0
     FOR J = 1 TO N
     Y = 2
     FOR K = 1 TO 13
     IF K(K, J) = 0 THEN Y = 1
     NEXT K
     K(18, J) = Y
     IF Y = 2 THEN X = X + 1
     NEXT J
     IF X >= N THEN A = 0
     RETURN
5500 REM
     REM  COMPUTER PRIORITIES INFO
     REM
     GOSUB 6780
     RETURN
5550 REM
     REM   PRINT DIE
     REM
     COLOR 0, 7: LOCATE , , 0
     REM

     ON DIE GOTO 5950, 5890, 5830, 5770, 5710, 5650
     '
     '   SIX
     '
5650 LOCATE 4 * J + 1, 50: PRINT ""; CHR$(32); CHR$(2); CHR$(32); CHR$(2); CHR$(32); CHR$(2); CHR$(32);
     LOCATE 4 * J + 2, 50: PRINT CHR$(32); CHR$(32); CHR$(32); CHR$(32); CHR$(32); CHR$(32); CHR$(32);
     LOCATE 4 * J + 3, 50: PRINT CHR$(32); CHR$(2); CHR$(32); CHR$(2); CHR$(32); CHR$(2); CHR$(32); : GOTO 5980
     '
     '   FIVE
     '
5710 LOCATE 4 * J + 1, 50: PRINT ""; CHR$(32); CHR$(2); CHR$(32); " "; CHR$(32); CHR$(2); " ";
     LOCATE 4 * J + 2, 50: PRINT " "; CHR$(32); " "; CHR$(2); " "; CHR$(32); " ";
     LOCATE 4 * J + 3, 50: PRINT " "; CHR$(2); " "; CHR$(32); " "; CHR$(2); " "; : GOTO 5980
     '
     '   FOUR
     '
5770 LOCATE 4 * J + 1, 50: PRINT ""; " "; CHR$(2); "  "; CHR$(32); CHR$(2); " ";
     LOCATE 4 * J + 2, 50: PRINT "   "; CHR$(32); CHR$(32); CHR$(32);
     LOCATE 4 * J + 3, 50: PRINT " "; CHR$(2); "  "; CHR$(32); CHR$(2); " "; : GOTO 5980
     '
     '   THREE
     '
5830 LOCATE 4 * J + 1, 50: PRINT ""; " "; CHR$(2); "     ";
     LOCATE 4 * J + 2, 50: PRINT "   "; CHR$(2); "   ";
     LOCATE 4 * J + 3, 50: PRINT "     "; CHR$(2); " "; : GOTO 5980
     '
     '   TWO
     '
5890 LOCATE 4 * J + 1, 50: PRINT ""; " "; CHR$(2); "     ";
     LOCATE 4 * J + 2, 50: PRINT "       ";
     LOCATE 4 * J + 3, 50: PRINT "     "; CHR$(2); " "; : GOTO 5980
     '
     '   ONE
     '
5950 LOCATE 4 * J + 1, 50: PRINT ""; "       ";
     LOCATE 4 * J + 2, 50: PRINT "   "; CHR$(2); "   ";
     LOCATE 4 * J + 3, 50: PRINT "       "; : GOTO 5980
5980 REM   GET OUT
     COLOR 7, 0
     LOCATE 1, 1
     RETURN
6020 REM
     REM  COMPUTER OPTION
     REM
6050 LOCATE 25, 1
     PRINT "DO YOU WISH TO PLAY AGAINST ME?  Y/- "; : GOSUB 2110
6070 Y$ = INKEY$: IF Y$ = "" THEN 6070 ELSE BEEP
     IF Y$ = "Y" OR Y$ = "y" THEN CC = 1: RETURN
     GOTO 6050
6110 REM
     REM  CHECK FOR ACES-SIXES ANY POSITION
     REM
     X = -1
     FOR J = 0 TO 4
     IF S(0, J) = I THEN X = J
     NEXT J
     RETURN
6190 REM
     REM  TOTAL DICE VALUE
     REM
     FOR J = 1 TO 5
     K(I, A) = K(I, A) + C(J)
     NEXT J
     RETURN
     REM
     REM  MATRIX INFORMATION
     REM
     REM  C(5)     CURRENT DICE
     REM  K(18,7)  SCOREBOARD
     REM           COLUMNS 1-13 BOARD NUMBER
     REM           COLUMN    14 BONUS UPPER
     REM           COLUMN    15 TOTAL UPPER
     REM           COLUMN    16 TOTAL LOWER
     REM           COLUMN    17 GRAND TOTAL
     REM           COLUMN    18 DONE/NOT DONE STATUS
     REM           ROW     1- 7 PLAYERS SCORE
     REM           ROW        N COMPUTERS SCORE (<7 PLAYERS)
     REM
     REM  F(5)     DICE NUMBER TO ROLL AGAIN
     REM  A$(7)    PLAYERS NAMES
     REM  S(6,5)   COMPUTERS DICE LOGIC
     REM           COLUMN     0 DICE NUMBER BY QTY SEQUENCE
     REM           COLUMN     1 QTY/POSITION FOR ACES
     REM           COLUMN     2 QTY/POSITION FOR TWOS
     REM           COLUMN     3 QTY/POSITION FOR THREES
     REM           COLUMN     4 QTY/POSITION FOR FOURS
     REM           COLUMN     5 QTY/POSITION FOR FIVES
     REM           COLUMN     6 QTY/POSITION FOR SIXES
     REM           ROW        0 QUANTITY OF DICE
     REM           ROW     1- 5 POSITION OF DICE IN C(5)
     REM
     REM  SAMPLE S(Y,X) FOR DICE OF 5,2,4,6,4
     REM
     REM  Y/X   0  1  2  3  4  5
     REM  0     4  6  5  2          IN QTY/VALUE SEQUENCE
     REM  1                         NO DIE=1
     REM  2     1  2                1 TWO POSITION 2
     REM  3                         NO DIE=3
     REM  4     2  3  5             2 FOURS POSITIONS 3 AND 5
     REM  5     1  1                1 FIVE POSITION 1
     REM  6     1  4                1 SIX POSITION 4
     REM           +           +
     REM  +     +  ++++++++++++++++ SECTION FOR POSITION DATA
     REM  +     +------------------ COLUMN INDICATES QTY
     REM  +------------------------ INDEX EQUATES TO DIE VALUE
     REM
     REM  M(13)    PRIORITY NUMBERS FOR MUST SCORE WHERE VALUE
     REM           REFERS TO PLAY BOARD NUMBER
     REM
     REM  TO RUN INTERNAL CHECKS SECTION - ENTER A -1 FOR
     REM  PLAYING BOARD NUMBER OR QTY OF DICE TO ROLL
     REM  AGAIN - - DATA WILL NOT BE LOST AND SCREEN
     REM  WILL BE RESET WITH CURRENT DICE SHOWN - -
     REM  PLAYERS/COMPUTERS SCORE WILL NOT SHOW UNTIL
     REM  AFTER THEIR TURN
     REM
6780 REM  COMPUTER PRIORIRIES
     RESTORE 6800
6800 DATA 11,9,12,8,1,2,3,4,5,6,10,7,13
     FOR Y = 1 TO 13: READ M(Y): NEXT: RETURN: RETURN
6820 REM player's board
     CLS
     PRINT "             ÕÍÍÍÑÍÍÍÑÍÍÍÑÍÍÍÑÍÍÍÑÍÍÍ¸"
     PRINT "ACES........1³...³...³...³...³...³...³1"
     PRINT "TWOS........2³...³...³...³...³...³...³2"
     PRINT "THREES......3³...³...³...³...³...³...³3"
     PRINT "FOURS.......4³...³...³...³...³...³...³4"
     PRINT "FIVES.......5³...³...³...³...³...³...³5"
     PRINT "SIXES.......6³...³...³...³...³...³...³6"
     PRINT "             ÆÍÍÍØÍÍÍØÍÍÍØÍÍÍØÍÍÍØÍÍÍµ"
     PRINT "TOTAL UPPER..³...³...³...³...³...³...³"
     PRINT "             ÆÍÍÍØÍÍÍØÍÍÍØÍÍÍØÍÍÍØÍÍÍµ"
     PRINT "3 OF A KIND.7³...³...³...³...³...³...³7"
     PRINT "4 OF A KIND.8³...³...³...³...³...³...³8"
     PRINT "FULL HOUSE..9³...³...³...³...³...³...³9"
     PRINT "SM STRAIGHT.A³...³...³...³...³...³...³A"
     PRINT "LG STRAIGHT.B³...³...³...³...³...³...³B"
     PRINT "YATZEE......C³...³...³...³...³...³...³C"
     PRINT "CHANCE......D³...³...³...³...³...³...³D"
     PRINT "             ÆÍÍÍØÍÍÍØÍÍÍØÍÍÍØÍÍÍØÍÍÍµ"
     PRINT "TOTAL LOWER..³...³...³...³...³...³...³"
     PRINT "TOP BONUS....³...³...³...³...³...³...³"
     PRINT "GRAND TOTAL..³...³...³...³...³...³...³"
     PRINT "             ÔÍÍÍÏÍÍÍÏÍÍÍÏÍÍÍÏÍÍÍÏÍÍÍ¾"
     FOR N = 1 TO 5: LOCATE N * 4 - 2, 46: PRINT N; : NEXT
     RETURN
7080 LOCATE 25, 1: PRINT STRING$(70, " "); : LOCATE 25, 1: RETURN
     ' KB INPUT AND ESCAPE
7100 KB$ = "": WHILE KB$ = "": KB$ = INKEY$: WEND
     IF KB$ = CHR$(27) THEN CLS : PRINT "By Now...": SLEEP 1: GOTO EndOf ELSE RETURN

