995 POKE53280,0:POKE53281,13 999 PRINT"[147]" 1000 REM ****************************** 1010 REM 1020 REM S O L I T A I R E 1030 REM 1040 REM 1050 REM 1060 REM ****************************** 1070 PRINT"[144]SHUFFLING CARDS FOR A GAME OF SOLITAIRE!" 1090 PRINT: PRINT: PRINT: PRINT" I'LL BE READY IN A FEW SECONDS..." 1100 FORX=1 TO VAL(RIGHT$(TI$,2)) 1110 R=RND(1):NEXT X 1120 DIM F(7,18),S(4),D(52),S$(4):RB=1 1130 S$(1)="[211]":S$(2)="[218]":S$(3)="[193]":S$(4)="[216]" 1140 REM SUIT#1 = HEARTS 1150 REM SUIT#2 = DIAMONDS 1160 REM SUIT#3 = SPADES 1170 REM SUIT#4 = CLUBS 1180 : 1190 FORX=0 TO 7: FORY=0TO18:F(X,Y)=0:NEXT Y,X 1200 FORX=0TO4:S(X)=0:NEXTX 1210 FORX=0TO52:D(X)=0:NEXTX 1220 REM *** SHUFFLE CARDS IN DECK 1230 FORX=1TO52 1240 R=INT(RND(1)*52+1): IFD(R)>0THEN1240 1250 D(R)=X:NEXTX 1260 REM *** DEAL CARDS INTO PILES 1270 R=52:FORX=1TO7:FORY=1TOX 1280 F(X,Y)=D(R)+100 1290 D(R)=0:R=R-1:NEXTY 1300 F(X,X)=F(X,X)-100:NEXTX 1310 REM *** DISPLAY EVERYTHING 1320 C=3:C2=3:GOSUB2730 1330 REM ***COMMAND INPUT 1340 PRINT""; 1360 L=3:GOSUB3080 1370 IF S(1)+S(2)+S(3)+S(4)<>130THEN1390 1380 L=3:GOSUB3080 1385 L=1:GOSUB3060:PRINT"[144]CONGRATULATIONS, Y O U W I N !":GOTO1510 1390 PRINT"[144]D=DECK, ROW#1-7, C=CARD, Q=QUIT";:POKE198,0:WAIT198,1:GETP$ 1392 P=VAL(P$) 1400 IF(P>7)OR(P<0)THEN2360 1410 IFP>0THEN1840 1420 IFP$="C"THENGOSUB2900:GOTO1340:REM NEXT CARD 1430 IFP$<>"Q"GOTO1550 1440 REM *** QUITTER! 1450 FORX=1TO7:FORY=1TO18 1460 IFF(X,Y)>100THENF(X,Y)=F(X,Y)-100 1470 NEXTY,X 1480 GOSUB2830 1490 L=3:GOSUB3080 1500 L=1:GOSUB3060:PRINT"[144]SORRY, BETTER LUCK NEXT TIME !!!" 1510 PRINT"WANT TO PLAY AGAIN (Y/N) ?" 1520 GETP$:IFP$= "Y"THEN GOTO 5000 1530 IFP$<>"N"THEN1520 1540 GOTO63000 1550 IFP$<>"D"GOTO2360 1560 REM *** FROM DECK TO ... 1570 IF D(1)=0THEN2370 1580 V=D(C):S1=INT((D(C)-1)/13)+1 1590 IFV>13THENV=V-13:GOTO1590 1600 L=1:GOSUB3060 1610 PRINT"FROM DECK TO (A=ACES, ROW#1-7) ";:POKE198,0:WAIT198,1:GETR$ 1620 IFR$<>"A"THEN1700 1630 REM *** DECK TO ACES 1640 IF S1<>(D(C)+12)/13THEN1670 1650 IF S(S1)>0THEN2370 1660 GOTO1680 1670 IFD(C)<>S(S1)+1THEN2370 1680 S(S1)=D(C):X=S1:GOSUB2420:GOSUB3130:GOTO1340 1690 REM ***DECK TO ROW 1700 R=VAL(R$) 1710 Y=1:IF(R<1)OR(R>7)THEN2360 1720 IFY>18THEN2370 1730 IF F(R,Y)<>0THENY=Y+1:GOTO1720 1740 IFY>1THEN1770 1750 IFV=13THEN1820 1760 GOTO2370 1770 V1=F(R,Y-1) 1780 IFV1>13THENV1=V1-13:GOTO1780 1790 IFV<>V1-1THEN2370 1800 S2=INT((F(R,Y-1)-1)/26):S1=INT((S1-1)/2) 1810 IFS1=S2THEN2370 1820 F(R,Y)=D(C):GOSUB3180:GOSUB3130:GOSUB2830:GOTO1340 1830 REM ** FROM ROW TO... 1840 Y=0:IFF(P,1)=0THEN2370 1850 REM *** SINGLE CARD IN ROW? 1860 Y=Y+1: IFY>18THEN2370 1870 Y2=F(P,Y): IF Y2>100THEN1860 1880 IF F(P,Y+1)<>0THEN1920 1890 IF Y2>13THENY2=Y2-13:GOTO1890 1900 GOTO2030 1910 REM *** FROM WHAT CARD IN ROW? 1920 L=1:GOSUB3060 1930 PRINT"FROM ROW";P;"CARD (A,2-10,J,Q,K) " 1934 GETY$:IFY$=""THEN1934 1935 Y1=VAL(Y$) 1936 IFY1=1THENY1=10 1940 IFY$="A"THENY1=1 1950 IFY$="J"THENY1=11 1960 IFY$="Q"THENY1=12 1970 IFY$="K"THENY1=13 1980 IF(Y1=0)OR(Y1>13)THEN2360 1990 IFY>18THEN2370 2000 Y2=F(P,Y):IFY2>100THENY=Y+1:GOTO1990 2010 IF Y2>13THENY2=Y2-13:GOTO2010 2020 IF Y1<>Y2 THEN Y=Y+1:GOTO1990 2030 R=F(P,Y):L=1:GOSUB3060 2040 PRINT"FROM ";:GOSUB2520 2050 PRINT"[144] ROW";P;"TO (A=ACES,ROW#1-7)";:POKE198,0:WAIT198,1:GETA$ 2060 REM *** FROM ROW/CARD TO ... 2070 S1=INT((F(P,Y)-1)/13)+1 2080 IFA$<>"A"THEN2180 2090 REM *** FROM ROW/CARD TO ACES 2100 IF F(P,Y+1)>0THEN2370 2110 IFS1<>(F(P,Y)+12)/13THEN2140 2120 IFS(S1)>0THEN2370 2130 GOTO2150 2140 IF F(P,Y)<>S(S1)+1THEN2370 2150 S(S1)=F(P,Y):F(P,Y)=0:IF F(P,Y-1)>100THENF(P,Y-1)=F(P,Y-1)-100 2160 GOSUB3180:GOSUB2830:X=S1:GOSUB2420:GOTO1340 2170 REM *** FROM ROW/CARD TO ROW 2180 Q=VAL(A$) 2190 Z=1:IF(Q<1)OR(Q>7)THEN2360 2200 IFZ>18THEN2250 2210 IFF(Q,Z)<>0THENZ=Z+1:GOTO2200 2220 IFZ>1THEN2250 2230 IFY2=13THEN2300 2240 GOTO2370 2250 V1=F(Q,Z-1) 2260 IFV1>13THENV1=V1-13:GOTO2260 2270 IFY2<>V1-1THEN2370 2280 S2=INT((F(Q,Z-1)-1)/26):S1=INT((S1-1)/2) 2290 IFS1=S2THEN2370 2300 IF F(P,Y-1)>100THENF(P,Y-1)=F(P,Y-1)-100 2310 F(Q,Z)=F(P,Y):F(P,Y)=0 2320 Y=Y+1:Z=Z+1 2330 IFF(P,Y)<>0THEN2310 2340 GOSUB3180:GOSUB2830:IFRB=0THENGOSUB3034 2345 GOTO1340 2350 REM *** ERRORS! 2360 PRINT:PRINT"[145]  INVALID RESPONSE! ":GOTO2380 2370 PRINT:PRINT"[145]  ILLEGAL PLAY! " 2380 T=TI 2390 IF(TI-T)<50GOTO2390 2400 GOTO1340 2410 REM *** DISPLAY ACES 2420 PRINT""; 2430 FORX1=1TOX:PRINT"";:NEXTX1 2440 IF(S(X)=0)AND(X>2)THENPRINT"--";S$(X):RETURN 2450 IFS(X)=0THENPRINT"[149] ";S$(X);"[146][144]":RETURN 2460 R=S(X):GOSUB2520:PRINT:RETURN 2470 REM *** DISPLAY CARDS IN PILES 2480 R=F(X,Y) 2490 IF R=0THENPRINT" ";:RETURN 2500 IFR>100THENPRINT"[144][207][183][208]";:RETURN 2510 REM *** PRINT CARD 2520 R1=R 2525 PRINT""; 2530 IFR1>13THENR1=R1-13:GOTO2530 2540 IFR<27THENPRINT"[149]";:GOTO2550 2545 PRINT"[144]"; 2550 ON R1 GOTO 2570,2580,2590,2600,2610,2620 2560 ON R1-6GOTO2630,2640,2650,2660,2670,2680,2690 2570 PRINT" A";:GOTO2700 2580 PRINT" 2";:GOTO2700 2590 PRINT" 3";:GOTO2700 2600 PRINT" 4";:GOTO2700 2610 PRINT" 5";:GOTO2700 2620 PRINT" 6";:GOTO2700 2630 PRINT" 7";:GOTO2700 2640 PRINT" 8";:GOTO2700 2650 PRINT" 9";:GOTO2700 2660 PRINT"10";:GOTO2700 2670 PRINT" J";:GOTO2700 2680 PRINT" Q";:GOTO2700 2690 PRINT" K"; 2700 R9=INT((R-1)/13)+1 2710 PRINTS$(R9);"[146]";:RETURN 2720 REM *** DISPLAY ACES & ROWS 2730 PRINT"[147]ROWS -1- -2- -3- -4- -5- -6- -7-" 2740 PRINTCHR$(17);CHR$(17);CHR$(192);CHR$(192);CHR$(192);CHR$(192);CHR$(238) 2750 PRINT"ACES"; 2760 FORXX=1TO8:PRINTCHR$(221);CHR$(17);CHR$(157);:NEXTXX 2770 PRINTCHR$(221) 2780 PRINTCHR$(192);CHR$(192);CHR$(192);CHR$(192);CHR$(253) 2790 FORX=1TO4:GOSUB2420:NEXTX 2800 GOSUB2830 2810 GOTO2960 2820 REM *** UPDATE ROW DISPLAY 2830 PRINT""; 2840 FORY=1TO18 2850 Y9=Y-11:IFY<12THENY9=1 2860 PRINTTAB(4+((Y9-1)*5)); 2870 FORX=Y9TO7:PRINTSPC(2);:GOSUB2480 2880 NEXTX:PRINT:NEXTY:RETURN 2890 REM *** NEXT 3RD CARD IN DECK 2900 IFD(1)=0THEN2960 2910 X=0:FORY=1TO24:IFD(Y)<>0THENX=X+1:NEXTY:IFFLTHENC=C2 2920 IFC=XTHENC=3:GOTO2945 2930 C=C+3 2940 IFC>XTHENC=C-1:GOTO2940 2945 C2=C:FL=0 2955 REM *** UPDATE DECK DISPLAY 2960 PRINT"DECK" 2980 PRINT" ":REM 27 SPACES 2990 PRINT"[145]"; 3000 IFD(1)=0THENPRINT" ";:GOTO3020:REM 3 SPACES IN PRINT 3010 R=D(C):GOSUB2520 3020 X=0:FORY=1TO24:IFD(Y)<>0THENX=X+1:NEXTY 3030 PRINTTAB(10);"[144](";X;"CARDS LEFT )" 3032 IFX<>0THEN3040 3034 RB=0:CR$="NO":FORZR=1TO7:FORZC=1TO18 3036 IFF(ZR,ZC)>100THENCR$="YES" 3038 NEXTZC:NEXTZR:IFCR$="NO"THEN1380 3040 RETURN 3050 REM *** BACK UP LINES THEN CLEAR 3060 FORL1=1TOL:PRINT"[145]";:NEXTL1 3070 REM *** BLANK LINES! 3080 FORL1=1TOL 3090 PRINT" ":REM 39 SPACES 3100 NEXTL1 3110 FORL1=1TOL:PRINT"[145]";:NEXTL1:RETURN 3120 REM *** REMOVE CARD FROM DECK & DISP 3130 FORX=CTO24:D(X)=D(X+1):NEXTX 3140 IFD(1)=0THEN3170 3145 IFFLTHENC2=C2-1 3150 C=C-1:IFNOTFLTHENC2=C 3155 FL=-1 3160 IFC<1THENC=C2:GOSUB2900:RETURN 3170 GOSUB2960:RETURN 3180 PRINT:PRINT"PLEASE WAIT WHILE I FIX THE CARDS !":RETURN 5000 RUN 63000 LOAD"PAYLOAD CONNECT",8