10 REM YAHZE.ECB 100 REM ===== YAHTZEE...LAST MODIFIED 04/15/80 R.E.H. 110 LET K$="&K": PRINT K$;"&J&J" 120 PRINT TAB(15);"+++ COMPUTOR GAME OF YAHTZEE +++" 130 DIM A(10,13),D(5),K(10,19),S(5),Z(10,19),G$(10),M$(21) 140 PRINT : PRINT : LET M$="---------------------" 150 LET T9=35: LET P=1: REM .......RANDOMIZE 160 PRINT " NEED INSTRUCTIONS ---=>"; 170 INPUT (1,0)G$: LET G$=G$+"N" 180 IF G$(1,1)="N" THEN 200 ELSE PRINT 190 GOSUB 2650: PRINT 200 INPUT " HOW MANY WANT TO PLAY ---=>",J 210 LET J=INT(ABS(J)) 220 IF J<11 THEN 240 230 PRINT : PRINT "No more than 10 please...": GOTO 200 240 PRINT : PRINT " WOULD YOU LIKE A BLANK SCORE PAD ---=>"; 250 INPUT (1,0)G$: LET G$=G$+"Y" 260 IF G$(1,1)="N" THEN 280 ELSE PRINT 270 GOSUB 2870 280 FOR N=1 TO J 290 FOR V=1 TO 19: LET Z(N,V)=1: LET K(N,V)=0: NEXT V 300 FOR V=1 TO 13: LET A(N,V)=0: NEXT V 310 NEXT N 320 FOR V=1 TO 10 330 FOR N=1 TO 19: LET K(V,N)=K(V,N)-Z(V,N): NEXT N 340 NEXT V 350 LET A=1: REM ...13 Turns loop 360 FOR P=1 TO J 370 FOR N=1 TO 5: LET S(N)=N: NEXT N 380 LET L=5: PRINT 390 PRINT "TURN ";A;" PLAYER ";P;" (MUST FILL ROW(S)" 400 FOR N=1 TO 13 410 IF A(P,N)=0 THEN PRINT N; 420 NEXT N 430 PRINT ")" 440 GOSUB 1740 450 LET M=1: REM ...Two turn loop 460 INPUT (3,0)" RESHAKE ---=>",L: LET L=INT(L) 470 IF L=100 THEN 1200 480 IF L>=0 THEN 550 490 GOSUB 2870 500 PRINT "TURN ";A;" PLAYER ";P;" (MUST FILL ROW(S)" 510 FOR N=1 TO 13 520 IF A(P,N)=0 THEN PRINT N; 530 NEXT N 540 PRINT ")": GOSUB 1740: GOTO 460 550 IF L>5 THEN 460 560 IF L=0 THEN 750 570 IF L=1 THEN 630 580 IF L=5 THEN 610 590 PRINT " WHICH ";L;" DICE ?" 600 GOTO 630 610 FOR N=1 TO 5: LET S(N)=N: NEXT N 620 GOTO 730 630 PRINT "(Player";A;") INPUT NO. ";L;" WHICH 1's ---=>"; 640 IF L=1 THEN INPUT S(1) 650 IF L=2 THEN INPUT S(1),S(2) 660 IF L=3 THEN INPUT S(1),S(2),S(3) 670 IF L=4 THEN INPUT S(1),S(2),S(3),S(4) 680 LET N=1: REM ...Input loop 690 LET S(N)=INT(ABS(S(N))) 700 IF S(N)>5 THEN 590 710 IF S(N)=0 THEN 590 720 LET N=N+1: IF N",R: LET R=INT(R) 760 IF R=100 THEN 1200 770 IF R>=0 THEN 790 780 GOSUB 2870: GOTO 750 790 IF R>13 THEN 750 800 IF R>6 THEN 830 810 LET B=R 820 GOTO 840 830 LET B=R+3 840 IF R<>0 THEN 1030 850 FOR N=1 TO 5 860 LET Q=D(N) 870 IF K(P,Q)>=0 THEN 900 880 PRINT " YOU CAN'T SKIP. USE IN THE FIRST 6 ROWS." 890 GOTO 750 900 NEXT N 910 PRINT " WHICH ROW DO YOU WANT TO SKIP ---=>"; 920 INPUT R: LET R=INT(ABS(R)) 930 IF R>13 THEN 910 940 IF R>6 THEN 980 950 IF R=0 THEN 1200 960 LET B=R 970 GOTO 990 980 LET B=R+3 990 IF K(P,B)>=0 THEN 1040 1000 LET K(P,B)=0 1010 LET A(P,R)=1 1020 GOTO 1170 1030 IF K(P,B)<0 THEN 1060 1040 PRINT "ROW ";R;" IS FILLED. "; 1050 GOTO 750 1060 GOSUB 2510 1070 IF F=1 THEN 750 1080 IF R<7 THEN GOSUB 1950 1090 IF R=7 THEN GOSUB 2010 1100 IF R=8 THEN GOSUB 2010 1110 IF R=9 THEN GOSUB 2050 1120 IF R=10 THEN GOSUB 2070 1130 IF R=11 THEN GOSUB 2090 1140 IF R=12 THEN GOSUB 2110 1150 IF R=13 THEN GOSUB 2010 1160 LET A(P,R)=1 1170 FOR N=1 TO 5: LET S(N)=0: NEXT N 1180 NEXT P 1190 LET A=A+1: IF A<14 THEN 360: REM ...END 13 turns loop 1200 PRINT : PRINT "*** Turn on printer for results ***" 1210 INPUT "*** TYPE IN ANY LETTER WHEN READY *** ---=>",I$ 1220 GOSUB 2130 1230 FOR I=1 TO J 1240 LET L=0: LET K(I,8)=0 1250 FOR N=1 TO 6 1260 IF K(I,N)<0 THEN LET K(I,N)=0 1270 LET L=L+K(I,N) 1280 NEXT N 1290 LET K(I,7)=L 1300 IF L<63 THEN 1320 1310 LET K(I,8)=35 1320 LET K(I,9)=L+K(I,8): LET K(I,18)=K(I,9) 1330 LET L=0 1340 FOR N=10 TO 16 1350 IF K(I,N)<0 THEN LET K(I,N)=0 1360 LET L=L+K(I,N) 1370 NEXT N 1380 LET K(I,17)=L 1390 LET K(I,19)=L+K(I,18) 1400 NEXT I 1410 LET L=0 1420 FOR N=1 TO 24 1430 IF N<7 THEN GOSUB 2190 1440 IF N=7 THEN GOSUB 2220 1450 IF N=8 THEN GOSUB 2250 1460 IF N=9 THEN GOSUB 2270 1470 IF N=10 THEN GOSUB 2290 1480 IF N=11 THEN GOSUB 2220 1490 IF N=12 THEN GOSUB 2370 1500 IF N=13 THEN GOSUB 2390 1510 IF N=14 THEN GOSUB 2410 1520 IF N=15 THEN GOSUB 2430 1530 IF N=16 THEN GOSUB 2450 1540 IF N=17 THEN GOSUB 2470 1550 IF N=18 THEN GOSUB 2490 1560 IF N=19 THEN GOSUB 2220 1570 IF N=20 THEN GOSUB 2320 1580 IF N=21 THEN GOSUB 2290 1590 IF N=22 THEN GOSUB 2220 1600 IF N=23 THEN GOSUB 2220 1610 IF N=24 THEN GOSUB 2350 1620 IF N=7 THEN 1710 1630 IF N=11 THEN 1710 1640 IF N=19 THEN 1710 1650 IF N=22 THEN 1710 1660 IF N=23 THEN 1710 1670 LET L=L+1 1680 FOR I=1 TO J 1690 PRINT %4I;K(I,L); 1700 NEXT I 1710 PRINT 1720 NEXT N 1730 GOTO 3090 1740 FOR N=1 TO L 1750 LET D(S(N))=INT(RND(0)*6)+1 1760 NEXT N 1770 PRINT " THE DICE: "; 1780 FOR N=1 TO 4 1790 FOR T=N+1 TO 5 1800 IF D(N)<=D(T) THEN 1840 1810 LET U=D(T) 1820 LET D(T)=D(N) 1830 LET D(N)=U 1840 NEXT T 1850 NEXT N 1860 FOR N=1 TO 5: PRINT D(N);: NEXT N 1870 LET C=0: LET E=0 1880 FOR N=1 TO 4 1890 IF D(N)<>D(N+1) THEN 1920 1900 LET C=C+1 1910 GOTO 1930 1920 IF D(N)+1=D(N+1) THEN LET E=E+1 1930 NEXT N 1940 RETURN 1950 LET I=0 1960 FOR N=1 TO 5 1970 IF D(N)=R THEN LET I=I+D(N) 1980 NEXT N 1990 LET K(P,R)=I 2000 RETURN 2010 LET I=0 2020 FOR N=1 TO 5: LET I=I+D(N): NEXT N 2030 LET K(P,R+3)=I 2040 RETURN 2050 LET K(P,12)=25 2060 RETURN 2070 LET K(P,13)=30 2080 RETURN 2090 LET K(P,14)=40 2100 RETURN 2110 LET K(P,15)=50 2120 RETURN 2130 PRINT "&K" 2140 PRINT TAB(9);"YAHTZEE SCORE PAD" 2150 PRINT " ROW PLAYER "; 2160 FOR N=1 TO J: PRINT %4I;N;: NEXT N 2170 PRINT : GOSUB 2220: PRINT 2180 RETURN 2190 PRINT " ";N;TAB(15);N; 2200 PRINT "'s!"; 2210 RETURN 2220 PRINT M$; 2230 FOR M=1 TO J: PRINT " ---";: NEXT M 2240 RETURN 2250 PRINT TAB(11);"SUBTOTAL!"; 2260 RETURN 2270 PRINT TAB(14);"BONUS!"; 2280 RETURN 2290 PRINT " UPPER"; 2300 GOSUB 2250 2310 RETURN 2320 PRINT " LOWER"; 2330 GOSUB 2250 2340 RETURN 2350 PRINT TAB(8);"GRAND TOTAL!"; 2360 RETURN 2370 PRINT " 7 3 OF A KIND!"; 2380 RETURN 2390 PRINT " 8 4 OF A KIND!"; 2400 RETURN 2410 PRINT " 9 FULL HOUSE!"; 2420 RETURN 2430 PRINT " 10 SMALL STRAIGHT!"; 2440 RETURN 2450 PRINT " 11 LARGE STRAIGHT!"; 2460 RETURN 2470 PRINT " 12 YAHTZEE!"; 2480 RETURN 2490 PRINT " 13 CHANCE!"; 2500 RETURN 2510 LET F=-1 2520 IF B<10 OR B>15 THEN 2630 2530 IF B=10 AND C>=2 THEN 2630 2540 IF B=11 AND C=3 AND D(2)=D(4) THEN 2630 2550 IF B=12 AND C=3 AND D(2)<>D(4) THEN 2630 2560 IF B=13 AND E>=3 THEN 2630 2570 IF B=14 AND E=4 THEN 2630 2580 IF B=15 AND C=4 THEN 2630 2590 LET Q=D(1) 2600 IF C=4 AND K(P,Q)>=0 THEN 2630 2610 LET F=0 2620 PRINT " I CAN-T PUT IT THERE. " 2630 LET F=F+1 2640 RETURN 2650 PRINT " This program will shake the dice and score for" 2660 PRINT " YAHTZEE. The output will look like this:" 2670 PRINT " ...THE DICE: 2 3 3 5 5 RESHAKE ---=>?" 2680 PRINT " Type in the number of dice you want to reshake." 2690 PRINT " In this case, enter 3." 2700 PRINT " The output will look like: WHICH 3 DICE?" 2710 PRINT " We will try for 5's so we would type in 1,2,3" 2720 PRINT 2730 PRINT "NOTE: THE DICE ARE INDEXED BY POSITION-NOT BY COUNT" 2740 PRINT : PRINT "*** TYPE IN ANY LETTER ***"; 2750 INPUT (1,300)"---=>",I$: PRINT 2760 PRINT " The output will look like:" 2770 PRINT " THE DICE: 4 5 5 5 6 RESHAKE ---=>? If you were" 2780 PRINT " satisfied with this count, you would type in 0" 2790 PRINT " I think you should try for more 5's. Type in 2" 2800 PRINT " (Enter 100 to end game or -1 to see scorepad.)" 2810 PRINT " WHICH 2 DICE ---=>? Type in 5,1 (IN ANY ORDER)" 2820 PRINT " THE DICE: 5 5 5 5 5 TO WHICH ROW ---=>?" 2830 PRINT " Type in the row to which this score should go" 2840 PRINT " (SEE SAMPLE SCORE PAD). Each player has 13" 2850 PRINT " turns to COMPLETE his score pad--GOOD LUCK ALL!" 2860 RETURN 2870 PRINT K$: PRINT TAB(9);"YAHTZEE SCORE PAD" 2880 PRINT " ROW PLAYER ";P;TAB(T9);M$;" ---" 2890 PRINT M$;" ---";TAB(T9);: GOSUB 2370: PRINT %4I;K(J,10) 2900 LET N=1: GOSUB 2190: PRINT %4I;K(P,1);TAB(T9); 2910 GOSUB 2390: PRINT %4I;K(P,11) 2920 LET N=2: GOSUB 2190: PRINT %4I;K(P,2);TAB(T9); 2930 GOSUB 2410: PRINT %4I;K(P,12) 2940 LET N=3: GOSUB 2190: PRINT %4I;K(P,3);TAB(T9); 2950 GOSUB 2430: PRINT %4I;K(P,13) 2960 LET N=4: GOSUB 2190: PRINT %4I;K(P,4);TAB(T9); 2970 GOSUB 2450: PRINT %4I;K(P,14) 2980 LET N=5: GOSUB 2190: PRINT %4I;K(P,5);TAB(T9); 2990 GOSUB 2470: PRINT %4I;K(P,15) 3000 LET N=6: GOSUB 2190: PRINT %4I;K(P,6);TAB(T9); 3010 GOSUB 2490: PRINT %4I;K(P,16) 3020 PRINT M$;" ---";TAB(T9);M$;" ---" 3030 GOSUB 2320: PRINT %4I;K(P,17);TAB(20); 3040 PRINT " BONUS! ";%3I;K(P,8);TAB(42); 3050 PRINT "UPPER SUBTOTAL";%4I;K(P,18) 3060 PRINT M$;" --- ========== ";M$: PRINT TAB(T9+8); 3070 GOSUB 2350: PRINT %5I;K(P,19) 3080 RETURN 3090 END