170 CALL CLEAR
180 OPTION BASE 1
190 W=104 :: GOSUB 1190 :: RANDOMIZE :: DIM S(6,3,16),GT(6),Q$(6),D(5),DV(6),Y5(6) :: FOR I=1 TO 6 :: READ X,M$
200 CALL CHAR(X,M$) :: NEXT I
210 FOR I=9 TO 13 :: READ A,B :: CALL COLOR(I,A,B) :: NEXT I :: GOSUB 1200 :: GOSUB 1200
220 CALL SOUND(400,131,6,165,6,330,3)
230 CALL SOUND(400,196,6,262,6,330,4) :: CALL SOUND(400,147,5,370,4)
240 CALL SOUND(200,220,6,294,6,370,4) :: CALL SOUND(200,330,4)
250 CALL SOUND(400,196,6,370,4) :: CALL SOUND(1600,247,4,294,4,392,4) :: GOSUB 1200
260 ACCEPT AT(12,26)VALIDATE("123456")SIZE(-1):Q5
270 FOR Y=16 TO 22 :: GOSUB 1210 :: NEXT Y :: ACCEPT AT(22,27)VALIDATE("123")SIZE(-1)BEEP :Z :: GOSUB 1180
280 DISPLAY AT(1,6):"*  YATZEE  *"
290 FOR A=1 TO Q5 :: DISPLAY AT(3*A+2,1):"PLAYER";A;"NOME: "
300 ACCEPT AT(3*A+2,16)SIZE(-12)BEEP :Q$(A) :: NEXT A
310 REM  ********************
320 REM  ** YATZEE ** GAME **
330 REM  ********************
340 ON ERROR 380 :: FOR A=1 TO Q5 :: Y5(A)=0 :: FOR G=1 TO Z :: FOR H=1 TO 16 :: S(A,G,H)=H<14
350 NEXT H :: NEXT G :: NEXT A :: CALL CLEAR
360 CALL SOUND(1000,1200,1)
370 FOR I=1 TO 1750 :: NEXT I :: GOTO 390
380 RETURN 390
390 RESTORE 1490 :: FOR Y=1 TO 20 :: GOSUB 1210 :: NEXT Y :: R=1 :: CALL HCHAR(19,3,42,29)
400 FOR A=1 TO Q5 :: GOSUB 650 :: CALL HCHAR(3,15,99) :: CALL HCHAR(20,17,32,15) :: M$=Q$(A)
410 IF Q5>1 THEN GOSUB 1230
420 R1,G=0 :: H=1 :: FOR I=1 TO 4 :: CALL HCHAR(20,17,32,15) :: DISPLAY AT(20,17+INT(12-LEN(M$))/2)BEEP :M$
430 FOR B=1 TO 80 :: NEXT B :: NEXT I
440 R1=R1+1 :: DISPLAY AT(20,15)SIZE(1):STR$(R1) :: FOR B=1 TO 4 :: IF DV(B)THEN 460 ELSE D(B)=INT(6*RND)+1
450 FOR I=-2 TO 0 :: CALL VCHAR(21,6*B+I,105,3) :: NEXT I
460 NEXT B :: FOR B=1 TO 4 :: CALL SOUND(70,1400-B*180,2) :: ON D(B)GOSUB 500,530,490,520,480,510 :: NEXT B
470 IF L1=1 THEN 630 ELSE 540
480 CALL HCHAR(23,6*B,W) :: CALL HCHAR(21,6*B-2,W)
490 CALL HCHAR(23,6*B-2,W) :: CALL HCHAR(21,6*B,W)
500 CALL HCHAR(22,6*B-1,W) :: RETURN
510 CALL HCHAR(22,6*B-2,W) :: CALL HCHAR(22,6*B,W)
520 CALL HCHAR(21,6*B-2,W) :: CALL HCHAR(23,6*B,W)
530 CALL HCHAR(23,6*B-2,W) :: CALL HCHAR(21,6*B,W) :: RETURN
540 CALL KEY(0,V,T) :: IF T=0 THEN 540
550 IF(V=68)+(V=69)+(V=83)+(V=88)THEN E1=(V<70)*2+1 :: GOTO 680 ELSE IF V=32 AND R1<3 THEN 440
560 IF V=13 AND G THEN 720
570 IF V<>82 THEN 610 :: CALL KEY(0,V3,T) :: IF(T=0)+(V3<49)+(V3>54)THEN 560 ELSE V=V3-48
580 FOR B=1 TO 4
590 IF D(B)=V AND DV(B)THEN DV(B)=0 :: CALL HCHAR(24,6*B-2,32,3) :: CALL SOUND(99,330+90*B,2) :: GOTO 540
600 NEXT B
610 IF V=65 THEN SU=120 :: E=1 :: GOSUB 660 :: GOTO 540
620 IF(V<48)+(V>54)THEN 540 ELSE V2=V-48 :: IF V2=0 THEN GOSUB 660 ELSE L1=L1+1
630 FOR B=1 TO 4 :: IF D(B)=V2 AND DV(B)=0 THEN DV(B)=1 :: CALL SOUND(99,990,2) :: CALL HCHAR(24,6*B-2,120,3)
640 NEXT B :: GOTO 540
650 FOR X=30 TO 15 STEP-5 :: CALL VCHAR(2,X+1,119,17) :: CALL VCHAR(2,X,119,17) :: NEXT X
660 FOR B=1 TO 4 :: DV(B)=E :: CALL SOUND(99,330+99*B,2) :: CALL HCHAR(24,6*B-2,SU,3)
670 NEXT B :: E,L1=0 :: SU=32 :: RETURN
680 CALL HCHAR(H+2,5*G+15,119)
690 IF(V=83)+(V=68)THEN 710 ELSE CALL HCHAR(H+2,15,119) :: H=H+E1 :: IF(H=0)+(H=14)THEN H=ABS(H-13)
700 CALL HCHAR(H+2,15,128) :: CALL HCHAR(H+2,15+5*G,99) :: CALL SOUND(90,220+90*H+150*G,2) :: GOTO 540
710 G=G-E1 :: IF G<Z+1 AND G>-1 THEN 700 ELSE G=ABS(G-Z)-1 :: GOTO 700
720 GT(A),T,E1,PT=0 :: IF YT=0 THEN 730 ELSE CALL HCHAR(24,3,32,28) :: ON YT GOTO 920,950
730 FOR B=1 TO 6 :: DV(B)=0 :: NEXT B :: FOR B=1 TO 4 :: DV(D(B))=DV(D(B))+1 :: NEXT B :: H1=H
740 FOR B=1 TO 6 :: IF DV(B)=4 THEN E1=50 :: H=8 :: GOTO 780
750 NEXT B :: IF S(A,G,H)>-1 THEN 540 :: IF H<7 THEN 1010 :: ON H-6 GOTO 960,960,760,990,990,1030,980
760 FOR B=1 TO 6 :: IF DV(B)=2 OR DV(B)=3 THEN E1=E1+DV(B) :: IF E1=4 THEN 1080
770 NEXT B :: GOTO 1030
780 GOSUB 650 :: CALL HCHAR(10,15+5*G,99) :: CALL HCHAR(10,15,128) :: RESTORE 1550 :: C1$=RPT$(" ",28)
790 FOR B=1 TO 21 :: CALL SOUND(-90,200+40*B,3,990,4,-4,0) :: IF B<8 THEN READ C$ ELSE C$=" "
800 C1$=C$&C1$ :: C1$=SEG$(C1$,1,28) :: DISPLAY AT(24,1):C1$
810 CALL COLOR(10,2,7+(INT(B/3)=B/3)-10*(B=21))
820 NEXT B :: FOR B=Z TO 1 STEP-1 :: IF S(A,B,8)=-1 THEN T=B :: GOTO 870
830 NEXT B :: FOR B=Z TO 1 STEP-1 :: IF S(A,B,E1/10)=-1 THEN T=B :: H=D(1) :: GOTO 850
840 NEXT B :: GOTO 890
850 IF S(A,G,H)>-1 THEN G=T :: GOSUB 650 :: CALL HCHAR(H+2,15+5*G,99) :: CALL HCHAR(H+2,15,128)
860 IF Y5(A)<>Z THEN 980 ELSE S(A,G,16)=S(A,G,16)+100*G :: GOTO 980
870 IF S(A,G,H)>-1 THEN G=T :: GOSUB 650 :: CALL HCHAR(10,15+5*G,99) :: CALL HCHAR(10,15,128)
880 Y5(A)=Y5(A)+1 :: PT=50 :: IF Y5(A)=1 THEN 1090 ELSE S(A,G,16)=S(A,G,16)+100*G :: GOTO 1090
890 FOR B=1 TO Z :: FOR F=7 TO 13 :: IF S(A,B,F)=-1 THEN T=F :: GOTO 910
900 NEXT F :: NEXT B :: GOTO 940
910 DISPLAY AT(24,2)BEEP :"JOLLY! DOVE? (PARTE BASSA)" :: YT=1 :: GOTO 540
920 IF H<7 OR S(A,G,H)>-1 THEN 910 :: IF Y5(A)=Z THEN S(A,G,16)=S(A,G,16)+100*G
930 ON H-6 GOTO 980,980,1080,1070,1060,1030,980
940 DISPLAY AT(24,2)BEEP :"MUST SCORE 0 (PARTE ALTA)" :: YT=2 :: GOTO 540
950 IF S(A,G,H)>-1 THEN 940 ELSE 1090
960 FOR B=1 TO 6 :: IF DV(B)>H-5 THEN 980
970 NEXT B :: GOTO 1030
980 PT=D(1)+D(2)+D(3)+D(4)+D(5) :: GOTO 1090
990 FOR B=1 TO 6 :: IF DV(B)=0 THEN T=0 ELSE T=T+1 :: IF T=H-7 THEN ON T-2 GOTO 1070,1060
1000 NEXT B :: GOTO 1030
1010 PT=DV(H)*H :: IF PT THEN 1090
1020 IF S(A,G,H)>-1 THEN 540
1030 IF H<>12 THEN DISPLAY AT(24,1)BEEP :"DEVO METTERE ZERO PP.?(S/N)" ELSE 1090
1040 ACCEPT AT(24,28)SIZE(-1):M$ :: CALL HCHAR(24,3,32,28) :: IF M$="S" THEN 1090
1050 FOR T=1 TO 70 :: NEXT T :: GOTO 540
1060 PT=10
1070 PT=PT+5
1080 PT=PT+25
1090 S(A,G,H)=PT :: YT,PT,E1=0 :: IF H>6 THEN 1130
1100 FOR B=1 TO 6 :: IF S(A,G,B)=-1 THEN E1=1 ELSE PT=PT+S(A,G,B)
1110 NEXT B :: S(A,G,15)=PT
1120 IF E1=1 THEN 1150 ELSE S(A,G,15)=PT*G :: IF PT<52 THEN 1150 ELSE S(A,G,16)=S(A,G,16)+35*G :: GOTO 1150
1130 FOR B=7 TO 13 :: IF S(A,G,B)>-1 THEN PT=PT+S(A,G,B)
1140 NEXT B :: S(A,G,14)=PT*G
1150 GOSUB 1250 :: FOR G=1 TO Z
1160 FOR H=14 TO 16 :: GT(A)=GT(A)+S(A,G,H) :: NEXT H :: NEXT G :: DISPLAY AT(A+2,1)SIZE(4):USING "####":GT(A)
1170 NEXT A :: IF R=13*Z THEN 1280 ELSE R=R+1 :: DISPLAY AT(20,7)SIZE(2):USING "##":R :: GOTO 400
1180 FOR V=1 TO 300 :: NEXT V
1190 CALL CLEAR :: CALL SCREEN(8) :: FOR V=1 TO 200 :: NEXT V :: RETURN
1200 READ Y
1210 READ X,M$
1220 DISPLAY AT(Y,X):M$ :: RETURN
1230 FOR X=1 TO Z :: FOR Y=12 TO 14
1240 CALL VCHAR(3,5*X+Y,32,16) :: NEXT Y :: NEXT X :: FOR G=1 TO Z :: GOSUB 1250 :: NEXT G :: RETURN
1250 FOR H=1 TO 16
1260 IF S(A,G,H)>(H<14)THEN CALL SOUND(25,1470,4) :: DISPLAY AT(H+2,10+5*G)SIZE(3):USING "###":S(A,G,H)
1270 NEXT H :: RETURN
1280 RESTORE 1540 :: GOSUB 1180 :: FOR B=1 TO 3 :: GOSUB 1200 :: NEXT B
1290 FOR Y=8 TO 6+2*Q5 STEP 2
1300 DISPLAY AT(Y,4):Q$(Y/2-3);TAB(22);GT(Y/2-3) :: NEXT Y
1310 FOR I=1 TO 500 :: NEXT I
1320 GOSUB 1200 :: ACCEPT AT(24,20)SIZE(-1):M$ :: GOSUB 1180 :: IF M$="S" THEN 340 ELSE STOP
1330 DATA 104,0000001818,99,103070FF70301,120,0000FFFFFF,105,00
1340 DATA 128,103070FF70301,119,0,7,11,2,16,1,11,7,1,16,11,3,7
1350 DATA Y A T Z E E,6,9,
1360 DATA 12,3,QUANTI GIOCATORI?(1-6) X,1,"SI POSSONO FARE 1-2 O 3 GAME",1,CONTEMPORANEAMENTE. I PUNTI
1370 DATA 1,SONO MOLTIPLICATI PER IL
1380 DATA 1,"NUMERO DEL GIOCO PER RENDERE",1,MEGLIO LA STRATEGIA.,1,"",1,QUANTE PARTITE? (1-2-3)   X
1490 DATA 1,"*  YATZEE  *  NUMERO PARTITE"
1500 DATA 15,*1*  *2*  *3*,5,*UNO...*,5,*DUE...*,5,*TRE...*,5,QUATTRO*,5,*CINQUE*,5,*SEI...*
1510 DATA 1,***TRIS....*,1,*****POKER.*
1520 DATA 1,**2 COPPIE.*,1,SCALA MIN..*,1,SCALA MASS.*,1,*NO CHANCE.*,1,SOMMATORIA.*,1,TOT. BASSO :
1530 DATA 1,TOTALE ALTO:,1,TOT.  BONUS:,1,"",1,ROUND:1  TIRI:
1540 DATA 2,6,**   YATZEE   **,4,9,PUNTEGGI,6,4,GIOCATORE        PUNTI,24,7,ANCORA?(S/N) S,
1550 DATA ,**,"!",E,N,E," B",**
