10 REM ************** 20 REM Patience 30 REM By Tim Surtell 40 REM ************** 50 REM NC200 Version 60 REM Downloaded from Tim's NC Users' Site 70 REM http://www.ncus.org.uk 80 CLS 90 demo=FALSE 100 PRINTTAB(32,0)CHR$17"P a t i e n c e"CHR$18TAB(25,2)"Programmed By Timothy Surtell" 110 PRINTTAB(1,4)"Press :-"TAB(2,6)CHR$17"S"CHR$18" to start the game now."TAB(2,8)CHR$17"R"CHR$18" to read the rules of the game."TAB(2,10)CHR$17"P"CHR$18" to find out how to play computer Patience." 120 G$=GET$ 130 IF G$="R" PROCRULES:GOTO80 140 IF G$="P" PROCPLAYING:GOTO80 150 IF G$="S" GOTO180 160 IF G$="D" PROCDEMO:GOTO80 170 GOTO120 180 CLS:PRINTTAB(32,0)CHR$17"P a t i e n c e"CHR$18TAB(1,2)"Please wait...shuffling the cards..."TAB(1,4)"0% 50% 100%" 190 MOVE10,78:DRAW115,78:DRAW115,86:DRAW10,86:DRAW10,78:PLOT69,10,87:PLOT69,62,87:PLOT69,115,87 200 DIMcol%(52),num%(52),COL%(7,20),NUM%(7,20),FACE%(7,20),PCOL%(24),PNUM%(24) 210 FOR I=1 TO 52 220 REPEAT 230 col=RND(4):num=RND(13) 240 T=FALSE 250 FORA=1 TO I 260 IF col%(A)=col AND num%(A)=num T=TRUE:A=I 270 NEXT 280 UNTILT=FALSE 290 col%(I)=col:num%(I)=num 300 MOVEI*2+9,79:PLOT21,I*2+9,85:MOVEI*2+10,80:PLOT21,I*2+10,85 310 NEXT 320 PRINTTAB(1,7)"The cards have been shuffled. Press any key to deal...":G=GET 330 CLS 340 CARD=1 350 FORI=1 TO 7 360 FORA=I TO 7 370 COL%(A,I)=col%(CARD):NUM%(A,I)=num%(CARD) 380 IF A=I FACE%(I,A)=TRUE ELSE FACE%(I,A)=FALSE 390 PROCDRAW(A,I,COL%(I,A),NUM%(I,A),FACE%(I,A)) 400 CARD=CARD+1 410 NEXT 420 NEXT 430 FORI=1 TO 24 440 PCOL%(I)=col%(CARD):PNUM%(I)=num%(CARD) 450 CARD=CARD+1 460 NEXT 470 DEAL=4 480 NIP=24:PP=1:PROCDRAW(98,0,0,0,FALSE):PROCDRAW(99,0,PCOL%(PP),PNUM%(PP),TRUE) 490 PROCDEL:PRINTTAB(0,1)"Next move :-"TAB(0,3)"(D)eal or (M)ove":G$=GET$ 500 IF G$="D" PROCDEL:PRINTTAB(0,3)"DEALING...":DIR=TRUE:FORZ=1 TO DEAL:PROCDEAL:NEXT:GOTO490 510 IF G$="M" PROCMOVE:GOTO530 520 IF G$="E" PROCEND:GOTO530 530 FIN=0 540 FORI=1 TO 7 550 IF NUM%(I,FNL(I))=13 AND NUM%(I,FNF(I))=1 FIN=FIN+1 560 NEXT 570 IF FIN=4 PROCWIN 580 GOTO490 590 DEF PROCDRAW(X,Y,col,num,F) 600 IF X=96 X=10:Y=10:F=FALSE:GOTO670 610 IF X=97 X=10:Y=10:MOVEX,Y:PLOT103,X+42,Y+54:ENDPROC 620 IF X=98 X=10:Y=10:GOTO670 630 IF X=99 X=55:Y=10:GOTO670 640 X=X*45+110:Y=(20-Y)*3+15 650 IF col=99 MOVEX,Y:PLOT103,X+42,Y+54:ENDPROC 660 IF col=98 MOVEX,Y:PLOT21,X+42,Y:PLOT21,X+42,Y+54:PLOT21,X,Y+54:PLOT21,X,Y:ENDPROC 670 MOVEX,Y:PLOT103,X+42,Y+54:MOVEX,Y:DRAWX+42,Y:DRAWX+42,Y+54:DRAWX,Y+54:DRAWX,Y 680 IF F=FALSE:FORQ=Y+1 TO Y+53STEP2:MOVEX+1,Q:PLOT21,X+41,Q:NEXT:MOVEX+1,Y+1:MOVEX+41,Y+15:PLOT86,X+1,Y+20:MOVEX+25,Y+1:MOVEX+41,Y+10:PLOT86,X+1,Y+50:MOVEX+1,Y+27:MOVEX+41,Y+45:PLOT86,X+30,Y+52:ENDPROC 690 x1=X+2:y1=Y+48:x2=X+36:y2=Y+2 700 IF num=1 PROCACE 710 IF num=2 PROC2 720 IF num=3 PROC3 730 IF num=4 PROC4 740 IF num=5 PROC5 750 IF num=6 PROC6 760 IF num=7 PROC7 770 IF num=8 PROC8 780 IF num=9 PROC9 790 IF num=10 PROC10 800 IF num=11 PROCJACK 810 IF num=12 PROCQUEEN 820 IF num=13 PROCKING 830 IF col=1 PROCHU(X+2,Y+40):PROCHD(X+36,Y+10) 840 IF col=2 PROCDU(X+2,Y+40):PROCDD(X+36,Y+10) 850 IF col=3 PROCSU(X+2,Y+40):PROCSD(X+36,Y+10) 860 IF col=4 PROCCU(X+2,Y+40):PROCCD(X+36,Y+10) 870 IFcol=1AND(num=1ORnum=3ORnum=5ORnum=9)PROCHU(X+20,Y+25) 880 IFcol=2AND(num=1ORnum=3ORnum=5ORnum=9)PROCDU(X+20,Y+25) 890 IFcol=3AND(num=1ORnum=3ORnum=5ORnum=9)PROCSU(X+20,Y+25) 900 IFcol=4AND(num=1ORnum=3ORnum=5ORnum=9)PROCCU(X+20,Y+25) 910 IFcol=1AND(num=2ORnum=3)PROCHU(X+20,Y+37):PROCHD(X+20,Y+13) 920 IFcol=2AND(num=2ORnum=3)PROCDU(X+20,Y+37):PROCDD(X+20,Y+13) 930 IFcol=3AND(num=2ORnum=3)PROCSU(X+20,Y+37):PROCSD(X+20,Y+13) 940 IFcol=4AND(num=2ORnum=3)PROCCU(X+20,Y+37):PROCCD(X+20,Y+13) 950 IFcol=1AND(num>3 AND num<9)PROCHU(X+15,Y+37):PROCHU(X+25,Y+37):PROCHD(X+15,Y+13):PROCHD(X+25,Y+13) 960 IFcol=2AND(num>3 AND num<9)PROCDU(X+15,Y+37):PROCDU(X+25,Y+37):PROCDD(X+15,Y+13):PROCDD(X+25,Y+13) 970 IFcol=3AND(num>3 AND num<9)PROCSU(X+15,Y+37):PROCSU(X+25,Y+37):PROCSD(X+15,Y+13):PROCSD(X+25,Y+13) 980 IFcol=4AND(num>3 AND num<9)PROCCU(X+15,Y+37):PROCCU(X+25,Y+37):PROCCD(X+15,Y+13):PROCCD(X+25,Y+13) 990 IFcol=1AND(num>5ANDnum<9)PROCHU(X+15,Y+25):PROCHU(X+25,Y+25) 1000 IFcol=2AND(num>5ANDnum<9)PROCDU(X+15,Y+25):PROCDU(X+25,Y+25) 1010 IFcol=3AND(num>5ANDnum<9)PROCSU(X+15,Y+25):PROCSU(X+25,Y+25) 1020 IFcol=4AND(num>5ANDnum<9)PROCCU(X+15,Y+25):PROCCU(X+25,Y+25) 1030 IFcol=1AND(num=7ORnum=8)PROCHU(X+20,Y+31) 1040 IFcol=2AND(num=7ORnum=8)PROCDU(X+20,Y+31) 1050 IFcol=3AND(num=7ORnum=8)PROCSU(X+20,Y+31) 1060 IFcol=4AND(num=7ORnum=8)PROCCU(X+20,Y+31) 1070 IFcol=1ANDnum=8PROCHD(X+20,Y+19) 1080 IFcol=2ANDnum=8PROCDD(X+20,Y+19) 1090 IFcol=3ANDnum=8PROCSD(X+20,Y+19) 1100 IFcol=4ANDnum=8PROCCD(X+20,Y+19) 1110 IFcol=1AND(num>8ANDnum<11)PROCHU(X+15,Y+45):PROCHU(X+25,Y+45):PROCHU(X+15,Y+35):PROCHU(X+25,Y+35):PROCHD(X+15,Y+5):PROCHD(X+25,Y+5):PROCHD(X+15,Y+15):PROCHD(X+25,Y+15) 1120 IFcol=2AND(num>8ANDnum<11)PROCDU(X+15,Y+45):PROCDU(X+25,Y+45):PROCDU(X+15,Y+35):PROCDU(X+25,Y+35):PROCDD(X+15,Y+5):PROCDD(X+25,Y+5):PROCDD(X+15,Y+15):PROCDD(X+25,Y+15) 1130 IFcol=3AND(num>8ANDnum<11)PROCSU(X+15,Y+45):PROCSU(X+25,Y+45):PROCSU(X+15,Y+35):PROCSU(X+25,Y+35):PROCSD(X+15,Y+5):PROCSD(X+25,Y+5):PROCSD(X+15,Y+15):PROCSD(X+25,Y+15) 1140 IFcol=4AND(num>8ANDnum<11)PROCCU(X+15,Y+45):PROCCU(X+25,Y+45):PROCCU(X+15,Y+35):PROCCU(X+25,Y+35):PROCCD(X+15,Y+5):PROCCD(X+25,Y+5):PROCCD(X+15,Y+15):PROCCD(X+25,Y+15) 1150 IFcol=1ANDnum=10PROCHU(X+20,Y+40):PROCHD(X+20,Y+10) 1160 IFcol=2ANDnum=10PROCDU(X+20,Y+40):PROCDD(X+20,Y+10) 1170 IFcol=3ANDnum=10PROCSU(X+20,Y+40):PROCSD(X+20,Y+10) 1180 IFcol=4ANDnum=10PROCCU(X+20,Y+40):PROCCD(X+20,Y+10) 1190 IFnum>10PROCSHADE(X+10,Y+10) 1200 ENDPROC 1210 DEF PROCACE:MOVEx1,y1:DRAWx1,y1+2:DRAWx1+2,y1+4:DRAWx1+4,y1+2:DRAWx1+4,y1:MOVEx1+1,y1+1:DRAWx1+3,y1+1:MOVEx2,y2+4:DRAWx2,y2+2:DRAWx2+2,y2:DRAWx2+4,y2+2:DRAWx2+4,y2+4:MOVEx2+1,y2+3:DRAWx2+3,y2+3:ENDPROC 1220 DEF PROC2:MOVEx1+4,y1:DRAWx1,y1:DRAWx1,y1+1:DRAWx1+2,y1+2:DRAWx1+3,y1+2:DRAWx1+4,y1+3:DRAWx1+3,y1+4:DRAWx1,y1+4:MOVEx2,y2+4:DRAWx2+4,y2+4:DRAWx2+4,y2+3:DRAWx2+3,y2+2:DRAWx2+1,y2+2:DRAWx2,y2+1:DRAWx2+1,y2:DRAWx2+4,y2:ENDPROC 1230 DEF PROC3:MOVEx1,y1:DRAWx1+3,y1:DRAWx1+4,y1+1:DRAWx1+3,y1+2:DRAWx1+1,y1+2:MOVEx1+4,y1+3:DRAWx1+3,y1+4:DRAWx1,y1+4:MOVEx2+4,y2+4:DRAWx2+1,y2+4:DRAWx2,y2+3:DRAWx2+1,y2+2:DRAWx2+3,y2+2:MOVEx2,y2+1:DRAWx2+1,y2:DRAWx2+4,y2:ENDPROC 1240 DEF PROC4:MOVEx1+2,y1:DRAWx1+2,y1+4:DRAWx1+1,y1+4:DRAWx1,y1+2:DRAWx1+3,y1+2:MOVEx2+2,y2+4:DRAWx2+2,y2:DRAWx2+3,y2:DRAWx2+4,y2+1:DRAWx2+4,y2+2:DRAWx2+1,y2+2:ENDPROC 1250 DEF PROC5:MOVEx1,y1:DRAWx1+3,y1:DRAWx1+4,y1+1:DRAWx1+3,y1+2:DRAWx1+1,y1+2:DRAWx1,y1+3:DRAWx1,y1+4:DRAWx1+4,y1+4:MOVEx2,y2:DRAWx2+4,y2:DRAWx2+4,y2+1:DRAWx2+3,y2+2:DRAWx2+1,y2+2:DRAWx2,y2+3:DRAWx2+1,y2+4:DRAWx2+4,y2+4:ENDPROC 1260 DEF PROC6:MOVEx1+4,y1+4:DRAWx1,y1+4:DRAWx1,y1:DRAWx1+4,y1:DRAWx1+4,y1+2:DRAWx1+1,y1+2:MOVEx2,y2:DRAWx2+4,y2:DRAWx2+4,y2+4:DRAWx2,y2+4:DRAWx2,y2+2:DRAWx2+3,y2+2:ENDPROC 1270 DEF PROC7:MOVEx1,y1+4:DRAWx1+4,y1+4:DRAWx1+4,y1+3:DRAWx1+2,y1+1:DRAWx1+2,y1:MOVEx2+4,y2:DRAWx2,y2:DRAWx2,y2+1:DRAWx2+2,y2+3:DRAWx2+2,y2+4:ENDPROC 1280 DEF PROC8:MOVEx1,y1:DRAWx1+4,y1:DRAWx1+4,y1+4:DRAWx1,y1+4:DRAWx1,y1:MOVEx1,y1+2:DRAWx1+4,y1+2:MOVEx2,y2:DRAWx2+4,y2:DRAWx2+4,y2+4:DRAWx2,y2+4:DRAWx2,y2:MOVEx2,y2+2:DRAWx2+4,y2+2:ENDPROC 1290 DEF PROC9:MOVEx2+4,y2+4:DRAWx2,y2+4:DRAWx2,y2:DRAWx2+4,y2:DRAWx2+4,y2+2:DRAWx2+1,y2+2:MOVEx1,y1:DRAWx1+4,y1:DRAWx1+4,y1+4:DRAWx1,y1+4:DRAWx1,y1+2:DRAWx1+3,y1+2:ENDPROC 1300 DEF PROC10:MOVEx1,y1:DRAWx1,y1+4:MOVEx1+2,y1:DRAWx1+4,y1:DRAWx1+4,y1+4:DRAWx1+2,y1+4:DRAWx1+2,y1:MOVEx2,y2:DRAWx2+2,y2:DRAWx2+2,y2+4:DRAWx2,y2+4:DRAWx2,y2:MOVEx2+4,y2:DRAWx2+4,y2+4:ENDPROC 1310 DEF PROCJACK:MOVEx1,y1+4:DRAWx1+4,y1+4:MOVEx1+2,y1+4:DRAWx1+2,y1:DRAWx1,y1:MOVEx2,y2:DRAWx2+4,y2:MOVEx2+2,y2:DRAWx2+2,y2+4:DRAWx2+4,y2+4:ENDPROC 1320 DEF PROCQUEEN:MOVEx1,y1:DRAWx1,y1+4:DRAWx1+4,y1+4:DRAWx1+4,y1+2:DRAWx1+2,y1:DRAWx1,y1:MOVEx1+4,y1:DRAWx1+2,y1+2:MOVEx2,y2:DRAWx2+4,y2:DRAWx2+4,y2+4:DRAWx2+2,y2+4:DRAWx2,y2+2:DRAWx2,y2:MOVEx2+2,y2+2:DRAWx2,y2+4:ENDPROC 1330 DEF PROCKING:MOVEx1,y1:DRAWx1,y1+4:MOVEx1+3,y1:DRAWx1+1,y1+2:DRAWx1+3,y1+4:MOVEx2+4,y2:DRAWx2+4,y2+4:MOVEx2+1,y2:DRAWx2+3,y2+2:DRAWx2+1,y2+4:ENDPROC 1340 DEF PROCHU(x1,y1):MOVEx1+1,y1+1:PLOT101,x1+3,y1+3:PLOT69,x1+2,y1:PLOT69,x1,y1+2:PLOT69,x1+4,y1+2:PLOT69,x1+1,y1+4:PLOT69,x1+3,y1+4:ENDPROC 1350 DEF PROCDU(x1,y1):MOVEx1+1,y1+1:PLOT101,x1+3,y1+3:PLOT69,x1,y1+2:PLOT69,x1+4,y1+2:PLOT69,x1+2,y1:PLOT69,x1+2,y1+4:ENDPROC 1360 DEF PROCSU(x1,y1):MOVEx1+1,y1+2:PLOT101,x1+3,y1+3:PLOT69,x1,y1+1:PLOT69,x1+4,y1+1:PLOT69,x1+2,y1+4:PLOT69,x1+2,y1:PLOT69,x1+2,y1+1:ENDPROC 1370 DEF PROCCU(x1,y1):MOVEx1+1,y1+1:PLOT101,x1+3,y1+3:PLOT69,x1,y1+1:PLOT69,x1+4,y1+1:PLOT69,x1+2,y1:PLOT69,x1+2,y1+4:ENDPROC 1380 DEF PROCHD(x1,y1):MOVEx1+1,y1+1:PLOT101,x1+3,y1+3:PLOT69,x1+2,y1+4:PLOT69,x1,y1+2:PLOT69,x1+4,y1+2:PLOT69,x1+1,y1:PLOT69,x1+3,y1:ENDPROC 1390 DEF PROCDD(x1,y1):MOVEx1+1,y1+1:PLOT101,x1+3,y1+3:PLOT69,x1,y1+2:PLOT69,x1+4,y1+2:PLOT69,x1+2,y1:PLOT69,x1+2,y1+4:ENDPROC 1400 DEF PROCSD(x1,y1):MOVEx1+1,y1+1:PLOT101,x1+3,y1+2:PLOT69,x1,y1+3:PLOT69,x1+4,y1+3:PLOT69,x1+2,y1:PLOT69,x1+2,y1+3:PLOT69,x1+2,y1+4:ENDPROC 1410 DEF PROCCD(x1,y1):MOVEx1+1,y1+1:PLOT101,x1+3,y1+3:PLOT69,x1,y1+3:PLOT69,x1+4,y1+3:PLOT69,x1+2,y1:PLOT69,x1+2,y1+4:ENDPROC 1420 DEF PROCSHADE(x1,y1):MOVEx1,y1:DRAWx1+22,y1:DRAWx1+22,y1+34:DRAWx1,y1+34:DRAWx1,y1:FORQ=x1+1TOx1+21STEP2:MOVEQ,y1+1:PLOT21,Q,y1+34:NEXT:ENDPROC 1430 DEF PROCDEAL 1440 IF NIP=0 MOVE55,10:PLOT103,97,64:MOVE55,10:PLOT21,97,10:PLOT21,97,64:PLOT21,55,64:PLOT21,55,10:PRINTTAB(10,10)"Pack"TAB(10,12)"Empty":ENDPROC 1450 IF PP=NIP PP=1 ELSE PP=PP+1 1460 PROCDRAW(99,0,PCOL%(PP),PNUM%(PP),TRUE) 1470 IF PP=NIP OR NIP=1 PROCDRAW(97,0,0,0,0):ENDPROC 1480 IF PP=1 PROCDRAW(96,0,0,0,0) 1490 IF PP=1 AND DEAL>1 AND DIR=TRUE DEAL=DEAL-1 1500 ENDPROC 1510 DEF PROCMOVE 1520 PROCDEL:PRINTTAB(0,5)"Move :"TAB(0,3)"(N)ext or column(1-7)" 1530 G=GET 1540 IF G>48 AND G<56 PRINTTAB(7,5)"Column ";CHR$G:M=G-48:GOTO1570 1550 IF G=78 PRINTTAB(7,5)"Next card":M=99:GOTO1570 1560 GOTO1530 1570 PRINTTAB(0,6)"To :"TAB(0,3)"Column(1-7)"SPC10 1580 G=GET 1590 IF G>48 AND G<56 PRINTTAB(7,6)"Column ";CHR$G:T=G-48:GOTO1610 1600 GOTO1580 1610 IF M=99 PROCMOVENEXT ELSE PROCMOVECOL 1620 ENDPROC 1630 DEF PROCMOVENEXT 1640 IF NIP=0 ENDPROC 1650 IF FNF(T)=0 AND PNUM%(PP)<13 ENDPROC 1660 IF FNF(T)=0 AND PNUM%(PP)=13 NUM%(T,1)=PNUM%(PP):COL%(T,1)=PCOL%(PP):FACE%(T,1)=TRUE:PROCDRAW(T,1,PCOL%(PP),PNUM%(PP),TRUE):PROCKILLCARD:ENDPROC 1670 IF PNUM%(PP)<>NUM%(T,FNF(T))-1 ENDPROC 1680 IF COL%(T,FNF(T))<3 AND PCOL%(PP)<3 ENDPROC 1690 IF COL%(T,FNF(T))>2 AND PCOL%(PP)>2 ENDPROC 1700 NUM%(T,FNF(T)+1)=PNUM%(PP):COL%(T,FNF(T))=PCOL%(PP) 1710 PROCKILLCARD:PROCDRAW(T,FNF(T)+4,COL%(T,FNF(T)),NUM%(T,FNF(T)),TRUE) 1720 ENDPROC 1730 DEF PROCMOVECOL 1740 IF FNF(T)=0 AND NUM%(M,FNL(M))<13 ENDPROC 1750 IF FNF(T)=0 AND NUM%(M,FNL(M))=13 GOTO1790 1760 IF NUM%(M,FNL(M))<>NUM%(T,FNF(T))-1 ENDPROC 1770 IF COL%(T,FNF(T))<3 AND COL%(M,FNL(M))<3 ENDPROC 1780 IF COL%(T,FNF(T))>2 AND COL%(M,FNL(M))>2 ENDPROC 1790 FORK=FNL(M) TO FNF(M) 1800 NUM%(T,FNF(T)+1)=NUM%(M,K):COL%(T,FNF(T))=COL%(M,K):FACE%(T,FNF(T))=FACE%(M,K) 1810 IF NUM%(T,FNF(T))=13 PROCDRAW(T,FNF(T),COL%(T,FNF(T)),NUM%(T,FNF(T)),TRUE) ELSE PROCDRAW(T,FNF(T)+4,COL%(T,FNF(T)),NUM%(T,FNF(T)),TRUE) 1820 NEXT 1830 Z=FNL(M) 1840 IF FNF(M)=FNL(M) OR FNF(M)=1 GOTO1880 1850 FORK=FNL(M)+1 TO FNF(M) 1860 NUM%(M,K)=0:COL%(M,K)=0:FACE%(M,K)=0:PROCDRAW(M,K+4,99,0,0) 1870 NEXT 1880 NUM%(M,Z)=0:COL%(M,Z)=0:FACE%(M,Z)=0:PROCDRAW(M,Z,99,0,0) 1890 IF FNF(M)>0 PROCDRAW(M,Z-1,COL%(M,Z-1),NUM%(M,Z-1),TRUE):FACE%(M,Z-1)=TRUE 1900 IF FNL(M)=20 PROCDRAW(M,1,98,0,0) 1910 ENDPROC 1920 DEF FNF(Z) 1930 L=21:REPEAT:L=L-1:UNTILNUM%(Z,L)>0 OR L=0 1940 =L 1950 DEF FNL(Z) 1960 L=0:REPEAT:L=L+1:UNTILFACE%(Z,L)=TRUE OR L=20 1970 =L 1980 DEF PROCKILLCARD 1990 IF PP=NIP GOTO2040 2000 FORK=PP TO NIP-1 2010 PNUM%(K)=PNUM%(K+1):PCOL%(K)=PCOL%(K+1) 2020 NEXT 2030 PNUM%(NIP)=0:PCOL%(NIP)=0 2040 DIR=FALSE:NIP=NIP-1:IF PP=1 PP=NIP-1 ELSE PP=PP-2 2050 PROCDEAL 2060 ENDPROC 2070 DEF PROCDEL:FORI=0 TO 6:PRINTTAB(0,I)SPC25:NEXT:ENDPROC 2080 DEF PROCRULES 2090 CLS 2100 PRINTTAB(0,0)"The rules of ";CHR$17;"Patience"CHR$18TAB(0,2)"Press any key to move on...":PROCDELAY:CLS 2110 PRINTTAB(0,0)"The cards are dealt into"'"seven columns, with the"'"last card of each column"'"turned face up..." 2120 FORI=1 TO 7 2130 FORA=I TO 7 2140 IF A>I PROCDRAW(A,I,0,0,FALSE) 2150 IF I=1 C=2:N=1 ELSE IF I=2 C=1:N=5 ELSE IF I=3 C=3:N=6 ELSE IF I=4 C=2:N=6 ELSE IF I=5 C=4:N=2 ELSE IF I=6 C=2:N=7 ELSE IF I=7 C=3:N=8 2160 IF A=I PROCDRAW(A,I,C,N,TRUE) 2170 NEXT 2180 NEXT 2190 PROCDELAY 2200 PRINTTAB(0,5)"The rest of the pack"'"is placed below...":PROCDRAW(98,0,0,0,FALSE):PROCDRAW(99,0,1,13,TRUE):PROCDELAY:PROCDEL 2210 PROCDEL 2220 PRINTTAB(0,0)"A column can be moved"'"only if the last card in"'"the column is one number"'"lower and a different"'"colour to the first card"'"of the other column.":PROCDELAY:PROCDEL 2230 PRINTTAB(0,0)"The 5 of hearts "CHR$19"cannot"CHR$20" be"'"moved to the 6 of"'"diamonds...":PROCA(120,110,300,100):PROCA(120,110,210,90):PROCDELAY:PRINTTAB(0,4)"...as both cards are red.":PROCDELAY 2240 PROCA(120,110,300,100):PROCA(120,110,210,90):PROCDEL 2250 PRINTTAB(0,0)"The 5 of hearts "CHR$19"cannot"CHR$20" be"'"moved to the 2 of"'"clubs...":PROCA(120,110,210,115):PROCA(120,110,350,70):PROCDELAY:PRINTTAB(0,4)"...as the 5 is bigger"TAB(0,5)"than the 2.":PROCDELAY 2260 PROCA(120,110,210,115):PROCA(120,110,350,70):PROCDEL 2270 PRINTTAB(0,0)"The 5 of hearts "CHR$19"can"CHR$20" be"'"moved to the 6 of"'"spades...":PROCA(120,110,210,115):PROCA(120,110,260,90):PROCDELAY:PRINTTAB(0,4)"Like this..." 2280 PROCA(120,110,210,115):PROCA(120,110,260,90):PROCDRAW(3,8,1,5,TRUE):PROCDRAW(2,2,99,0,0):PROCDRAW(2,1,0,0,FALSE):PROCDELAY:PROCDEL 2290 PRINTTAB(0,0)"The card underneath"'"can now be turned over...":PROCDRAW(2,1,3,10,TRUE):PROCDELAY:PROCDEL 2300 PRINTTAB(0,0)"The ace of diamonds can"'"be moved to the 2 of"'"clubs...":PROCDRAW(5,9,2,1,TRUE):PROCDRAW(1,1,99,0,0):PROCDELAY:PROCDRAW(1,1,98,0,0):PRINTTAB(0,4)"Leaving an empty space...":PROCDELAY 2310 PROCDEL:PRINTTAB(0,0)"The king from the pack"'"can be put here...":PROCDRAW(1,1,1,13,TRUE):PROCDELAY:PRINTTAB(0,3)"And the next card can"'"be dealt...":PROCDRAW(99,0,3,6,TRUE):PROCDELAY:PROCDEL 2320 PRINTTAB(0,0)"The idea of the game is"'"to get four columns with"'"cards from king to ace..." 2330 N=12 2340 FORI=6 TO 17 2350 IF I MOD 2=1 PROCDRAW(1,I,3,N,TRUE) ELSE PROCDRAW(1,I,1,N,TRUE) 2360 N=N-1 2370 NEXT 2380 PROCDELAY 2390 ENDPROC 2400 DEF PROCPLAYING 2410 CLS:PRINTTAB(0,0)"How to play computer ";CHR$17;"Patience."CHR$18TAB(0,2)"Press any key to move on...":PROCDELAY:CLS 2420 PRINTTAB(0,0)"When the cards are"'"shuffled they will be"'"dealt as follows..." 2430 FORI=1 TO 7 2440 FORA=I TO 7 2450 IF A>I PROCDRAW(A,I,0,0,FALSE) 2460 IF I=1 C=2:N=1 ELSE IF I=2 C=1:N=5 ELSE IF I=3 C=3:N=6 ELSE IF I=4 C=2:N=6 ELSE IF I=5 C=4:N=2 ELSE IF I=6 C=2:N=7 ELSE IF I=7 C=3:N=8 2470 IF A=I PROCDRAW(A,I,C,N,TRUE) 2480 NEXT 2490 NEXT 2500 PROCDELAY:PRINT'"The rest of the pack"'"is placed below...":PROCDRAW(98,0,0,0,FALSE):PROCDRAW(99,0,4,4,TRUE):PROCDELAY:PROCDEL 2510 PRINTTAB(0,0)"To deal the next card"'"from the pack press "CHR$17"D."CHR$18:PROCDELAY:PROCDEL 2520 PRINTTAB(0,0)"To move a card or column"'"press "CHR$17"M."CHR$18:PROCDELAY:PRINT'"Each column has a"'"number from 1 to 7..." 2530 REPEAT:FORI=1 TO 7:PROCA(145,25,I*45+133,90):PRINTTAB(21,13)"Column ";I:TIME=0:REPEAT:UNTILTIME=100:PROCA(145,25,I*45+133,90):NEXT:PRINTTAB(21,13)SPC8:TIME=0:REPEAT:UNTILTIME=100:UNTILINKEY(1)<>-1 OR demo=TRUE 2540 PROCDEL:PRINTTAB(0,0)"To move one column onto"'"another press the number "'"of the first column and"'"then the number of the"'"second column.":PROCDELAY:PROCDEL 2550 PRINTTAB(0,0)"Example : to move the"'"5 of hearts to the 6"'"of spades press "CHR$17"M 2 3"CHR$18:PROCA(120,100,210,115):PROCA(120,100,260,90):PROCDELAY:PROCA(120,100,210,115):PROCA(120,100,260,90):PROCDEL 2560 PRINTTAB(0,0)"To move the next card"'"from the pack to a column"'"press "CHR$17"N "CHR$18"and then the"'"column number.":PROCDELAY:PROCDEL 2570 PRINTTAB(0,0)"Example : to move the"'"next card to the 5 of"'"hearts press "CHR$17"M N 2"CHR$18:PROCA(120,100,210,115):PROCA(120,100,90,60):PROCDELAY:PROCA(120,100,210,115):PROCA(120,100,90,60):PROCDEL 2580 PRINTTAB(0,0)"To exit from the game"'"at any time press "CHR$17"E."CHR$18:PROCDELAY:ENDPROC 2590 DEF PROCDELAY 2600 IF demo=FALSE G=GET ELSE TIME=0:REPEAT:UNTILTIME=500 2610 ENDPROC 2620 DEF PROCEND 2630 PRINTTAB(0,4)"Press Q to quit"TAB(6,5)"R to return to menu"TAB(6,6)"C to continue" 2640 G$=GET$ 2650 IF G$="C" PRINTTAB(0,4)SPC20TAB(0,5)SPC20TAB(0,6)SPC20:ENDPROC 2660 IF G$="R" RUN 2670 IF G$="Q" CLS:END 2680 GOTO2640 2690 DEF PROCWIN 2700 MOVE98,48:PLOT103,402,102:MOVE100,50:DRAW400,50:DRAW400,100:DRAW100,100:DRAW100,50 2710 PRINTTAB(18,5)"CONGRATULATIONS!!! You have completed the game."TAB(18,7)"Press R to re-run or E to end..." 2720 G$=GET$ 2730 IF G$="R" RUN 2740 IF G$="E" CLS:END 2750 GOTO2720 2760 DEF PROCA(X1,Y1,X2,Y2) 2770 MOVEX1,Y1:PLOT6,X2,Y2:MOVEX2-1,Y2-1:PLOT102,X2+1,Y2+1 2780 ENDPROC 2790 DEF PROCDEMO 2800 demo=TRUE 2810 PROCRULES 2820 IF INKEY$(1)="Q" demo=FALSE:ENDPROC 2830 PROCPLAYING 2840 IF INKEY$(1)="Q" demo=FALSE:ENDPROC 2850 GOTO2810