Compucolor.org – Virtual Media

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