1000 ! ** YATZY802 1010 ! ** 1020 ! ** Vers: 4.00 1030 ! ** Date: 1984-01-13 1050 ! ** 1060 ! ** Written by Lars B. Cid. 1070 ! ** 1080 ! 1090 ! 1095 INTEGER : EXTEND 1096 IF INSTR(1,TIME$,'I') ; : ; 'Time not set!' CHR$(7.) : CHAIN 'start' 1100 DIM Locy(15),Locx(15),Bord(15),Scr$=0 1101 DIM P9(50),P9$(50)=3,P9dat$(50)=15 1110 POKE VAROOT(Scr$),0,8,30720,SWAP%(30720),0,8 1120 ON ERROR GOTO 1180 : OPEN 'YATZY802.DAT' AS FILE 1 1130 FOR I=1 TO 50 1140 INPUT #1P9(I) : INPUT #1P9$(I) : INPUT #1P9dat$(I) 1150 NEXT I 1160 Lista=1 1170 GOTO 1230 1180 PREPARE 'YATZY802.DAT' AS FILE 1 1190 FOR I=1 TO 50 1200 ; #1,0 : ; #1 'ABC' : ; #1 '00-00-00 00.00' 1210 NEXT I 1220 GOTO 1120 1230 CLOSE 1240 FOR I=1 TO 6 : Locy(I)=I+4 : Locx(I)=13 1250 NEXT I 1260 FOR I=7 TO 15 : Locy(I)=I-2 : Locx(I)=35 1270 NEXT I 1280 RANDOMIZE 1285 ON ERROR GOTO 1290 RESTORE 2020 : FOR I=1 TO 6 : FOR J=1 TO 7 : READ A(I,J) : NEXT J : NEXT I 1300 RESTORE 1310 FOR I=7 TO 0 STEP -1 : B(I)=2^I : NEXT I 1320 ; CHR$(12); 1330 WIDTH 40 1340 Z=FNGraf(6,12) 1350 ; CUR(6,9) FLSH STRING$(19,127) 1360 ; CUR(12,9) FLSH STRING$(19,127) 1370 FOR I=7 TO 11 : ; CUR(I,9) FLSH CHR$(127) STDY CUR(I,27) FLSH CHR$(127) : NEXT I 1380 ; CUR(8,14) "THE GAME OF" 1390 ; CUR(10,15) "Y A T Z Y" 1395 ; CUR(15,15) '? - Hj{lp' 1400 Z=FNSound1 1410 FOR P.=1. TO 4000. : NEXT P. 1420 ; CHR$(12) 1430 FOR I=0 TO 3 : ; CUR(I,0) CHR$(151); 1440 NEXT I 1450 FOR I=1 TO 22 1460 READ A$ 1470 IF I>10 THEN ; CUR(I-11+5,22); ELSE ; CUR(I-1+5,0); 1480 IF I>6 AND I<11 OR I>19 ; " "; ELSE IF I>10 ; USING "##";I-4; : ; " "; ELSE ; USING "##";I; : ; " "; 1490 ; A$;STRING$(10-LEN(A$),46); : IF A$<>STRING$(10,45) ; USING "###";0 1500 NEXT I 1510 ! 1520 ; CUR(3,0) " 1 2 3 4 5" 1530 Z=FNLista(0) 1540 ; CUR(2,20) CHR$(135) " = "; 1550 ; CUR(4,0) STRING$(40,61); 1560 ; CUR(17,0) STRING$(40,61); 1570 ! 1580 FOR I=1 TO 15 : IF Bord(I) NEXT I : GOTO 2770 ! Spelet slut. 1590 FOR Pass=1 TO 3 1595 ; CUR(2,27) CHR$(135) 'Kast nr:' Pass 1600 FOR T{rning=0 TO 4 : IF Sp(T{rning+1) Sp(T{rning+1)=0 : GOTO 1620 1610 R=INT(RND*6)+1 : Z=FNSet : Z=FNLjud 1620 FOR P=1 TO 200 : NEXT P : NEXT T{rning 1630 IF Pass=3 GOTO 1790 1640 ; CUR(18,0) SPACE$(35) CHR$(13) 'Spara vilka: '; 1650 B$=FNIn$(5,0) 1655 IF Quit THEN 2850 1660 ON ERROR GOTO 1630 1670 FOR I=1 TO 5 1680 Sp(I)=0 1690 ; CUR(3,4*I-1) NUM$(I) 1700 NEXT I 1710 ! 1720 FOR I=1 TO LEN(B$) : Sp=VAL(MID$(B$,I,1)) 1730 IF Sp>5 THEN Sp=0 : GOTO 1760 1740 Sp(Sp)=-1 1750 ; CUR(3,4*Sp-1); : PUT CHR$(ASCII(NUM$(Sp))+128) 1760 NEXT I 1770 ! 1780 NEXT Pass 1790 FOR I=1 TO 9 : Bc(I)=0 : NEXT I 1800 FOR I=1 TO 5 : Bc(Res(I))=Bc(Res(I))+1 : NEXT I 1810 Sum=0 : FOR I=1 TO 5 : Sum=Sum+Res(I) : NEXT I 1820 ; CUR(2,24); : ; USING '##' Sum; : Z=FNDetekt 1830 ; CUR(18,0) SPACE$(35);CHR$(13);'Var vill du s{tta: '; 1840 St=0 1850 ON ERROR GOTO 1830 1860 Z$=FNIn$(3,0) 1866 IF Quit THEN 2850 1870 IF INSTR(1,B$,'-') St=-1 : B$=LEFT$(B$,INSTR(1,B$,'-')-1) 1880 A=VAL(B$) 1890 IF A<1 OR A>15 1830 1900 IF Bord(A) 1830 1910 IF St Bord(A)=-1 : GOTO 1930 1920 IF FNCheck(A) Z=FNLjud : GOTO 1830 1930 Sum=0 : Jn$='' : Lstr=0 : Sstr=0 1931 FOR I=1 TO 15 : ; CUR(Locy(I),Locx(I)); 1940 IF Bord(I)<0 ; "---"; ELSE ; USING "###";Bord(I) : Sum=Sum+Bord(I) 1950 IF I=6 ; CUR(12,13); : ; USING "###";Sum; : IF Sum>62 Sum=Sum+50 : ; CUR(13,13); : ; USING "###";50 ELSE ; CUR(13,13); : ; USING "###";0 1960 NEXT I 1970 ; CUR(15,35); : ; USING "###";Sum 1971 FOR I=1 TO 50 1972 IF Sum51 ; CUR(16,0) 'Plats: '; : ; USING '##' I ELSE ; CUR(16,0) SPACE$(9) 1980 GOTO 1520 1990 DATA Ettor,Tv}or,Treor,Fyror,Femor,Sexor,----------,Summa,Bonus,---------- 2000 DATA Ett par,Tv} par,Tretal,Fyrtal,L.Straight,S.Straight,K}k,Chans,YATZY,----------,Summa,---------- 2010 ! 2020 DATA 31,31,31,27,31,31,31,31,29,31,31,31,23,31,31,29,31,27,31,23,31 2030 DATA 31,21,31,31,31,21,31,31,21,31,27,31,21,31 2040 DATA 31,21,31,21,31,21,31 2050 ! 2060 DEF FNSet 2070 Res(T{rning+1)=R 2072 FOR I=1 TO 7 2073 FOR J=4 TO 0 STEP -1 2074 SET DOT I,T{rning*8+3+J 2075 NEXT J 2076 NEXT I 2080 FOR I=1 TO 7 2090 FOR J=4 TO 0 STEP -1 2100 IF (A(R,I) AND B(J))=0 THEN CLR DOT I,T{rning*8+3+J ELSE SET DOT I,T{rning*8+3+J 2110 NEXT J 2120 NEXT I 2130 RETURN 0 2140 FNEND 2150 ! 2160 DEF FNLjud 2170 FOR Freq=1 TO 9 : Z=INP(5) : NEXT Freq : RETURN 0 2180 FNEND 2190 ! 2200 DEF FNDetekt 2210 Par=0 : Par2=0 : Hus=0 : Triss=0 2220 Fyrtal=0 : Yatzy=0 : K}k=0 2230 FOR I=1 TO 6 2240 IF Bc(I)>1 Par=I*2 2250 IF Bc(I)>2 Triss=I*3 2260 IF Bc(I)>3 Fyrtal=I*4 2270 IF Bc(I)=5 Yatzy=50 2280 NEXT I 2290 FOR I=1 TO Par/2-1 2300 IF Bc(I)>1 Par2=Par+I*2 2310 NEXT I 2320 FOR I=1 TO 5 : IF Bc(I)=1 NEXT I : Lstr=15 2330 FOR I=2 TO 6 : IF Bc(I)=1 NEXT I : Sstr=20 2340 P=0 : FOR I=1 TO 6 2350 IF Bc(I) P=P+1 2360 NEXT I 2370 IF P<>2 2390 2380 FOR I=1 TO 6 : K}k=K}k+Bc(I)*I : NEXT I 2390 RETURN 0 2400 FNEND 2410 ! 2420 DEF FNIn$(L,M) 2430 B$="" 2440 ; STRING$(L,95) STRING$(L,8); 2450 GET A$ 2460 IF ASCII(A$)=192 Quit=-1 2470 IF A$=CHR$(196) Z=FNLista(-1) 2480 IF A$=CHR$(198) Z=FNLista(1) 2490 IF A$=CHR$(13) ; STRING$(LEN(B$),8);SPACE$(L);STRING$(L,8);B$; : RETURN B$ 2500 IF A$=CHR$(8) IF LEN(B$) B$=LEFT$(B$,LEN(B$)-1) : ; CHR$(8,95,8); 2510 IF A$=CHR$(24) ; STRING$(LEN(B$),8); : GOTO 2430 2520 IF A$='?' Z=FNHelp : A$='' 2530 IF A$>" " AND A$<="" AND LEN(B$)P9(50) P9(50)=Sum ELSE 2820 2775 ; CUR(20,0) SPACE$(80) 2780 ; CUR(18,0) 'Du har kommit in p} listan,' 2790 ; 'skriv in dina initialer: '; : P9$(50)=FNIn$(3,0) 2795 P9$(50)=P9$(50)+SPACE$(3-LEN(P9$(50))) 2800 P9dat$(50)=MID$(TIME$,3,14) 2810 Z=FNBubble 2820 ; CUR(18,0) SPACE$(80); 2830 ; CUR(18,0) 'Vill du spela igen (J/N)? '; 2840 Jn$=CHR$(ASCII(LEFT$(FNIn$(2,0)+' ',1)) AND 223) 2850 ; CUR(18,0) SPACE$(80); 2860 IF Jn$<>"J" THEN 2880 2870 FOR I=1 TO 15 : Bord(I)=0 : NEXT I : GOTO 1930 2880 OPEN 'YATZY802.DAT' AS FILE 1 2890 FOR I=1 TO 50 2900 ; #1,P9(I) : ; #1 P9$(I) : ; #1 P9dat$(I) 2910 NEXT I : CLOSE 2920 ; CHR$(12) 2921 END 2930 ! 2940 DEF FNGraf(I1,J1) 2950 FOR I=I1 TO J1 : ; CUR(I,0) CHR$(151); : NEXT I 2960 RETURN 0 2970 FNEND 2980 DEF FNSound1 2990 ON ERROR GOTO 3050 3000 RESTORE 3070 3010 READ A. 3020 FOR I.=1. TO A. : NEXT I. 3030 Z=FNSound(10) 3040 GOTO 3010 3050 RESTORE : RETURN 0 3060 ! 3070 DATA 300,300,300 3080 DATA 250,250,250,200,200,200,150,150,150 3090 DATA 100,100,100,50,50,50,25,25,25 3100 DATA 10,10,10 3110 FNEND 3120 DEF FNSound(L{ngd) 3130 FOR Ii=1 TO L{ngd 3140 Z=INP(5) 3150 NEXT Ii 3160 RETURN 0 3170 FNEND 3180 ! 3190 DEF FNLista(Updw) LOCAL Adr 3200 ! 3210 Adr=PEEK2(65362) ! Cursor 3220 IF Lista>48 AND Updw=1 THEN Tmp=FNSound(20) : GOTO 3340 3230 IF Lista<2 AND Updw=-1 THEN Tmp=FNSound(20) : GOTO 3340 3240 ! 3250 Lista=Lista+Updw 3260 ! 3270 FOR Ls=0 TO 1 3275 P9$(Lista+Ls)=P9$(Lista+Ls)+SPACE$(3-LEN(P9$(Lista+Ls))) 3280 ; CUR(20+Ls,0); 3290 ; USING '##' Lista+Ls; 3300 ; ' '+P9$(Lista+Ls) ' ' P9dat$(Lista+Ls); 3310 ; ' '; : ; USING '### Po{ng.' P9(Lista+Ls); 3320 NEXT Ls 3330 ! 3340 POKE 65362,Adr,SWAP%(Adr) 3350 RETURN 0 3360 FNEND 3370 ! 3380 DEF FNBubble 3390 ! 3400 FOR I=1 TO 50 3410 ! 3420 FOR J=50 TO I STEP -1 3430 ! 3440 IF P9(J)