Listing of file='YAHTZE.BAS;01' on disk='vmedia/ccug_14b-sector.ccvf'
1 PLOT 12 2 CLEAR 100 4 GOTO 50110 5 PLOT 6,6,14:PRINT "YAHTZEE":PRINT :INPUT "DO YOU NEED INSTRUCTIONS? ";A$ 6 PLOT 12:IF LEFT$ (A$,1)= "Y"THEN GOSUB 10000 7 INPUT "HOW MANY PLAYERS? ";NP:NP= NP- 1:IF NP> 3THEN PLOT 12:PRINT "4 MAXIMUM":PRINT :GOTO 7 8 FOR I= 0TO NP:PRINT "WHAT IS PLAYER #";I+ 1;:INPUT "'S NAME? ";P$(I) 9 PRINT :NEXT I:PLOT 12:DIM SC(NP,20) 10 PLOT 15:DIM D(4),C(5,1,3) 11 FOR I= 0TO 20:FOR J= 0TO NP:SC(J,I)= - 1:NEXT J,I 12 ZS= INT (20/ (NP+ 1)) 13 ZS= ZS+ 1 20 FOR I= 0TO 5:FOR J= 0TO 1:FOR K= 0TO 3 30 READ C(I,J,K) 40 NEXT K,J,I 60 DATA 000,000,000,240,000,016,000,240 70 DATA 032,000,000,240,000,000,128,240 80 DATA 032,000,000,240,000,016,128,240 90 DATA 32,0,32,240,128,0,128,240 100 DATA 032,00,032,240,128,016,128,240 110 DATA 32,0,32,240,144,0,144,240 114 GOSUB 1900 115 GOSUB 2000 116 PN= INT (RND (1)* (NP+ 1)) 120 NR= 0 130 FOR R= 0TO 2 150 FOR DN= NRTO 4 160 DU= INT (RND (1)* 6)+ 1 170 DI(DN)= DU:D(DN- NR)= DU 180 NEXT DN 190 N= 4- NR 200 S= 24576+ R* 640+ NR* 8 210 GOSUB 1000 215 NR= 0 220 IF R= 2THEN 500 230 X= 1:Y= 4+ 5* R 240 PLOT 3,64,0 250 PLOT 3,127,X,Y,PN* 2+ 1,88 260 OUT 8,255:IN= CALL (255):IF IN= - 1THEN 260 261 OUT 8,247 265 IF IN= 28THEN 5000 268 PLOT 3,127,X,Y,0,32 270 IF IN< 25OR IN> 26THEN 335 280 PLOT 3,127,X,Y,0,32 282 IC= 0 283 IC= IC+ 1 284 IF IC= 5THEN 5000 290 IF IN= 25THEN X= X+ 4 300 IF IN= 26THEN X= X- 4 310 IF X< 1THEN X= 17 320 IF X> 17THEN X= 1 325 IF DI(INT (X/ 4))> INT (DI(INT (X/ 4)))THEN 283 330 GOTO 240 335 IF IN< > 10THEN 400 340 D2(NR)= DI(INT (X/ 4)):DI(INT (X/ 4))= DI(INT (X/ 4))+ .5 350 D(0)= D2(NR):NR= NR+ 1:N= 0 360 S= 24576+ (R+ 1)* 640+ (NR- 1)* 8 370 GOSUB 1000 380 PLOT 3,127,X,Y,4,88 390 IN= 25:IC= 0:GOTO 290 400 IF IN< > 13THEN 500 410 IF NR= 0THEN 430 415 PLOT 3,127,X,Y,0,32 420 FOR I= 0TO NR- 1:DI(I)= D2(I):NEXT I 430 NEXT R 500 FOR I= 0TO 18:IF N$(I)= ""THEN 520 510 IF IN= ASC (N$(I))THEN 530 520 NEXT I:IF IN< > 81THEN 240 525 OUT 8,255:PLOT 6,1:GOTO 3190 530 IF SC(PN,I)> - 1THEN 240 535 S= 0:IF I> 5THEN 550 540 FOR J= 0TO 4:IF DI(J)= I+ 1THEN S= S+ I+ 1 545 NEXT J:GOTO 620 550 FOR J= 0TO 4:FOR K= 0TO J:IF DI(J)> DI(K)THEN 570 560 DU= DI(J):DI(J)= DI(K):DI(K)= DU 570 NEXT K,J 580 ON I- 9GOTO 590,610,630,650,690,710,0,600 590 IF DI(0)< DI(2)AND DI(1)< DI(3)AND DI(2)< DI(4)THEN 620 600 FOR J= 0TO 4:S= S+ DI(J):NEXT J:GOTO 620 610 IF DI(0)= DI(3)OR DI(1)= DI(4)THEN 600 620 SC(PN,I)= S:AR= I:GOSUB 6000:GOTO 800 630 IF DI(0)< DI(1)OR DI(3)< DI(4)OR (DI(2)> DI(1)AND DI(2)< DI(3))THEN 620 640 S= 25:GOTO 620 650 K= 0:FOR J= 0TO 3 660 IF DI(J+ 1)= DI(J)+ 1THEN K= K+ 1 670 NEXT J:IF K< 3THEN 620 680 IF DI(0)+ 3< DI(3)AND DI(1)+ 3< DI(4)THEN 620 685 S= 30:GOTO 620 690 FOR J= 1TO 4:IF DI(J)- DI(J- 1)< > 1THEN 620 700 NEXT J:S= 40:GOTO 620 710 IF DI(0)= DI(4)THEN S= 50:GOTO 620 720 GOTO 620 800 GOSUB 3000:PLOT 8 810 FOR J= 1TO 15 820 PRINT " " 830 NEXT J 840 GOTO 120 1000 REM SBR DICE(D(4)) 1010 PLOT 8 1030 FOR I= 0TO 2 1040 FOR J= 0TO N 1050 FOR K= 0TO 3 1055 IF D(J)= 0THEN 1091 1060 AD= S+ I* 128+ J* 8+ K* 2 1070 POKE AD+ 1,184 1071 IF I< 2THEN 1080 1073 IF K< 3THEN POKE AD,238:GOTO 1090 1075 POKE AD,254:GOTO 1090 1080 POKE AD,C(D(J)- 1,I,K) 1090 NEXT K 1091 NEXT J 1092 NEXT I 1100 RETURN 1900 DIM N$(20) 1910 FOR I= 0TO 20:READ N$(I):NEXT I:RETURN 1920 DATA 1,2,3,4,5,6,"","","" 1925 DATA "" 1930 DATA T,F,H,S,L,Y,"",C,"","" 1935 DATA "" 2000 FOR Y= 0TO 20 2010 READ A$ 2020 PLOT 3,22,Y+ 2 2025 PRINT A$ 2026 PLOT 3,38,Y+ 2 2027 IF N$(Y)< > ""THEN PRINT "(";N$(Y);")" 2030 NEXT Y 2032 FOR I= 0TO NP:PLOT 3,40+ ZS* I,0 2033 PLOT 6,2* I+ 1 2034 PRINT RIGHT$ (" "+ LEFT$ (P$(I),ZS- 1),ZS) 2036 NEXT I 2040 RETURN 2100 DATA ACES,DEUCES,THREES,FOURS,FIVES,SIXES 2200 DATA TOTAL,BONUS,"TOP TOTAL","" 2300 DATA "3 OF A KIND","4 OF A KIND","FULL HOUSE" 2400 DATA "SMALL STRAIGHT","LARGE STRAIGHT",YAHTZEE 2500 DATA "BONUS YAHTZEE",CHANCE,"BOTTOM TOTAL" 2600 DATA "TOP TOTAL","GRAND TOTAL" 3000 GOSUB 4000:IF I> 5THEN 3110 3010 SC(PN,6)= 0:FOR I= 0TO 5:IF SC(PN,I)= - 1THEN 3030 3020 SC(PN,6)= SC(PN,6)+ SC(PN,I) 3030 NEXT I 3050 AR= 6:GOSUB 6000 3060 IF SC(PN,6)< 63THEN 3080 3070 SC(PN,7)= 35:AR= 7:GOSUB 6000 3075 SC(PN,8)= SC(PN,6)+ 35:GOTO 3090 3080 SC(PN,8)= SC(PN,6) 3090 AR= 8:GOSUB 6000 3095 SC(PN,19)= SC(PN,8):AR= 19:GOSUB 6000 3110 SC(PN,18)= 0:FOR I= 10TO 17:IF SC(PN,I)= - 1THEN 3130 3120 SC(PN,18)= SC(PN,18)+ SC(PN,I) 3130 NEXT I 3140 AR= 18:GOSUB 6000 3150 SC(PN,20)= SC(PN,8)+ SC(PN,18) 3160 IF SC(PN,8)= - 1OR SC(PN,18)= - 1THEN SC(PN,20)= SC(PN,20)+ 1 3170 AR= 20:GOSUB 6000 3175 PN= PN+ 1:IF PN> NPTHEN PN= 0 3180 TU= TU+ 1:IF TU< 13* (NP+ 1)THEN RETURN 3190 OUT 8,255:PLOT 3,0,25:INPUT "PLAY AGAIN? ";Z$ 3200 IF LEFT$ (Z$,1)= "Y"THEN RUN 3210 PLOT 1 4000 IF I= 15THEN RETURN 4005 IF SC(PN,15)< > 50THEN RETURN 4010 FOR J= 1TO 4:IF DI(J)< > DI(0)THEN RETURN 4020 NEXT J 4030 IF SC(PN,16)< 0THEN SC(PN,16)= 0 4040 SC(PN,16)= SC(PN,16)+ 100 4050 AR= 16:GOSUB 6000 4060 RETURN 5000 FOR I= 0TO 4 5010 DI(I)= INT (DI(I)) 5020 NEXT I 5030 NR= 0 5031 X= 1 5032 FOR I= 5* R+ 4TO 5* R+ 8 5033 PLOT 3,0,I 5034 PRINT " " 5036 NEXT I 5040 GOTO 240 6000 PLOT 6,PN* 2+ 1 6001 IF NP= 0THEN PLOT 3,48,AR+ 2:GOTO 6005 6002 PLOT 3,37+ ZS* (PN+ 1),AR+ 2 6005 PRINT RIGHT$ (" "+ STR$ (SC(PN,AR)),3) 6010 RETURN 10000 PRINT " THIS PROGRAM LETS YOU PLAY YAHTZEE. IF YOU DON'T KNOW THE" 10010 PRINT "RULES, YOU'LL HAVE TO LEARN THEM SOMEWHERE ELSE." 10020 PRINT " ON YOUR TURN, THE COMPUTER WILL MAKE YOUR FIRST ROLL FOR" 10030 PRINT "YOU. TO SELECT A DIE TO KEEP, POSITION THE 'X' UNDER IT USING" 10040 PRINT "THE LEFT AND RIGHT ARROW KEYS, AND KEEP IT USING THE DOWN ARROW" 10050 PRINT "KEY. IF YOU MAKE A MISTAKE, PRESS THE UP ARROW KEY AND START" 10060 PRINT "OVER. AFTER YOUR FIRST, SECOND, OR THIRD ROLL, ENTER YOUR" 10070 PRINT "SCORE IN ANY AVAILABLE LOCATION ON YOUR SCORECARD BY PRESSING" 10080 PRINT "THE ONE KEY ABBREVIATION FOR THAT LOCATION (EXAMPLE-- 'F' FOR" 10090 PRINT "FOUR OF A KIND). 10100 PRINT :RETURN 50110 DATA 245,229,197,1,206,40,205,36,0,202,-1,-1,11 50120 DATA 121,176,194,-1,-1,29,194,-1,-1,17,255,255,195 50130 DATA -1,-1,95,175,87,175,50,255,129,193,225,241,201 50150 TM= 256* PEEK (32941)+ PEEK (32940) 50180 IF TM> 65503THEN 50250 50190 RESTORE 50110 50200 FOR I= 1TO 39:READ A 50210 IF A> = 0AND A< > PEEK (TM+ I)THEN I= 39:A= 999 50220 NEXT I 50230 IF A< 256THEN 50390 50250 TM= TM- 39:RESTORE 50110 50270 FOR I= 1TO 39:READ A:POKE TM+ I,A- (A< 0):NEXT I 50290 Z= TM+ 29:AD= TM+ 11:GOSUB 50350 50300 Z= TM+ 7:AD= TM+ 17:GOSUB 50350 50310 Z= TM+ 4:AD= TM+ 21:GOSUB 50350 50320 Z= TM+ 32:AD= TM+ 27:GOSUB 50350 50330 GOTO 50370 50350 ZZ= INT (Z/ 256):POKE AD,Z- 256* ZZ:POKE AD+ 1,ZZ:RETURN 50370 Z= TM:AD= 32940:GOSUB 50350 50390 Z= TM+ 1:AD= 33283:GOSUB 50350 50400 POKE 33282,195 50410 CLEAR 75:GOTO 5