10 REM SIXTY SIX v.2.23 20 REM by M.Bobrowski 4'94 30 : 40 PROCinit 50 REPEAT:PROCreset 60 PROCshuffle:PROCdeal 70 PROCgame:PROCscore 80 UNTIL end%:PROCend 90 MODE 131:END 100 : 1000 DEF PROCinit:DIM V%(1),v%(1),t%(1),p%(1),r%(1) 1010 G%=RND(2)-1:end%=FALSE:r%(0)=0:r%(1)=0:num$="A"+CHR$228+"KQJ9" 1020 ENDPROC 1030 : 1040 DEF PROCreset 1050 GCOL0,130:PROCwindow(1):FORI%=2TO5:PROCwindow(I%):CLG:NEXT 1060 FORI%=0TO1:p%(I%)=0:t%(I%)=0:NEXT:R%=RND(-TIME):M%=7:ms%=0 1070 ENDPROC 1080 : 1090 DEF PROCshuffle 1100 FOR I%=1 TO 24:A%?I%=I%:NEXT 1110 FOR I%=1 TO 24:R%=RND(24):J%=A%?R% 1120 A%?R%=A%?I%:A%?I%=J%:NEXT 1130 ENDPROC 1140 : 1150 DEF PROCdeal 1160 FORI%=1TO6:P%?I%=A%?I%:NEXT:?P%=6:H%=P%:PROCsort(6) 1170 FORI%=1TO6:C%?I%=A%?(I%+6):NEXT:?C%=6:H%=C%:PROCsort(6) 1180 tr%=A%?24:T%=FNs(tr%) 1190 po%=13:ENDPROC 1200 : 1210 DEF PROCgame 1220 PROChand:PROCpack 1230 ph%=1:REPEAT:PROCwindow(2):CLG:PROCwindow(5):GCOL0,0:VDU5:IF po%>15 X%=920 ELSE X%=904 1240 MOVE X%,511:PRINT"Pack:";STR$(25-po%):VDU4 1250 PROCwindow(1):FOR ro%=1 TO 2:IF G% H%=C% ELSE H%=P% 1260 IF ro%=1 L%=TRUE ELSE L%=FALSE 1270 PROCgo(G%):V%(G%)=N%:IF M%=0:ro%=2:NEXT:UNTIL TRUE:ENDPROC 1280 PROCtable(N%):PROCdelete 1290 G%=(G%+1)MOD 2:NEXT 1300 PROCevaluate:PROCgetcards 1310 UNTIL po%=25:PROCwindow(5):PROCwindow(3):CLG:GCOL0,3:VDU5:MOVE 992,700:PRINT"Trumps:":GCOL0,1:MOVE 992,620 1320 IF T%=1 PRINT"Hearts" ELSE IF T%=2 PRINT"Spades" ELSE IF T%=3 PRINT"Diamonds"; ELSE PRINT"Clubs" 1330 VDU4:PROCwindow(1) 1340 ph%=2:REPEAT:PROCwindow(2):CLG:FOR ro%=1 TO 2:IF G% H%=C% ELSE H%=P% 1350 IF ro%=1 L%=TRUE ELSE L%=FALSE 1360 PROCgo(G%):V%(G%)=N%:IF M%=0:ro%=2:NEXT:UNTIL TRUE:ENDPROC 1370 PROCtable(N%):PROCdelete:IF G%=0 PROChand 1380 G%=(G%+1)MOD 2:NEXT 1390 PROCevaluate 1400 UNTIL (?C%=0 AND ?P%=0) OR M%=0 1410 ENDPROC 1420 : 1430 DEF PROCgo(G%) 1440 IF G%=1 PROCcompgo:ENDPROC 1450 IF NOT L% AND ?P%=1:N%=P%?1:ps%=FNs(N%):ENDPROC 1460 REPEAT 1470 CLS:IF L% COLOUR1 ELSE COLOUR2 1480 PRINT"Your go":COLOUR2 1490 SOUND1,4,200,10:REPEAT:M%=GET-48:UNTIL M%>=0 AND M%<=?P%:IF ?P%=1 AND M%=1 N%=P%?1:ps%=FNs(N%):UNTIL TRUE:ENDPROC 1500 IF L% AND M%=0 AND p%(0)>=66 UNTIL TRUE:ENDPROC ELSE IF M%=0 SOUND1,3,8,30:COLOUR1:PRINT"Score too low":COLOUR2:PRINT'"Penalty: -10";:PROCwait:p%(0)=p%(0)-10:UNTIL FALSE 1510 N%=P%?M%:pv%=FNn(N%):ps%=FNs(N%) 1520 IF L% AND po%<24 AND pv%=6 AND ps%=T% AND t%(0)>0 PROCchange:UNTIL FALSE 1530 ch%=TRUE:IF ph%=2 AND NOT L% PROCcheck 1540 UNTIL ch% 1550 IF L% AND t%(0)>0 AND pv%=4 PROCmarriage 1560 ENDPROC 1570 : 1580 DEF PROCcompgo 1590 IF L% PROCcompgo1 ELSE PROCcompgo2 1600 IF M%=0 ENDPROC 1610 PROCwait 1620 cs%=FNs(N%) 1630 ENDPROC 1640 : 1650 DEF PROCcompgo1 1660 CLS:COLOUR1:PRINT"My go":COLOUR2 1670 IF p%(1)>=66 M%=0:ENDPROC 1680 IF ?C%=1 N%=C%?1:ENDPROC 1690 IF t%(1)>0 AND po%<24 PROCnine:IF F% PROCchange:GOTO1660 1700 IF t%(1)>0 PROCpair:IF F% ENDPROC 1710 B%=FNse1:IF B% N%=C%?n% ELSE R%=RND(?C%):N%=C%?R% 1720 ENDPROC 1730 : 1740 DEF PROCcompgo2 1750 CLS:COLOUR2:PRINT"My go":IF ?C%=1 N%=C%?1:ENDPROC 1760 IF ph%=1 B%=FNse2 ELSE B%=FNse3 1770 IF B% N%=C%?n% ELSE R%=RND(?C%):N%=C%?R% 1780 ENDPROC 1790 : 1800 DEF PROCevaluate 1810 FOR I%=0 TO 1:n%=FNn(V%(I%)):v%(I%)=W%?n%:NEXT 1820 IF ps%=cs% IF v%(0)>v%(1) G%=0:U%=TRUE:GOTO1870 1830 IF ps%=cs% IF v%(0)cs% IF G%=0 U%=TRUE ELSE U%=FALSE 1870 sum%=v%(0)+v%(1):CLS:COLOUR1:t%(G%)=t%(G%)+1:COLOUR3:IF U% p%(0)=p%(0)+sum%:PRINT"Your"; ELSE p%(1)=p%(1)+sum%:PRINT"My"; 1880 PRINT" trick":PROCwait:ENDPROC 1890 : 1900 DEF PROChand 1910 GCOL0,130:PROCwindow(4):CLG:IF ?P%=0 ENDPROC 1920 FOR I%=1 TO ?P%:X%=I%*192-128:Y%=447:PROCdisplay(P%?I%) 1930 NEXT:ENDPROC 1940 : 1950 DEF PROCdisplay(Z%) 1960 S%=FNs(Z%):K%=FNn(Z%):!&78=&3000+X%DIV2+&280*(1023-Y%)DIV32:CALL &998 1970 GCOL0,S%MOD2:VDU5:MOVE X%+8-4*(K%=2),Y%-12:PRINTMID$(num$,K%,1):MOVE X%+8,Y%-44:VDU(223+S%):IF K%=1 PROCace(236+S%*4) ELSE IF K%>2 AND K%<6 PROCface(&B00+(K%-3)*72) ELSE PROCpip 1980 VDU4:ENDPROC 1990 : 2000 DEF PROCpack 2010 X%=896:Y%=767:PROCwindow(3):PROCdisplay(tr%) 2020 !&78=&45D8:CALL&998:GCOL0,0:PLOT69,944,767:PLOT69,944,547 2030 GCOL0,1:VDU5:FOR Y%=747 TO 567 STEP-32:MOVE 964,Y%:PRINTSTRING$(5,CHR$229):NEXT:VDU4 2040 ENDPROC 2050 : 2060 DEF PROCtable(N%) 2070 PROCwindow(2):SOUND0,-10,5,2 2080 Y%=767:IF L% X%=256 ELSE X%=448 2090 PROCdisplay(N%) 2100 ENDPROC 2110 : 2120 DEF PROCdelete 2130 FORI%=1TO ?H%:IF H%?I%=N% Q%=I%:I%=?H% 2140 NEXT:FORI%=Q%TO ?H%-1:H%?I%=H%?(I%+1):NEXT 2150 H%?(?H%)=0:?H%=?H%-1 2160 IF ph%=2 OR H%=C% ENDPROC 2170 GCOL0,2:PROCwindow(4):Y%=447 2180 X%=Q%*192-128:MOVE X%,Y%:MOVEX%+180,Y%:PLOT85,X%,Y%-224:PLOT85,X%+180,Y%-224 2190 ENDPROC 2200 : 2210 DEF PROCgetcards 2220 IF U% PROCget(P%):PROChand:PROCget(C%):ENDPROC 2230 PROCget(C%):PROCget(P%):PROChand 2240 ENDPROC 2250 : 2260 DEF PROCget(H%) 2270 ?H%=?H%+1 2280 H%?(?H%)=A%?po%:po%=po%+1 2290 PROCsort(?H%):ENDPROC 2300 : 2310 DEF PROCsort(D%):IF D%<2 ENDPROC 2320 LOCAL B%:FOR J%=1TOD%-1:Z%=J% 2330 FOR I%=Z%+1 TO D% 2340 IF H%?Z%>H%?I% Z%=I% 2350 NEXT 2360 B%=H%?J%:H%?J%=H%?Z%:H%?Z%=B% 2370 NEXT:ENDPROC 2380 : 2390 DEF PROCcheck 2400 IF ps%=cs% ENDPROC 2410 F%=FALSE:FOR I%=1 TO ?P%:Q%=I%?P%:s%=FNs(Q%) 2420 IF s%=cs% F%=TRUE:I%=?P% 2430 NEXT:IF F% ch%=FALSE:PROCbad:ENDPROC 2440 IF ps%=T% ENDPROC 2450 FOR I%=1 TO ?P%:Q%=I%?P%:s%=FNs(Q%) 2460 IF s%=T% F%=TRUE:I%=?P% 2470 NEXT:IF F% ch%=FALSE:PROCbad:ENDPROC 2480 ENDPROC 2490 : 2500 DEF PROCchange 2510 IF G%=0 n%=M% 2520 Q%=H%?n%:H%?n%=A%?24:A%?24=Q%:tr%=Q% 2530 PROCpack:PROCsort(?H%):IF G%=0 PROChand 2540 CLS:COLOUR1:PRINT"Exchange":SOUND1,1,120,4:SOUND1,1,100,4:PROCwait 2550 ENDPROC 2560 : 2570 DEF PROCmarriage 2580 IF G%=0 COLOUR3:PRINT'"Pair ? ";:REPEAT:G$=GET$:UNTILINSTR("YyNn",G$):PRINTG$:COLOUR1:IF INSTR("Nn",G$) ENDPROC 2590 IF G%=0 AND M%>1 AND P%?(M%-1)=N%-1 ms%=ps% ELSE IF G%=0 SOUND1,2,76,8:COLOUR2:PRINT'"Don't cheat":PROCwait:ENDPROC 2600 IF G%=1 CLS:COLOUR1:PRINT"Pair" 2610 IF ms%=T% bo%=40 ELSE bo%=20 2620 p%(G%)=p%(G%)+bo%:PRINT'"Bonus: ";bo%;:SOUND1,1,120,4:SOUND1,1,100,4:PROCwait 2630 ENDPROC 2640 : 2650 DEF PROCnine 2660 F%=FALSE:FOR I%=1 TO ?C%:Q%=C%?I%:IF T%=FNs(Q%) AND FNn(Q%)=6 F%=TRUE:n%=I%:I%=?C% 2670 NEXT:ENDPROC 2680 : 2690 DEF PROCpair 2700 F%=FALSE:a%=FNn(H%?1):b%=FNs(H%?1) 2710 FOR I%=2 TO ?H%:c%=FNn(H%?I%):d%=FNs(H%?I%) 2720 IF c%=4 AND a%=3 AND d%=b% F%=TRUE:n%=I%:ms%=d% 2730 a%=c%:b%=d%:NEXT 2740 IF NOT F% ENDPROC 2750 N%=C%?n% 2760 PROCmarriage 2770 ENDPROC 2780 : 2790 DEF FNs(K%)=(K%-1)DIV6+1 2800 DEF FNn(K%)=(K%-1)MOD6+1 2810 : 2820 DEF FNse1 2830 F%=FALSE:FOR I%=1 TO ?C%:PROCval 2840 IF v%>4 AND NOT(s%=T%) F%=TRUE:n%=I% 2850 NEXT:IF F% THEN=n% 2860 FOR I%=1 TO ?C%:PROCval 2870 IF v%<3 AND NOT(s%=T%) F%=TRUE:n%=I% 2880 NEXT:IF F% THEN=n% 2890 FOR I%=1 TO ?C%:PROCval 2900 IF (v%=5 OR v%<3) AND s%=T% F%=TRUE:n%=I% 2910 NEXT:IF F% THEN=n% ELSE =0 2920 : 2930 DEF FNse2 2940 F%=FALSE:FOR I%=1 TO ?C%:PROCval 2950 IF s%=ps% AND pv%=4 AND v%<4 F%=TRUE:n%=I% 2960 NEXT:IF F% THEN=n% 2970 FOR I%=1 TO ?C%:PROCval 2980 IF s%=ps% AND v%4 F%=TRUE:n%=I% 3050 NEXT:IF F% THEN=n% 3060 =0 3070 : 3080 DEF FNse3 3090 F%=FALSE:FOR I%=1 TO ?C%:PROCval 3100 IF s%=ps% AND v%O%:O%=v%:n%=I% 3140 NEXT:IF O%>0 F%=TRUE:=n% 3150 O%=0:FOR I%=1 TO ?C%:PROCval 3160 IF s%=T% AND v%>O%:O%=v%:n%=I% 3170 NEXT:IF O%>0 F%=TRUE:=n% 3180 O%=0:FOR I%=1 TO ?C%:PROCval 3190 IF v%>O%:O%=v%:n%=I% 3200 NEXT:IF O%>0 F%=TRUE:=n% 3210 =0 3220 : 3230 DEF PROCval 3240 Q%=C%?I%:v%=FNn(Q%):s%=FNs(Q%) 3250 ENDPROC 3260 : 3270 DEF PROCscore 3280 p%=p%(0):c%=p%(1):CLS:COLOUR1:IF M%=0 CLS:COLOUR1:PRINT"Sixty Six"':COLOUR3:w%=G%:PROCadd(G%):GOTO3330 3290 COLOUR3:IF (p%<66 AND c%<66) OR p%=c% PRINT"No one wins":PROCwait:ENDPROC 3300 IF p%>c% AND p%>66 w%=0 3310 IF c%>p% AND c%>66 w%=1 3320 IF p%>c% PROCadd(0) ELSE PROCadd(1) 3330 IF c%<2 PROCadd(0) ELSE IF p%<2 PROCadd(1) 3340 IF c%<33 PROCadd(0) ELSE IF p%<33 PROCadd(1) 3350 IF w% PRINT" I win"; ELSE PRINT" You win"; 3360 G%=(w%+1)MOD2:COLOUR129:VDU28,30,6,38,3:CLS 3370 COLOUR0:PRINT;p%;TAB(0,2);c%; 3380 COLOUR3:PRINTTAB(6,0);r%(0);TAB(6,2);r%(1);:COLOUR128 3390 PROCtune:IF r%(0)>7 OR r%(1)>7 end%=TRUE 3400 ENDPROC 3410 : 3420 DEF PROCadd(Z%) 3430 r%(Z%)=r%(Z%)+1 3440 ENDPROC 3450 : 3460 DEF PROCwindow(Z%) 3470 IF Z%=1:VDU17,128,28,15,30,38,28,12 3480 IF Z%=2:VDU24,8;515;768;791; 3490 IF Z%=3:VDU24,768;515;1268;791; 3500 IF Z%=4:VDU24,8;212;1268;451; 3510 IF Z%=5:VDU24,880;451;1260;511;16 3520 ENDPROC 3530 : 3540 DEF PROCbad:SOUND1,2,76,8:COLOUR1:PRINT'"Illegal" 3550 DEF PROCwait 3560 de%=INKEY200:ENDPROC 3570 : 3580 DEF PROCtune 3590 RESTORE:FORI%=1TO24:READ pi%,du%:SOUND1,1,pi%,du%:NEXT:PROCwait 3600 DATA 100,4,100,4,96,4,88,4,88,4,80,4,100,8,100,4,96,4,108,8,108,4,100,4,116,8,100,4,100,4,96,4,88,4,88,4,80,4,100,8,100,4,96,4,108,8,100,8 3610 ENDPROC 3620 : 3630 DEF PROCend 3640 PROCwindow(1):COLOUR1:PRINT"GAME OVER":COLOUR2:PRINT'" Again ?";:G$=GET$:IF INSTR("Yy",G$) RUN 3650 ENDPROC 3660 : 3670 DEF PROCpip 3680 FOR y%=Y%-20 TO Y%-164 STEP-48:FOR x%=X%+56 TO X%+120 STEP64 3690 MOVE x%,y%:VDU(223+S%):NEXT, 3700 IF K%=6 MOVE X%+88,Y%-92:VDU(223+S%):ENDPROC 3710 MOVE X%+88,Y%-44:VDU(223+S%):MOVE X%+88,Y%-140:VDU(223+S%) 3720 ENDPROC 3730 : 3740 DEF PROCface(A%) 3750 !&70=A%:!&72=X%+44:!&74=Y%-56:CALL&938 3760 ENDPROC 3770 : 3780 DEF PROCace(n%) 3790 MOVE X%+60,Y%-80:VDUn%,n%+1,8,8,10,n%+2,n%+3 3800 ENDPROC