1 ' This program plays solitaire 2 ' 8 ' Line 10 sets up the program default environment 9 ' 10 KEY OFF: SCREEN 0, 1: CLS : WIDTH 40: OPTION BASE 1: DEFINT A-Z: LOCATE , , 0, 0, 7 17 ' 18 ' Line 20 sets up program arrays 19 ' 20 DIM CARD$(52), DECK(52), PLAYAREA(20, 7), SDECK(24), ACES(4), HOLDSTACK(13) 25 GOSUB 200: RFC = 4: RBC = 7: BFC = 0: BBC = 7: LFC = 9 30 BACKCARD$ = STRING$(3, 176): FIRSTTIME = 1 37 ' 38 ' Line 40 gets rid of the basic defaults for Function keys 39 ' 40 FOR I = 1 TO 10: KEY I, "": NEXT 47 ' 48 ' Lines 50 thru 70 use time to seed the randomizer 49 ' 50 HTIME$ = TIME$ 60 START = (VAL(RIGHT$(HTIME$, 2)) * 100) + VAL(MID$(HTIME$, 4, 2)) 70 RANDOMIZE START 77 ' 78 ' Line 80 performs a routine which initializes the CARD arrays. 79 ' 80 GOSUB 1000 97 ' 98 ' *** Main Control Routine *** 99 ' 100 PLAYGAME = 1 110 WHILE PLAYGAME 120 GOSUB 2000: ' *** Shuffle deck *** 130 GOSUB 10000: ' *** Play solitaire *** 140 GOSUB 40000: ' *** Determine if want to play another game *** 150 WEND 160 END 197 ' 198 ' *** Zero out hold stack used to hold cards being moved *** 199 ' 200 FOR HS = 1 TO 13 210 HOLDSTACK(HS) = 0 220 NEXT 230 RETURN 497 ' 498 ' *** Main Black and Red edit *** 499 ' 500 IF (PLAYAREA(M, N) - 1) MOD 13 = 0 THEN BEEP: CANTDO = 1: RETURN 505 IF PLAYAREA(M, N) > 26 THEN GOTO 540 510 IF HOLDSTACK(1) < 27 THEN BEEP: CANTDO = 1: RETURN 520 IF (HOLDSTACK(1) - PLAYAREA(M, N) + 1) MOD 13 > 0 THEN BEEP: CANTDO = 1: RETURN 530 RETURN 540 IF HOLDSTACK(1) > 26 THEN BEEP: CANTDO = 1: RETURN 550 IF (PLAYAREA(M, N) - HOLDSTACK(1) - 1) MOD 13 > 0 THEN BEEP: CANTDO = 1: RETURN 560 RETURN 997 ' 998 ' *** This routine initializes the card arrays. *** 999 ' 1000 RESTORE 1010 FOR I = 1 TO 52 1020 READ CARD$(I) 1040 DECK(I) = I 1050 NEXT 1060 RETURN 1097 ' 1098 ' *** Zeros out main stacks (PLAYAREA) and ACERS stacks 1099 ' 1100 FOR I = 1 TO 20 1110 FOR J = 1 TO 7 1120 PLAYAREA(I, J) = 0 1130 NEXT 1140 NEXT 1150 FOR AI = 1 TO 4 1160 ACES(AI) = 0 1170 NEXT 1180 RETURN 1997 ' 1998 ' *** This routine produces a shuffled deck of cards. *** 1999 ' 2000 FOR I = 1 TO 51 2010 J = INT(RND * (53 - I)) + 1 2040 SWAP DECK(53 - I), DECK(J) 2050 NEXT 2060 RETURN 9997 ' 9998 ' *** Main routine for playing Solitair. *** 9999 ' 10000 GOSUB 11000: IDO = 1 10010 IF IDO THEN GOSUB 10100: IF ALLCARDSUP THEN GOSUB 40200: IF IDO THEN GOSUB 15000: RETURN 10015 FROMDECK = 0: FIRSTCYCLE = 1: GOSUB 12000 10020 IF K$ = CHR$(27) THEN GOSUB 40100: IF K$ = CHR$(27) THEN GOSUB 16000: RETURN ELSE GOTO 10010 10030 IF K$ = "N" THEN GOSUB 10500: GOTO 10010 10040 IF OFFSTACKS THEN GOSUB 10600 ELSE GOSUB 10700 10050 FIRSTCYCLE = 0: GOSUB 12000 10060 IF K$ = CHR$(27) THEN GOSUB 10800: GOTO 10010 10070 GOSUB 14000: IF CANTDO THEN GOTO 10050 10080 GOTO 10010 10090 RETURN 10097 ' 10098 ' *** Check if all cards are showing *** 10099 ' 10100 ALLCARDSUP = 1 10110 IF MAXSDECK > 0 THEN ALLCARDSUP = 0: RETURN 10120 FOR N = 1 TO 7 10130 IF PLAYAREA(20, N) > 1 THEN N = 8: ALLCARDSUP = 0 10140 NEXT 10150 RETURN 10497 ' 10498 ' *** Get next card from deck. *** 10499 ' 10500 IF SDECKPOS = MAXSDECK THEN SDECKPOS = 3 ELSE SDECKPOS = SDECKPOS + 3 10510 IF SDECKPOS > MAXSDECK THEN SDECKPOS = MAXSDECK 10520 IF SDECK(SDECKPOS) < 27 THEN COLOR RFC, RBC ELSE COLOR BFC, BBC 10530 LOCATE 21, 4: PRINT CARD$(SDECK(SDECKPOS)); 10540 COLOR LFC, 0 10550 LOCATE 19, 6: PRINT SDECKPOS; 10560 GOSUB 11500 10570 RETURN 10597 ' 10598 ' *** Mark selection from deck. *** 10599 ' 10600 FROMDECK = 1: MAXHS = 1 10620 HOLDSTACK(1) = SDECK(SDECKPOS) 10630 GOSUB 10650 10640 RETURN 10650 FOR HS = 1 TO MAXHS 10660 IF HOLDSTACK(HS) < 27 THEN COLOR RFC, RBC ELSE COLOR BFC, BBC 10670 LOCATE HS + 2, 9: PRINT CARD$(HOLDSTACK(HS)); 10680 NEXT 10685 COLOR LFC, 0 10690 RETURN 10697 ' 10698 ' *** Mark selection from stacks. *** 10699 ' 10700 HOLDM = M: HOLDN = N: HS = 1 10710 WHILE PLAYAREA(M, N) 10720 HOLDSTACK(HS) = PLAYAREA(M, N) 10730 M = M + 1: HS = HS + 1 10740 WEND 10750 MAXHS = HS - 1 10760 GOSUB 10650 10770 RETURN 10797 ' 10798 ' *** Erase hold stack from screen and zero out array. *** 10799 ' 10800 COLOR 7, 0 10810 FOR HS = 1 TO MAXHS 10820 LOCATE HS + 2, 9: PRINT " "; 10830 HOLDSTACK(HS) = 0 10840 NEXT 10850 MAXHS = 0 10860 COLOR LFC, 0 10870 RETURN 10997 ' 10998 ' *** Setup for game: Display screen, Deal cards, Set limits *** 10999 ' 11000 CLS 11010 LOCATE 1, 6: COLOR LFC, 0: PRINT "S O L I T A I R E"; 11030 LOCATE 3, 3: PRINT "ACES"; 11040 LOCATE 4, 2: PRINT "STACKS"; 11050 LOCATE 6, 2: COLOR RFC, RBC: PRINT ""; : COLOR BFC, BBC: LOCATE 6, 4: PRINT " "; 11060 LOCATE 8, 2: COLOR RFC, RBC: PRINT ""; : COLOR BFC, BBC: LOCATE 8, 4: PRINT " "; 11065 LOCATE 10, 2: PRINT ""; : LOCATE 10, 4: PRINT " "; 11070 LOCATE 12, 2: PRINT ""; : LOCATE 12, 4: PRINT " "; : COLOR LFC, 0 11075 LOCATE 15, 2: PRINT "CARDS IN"; 11080 LOCATE 16, 2: PRINT "DECK 24"; 11085 LOCATE 18, 2: PRINT "POS. IN"; 11090 LOCATE 19, 2: PRINT "DECK 3"; 11100 GOSUB 1100 11110 I = 1 11120 FOR M = 1 TO 7 11130 FOR N = M TO 7 11140 PLAYAREA(M, N) = DECK(I) 11150 I = I + 1 11160 GOSUB 11550 11170 IF N <> M THEN PRINT BACKCARD$; : GOTO 11220 11180 IF PLAYAREA(M, N) < 27 THEN COLOR RFC, RBC ELSE COLOR BFC, BBC 11190 PRINT CARD$(PLAYAREA(M, N)); 11200 COLOR LFC, 0 11210 PLAYAREA(20, N) = N 11220 NEXT 11230 NEXT 11240 FOR J = 1 TO 24 11250 SDECK(J) = DECK(28 + J) 11260 NEXT 11270 MAXSDECK = 24: SDECKPOS = 3 11400 LOCATE 21, 4 11410 IF SDECK(SDECKPOS) < 27 THEN COLOR RFC, RBC ELSE COLOR BFC, BBC 11420 PRINT CARD$(SDECK(SDECKPOS)); 11430 COLOR LFC, 0 11440 IF FIRSTTIME THEN GOSUB 11600 11450 RETURN 11497 ' 11498 ' *** Erase informational lines on the bottom of the screen. *** 11499 ' 11500 LOCATE 23, 1: PRINT SPACE$(39); 11510 LOCATE 24, 1: PRINT SPACE$(39); 11520 LOCATE 25, 1: PRINT SPACE$(39); 11530 RETURN 11547 ' 11548 ' *** Position cursor in main stacks. *** 11549 ' 11550 LOCATE 2 + M, 13 + ((N - 1) * 4) 11560 RETURN 11597 ' 11598 ' *** Program start up messages *** 11599 ' 11600 FIRSTTIME = 0: COLOR 14, 0 11604 LOCATE 12, 12: PRINT "The ESC key will cancel a "; 11606 LOCATE 13, 12: PRINT "selection or end the game. "; 11610 LOCATE 15, 12: PRINT "24 is the total cards left "; 11620 LOCATE 16, 12: PRINT "in the deck. "; 11630 LOCATE 18, 12: PRINT "3 is your position in the "; 11640 LOCATE 19, 12: PRINT "deck. "; 11650 LOCATE 21, 12: PRINT "This is the deck. "; 11660 LOCATE 23, 1: PRINT " Informational messages appear here. "; 11670 LOCATE 24, 1: PRINT " Press any key to play game "; 11680 LOCATE 25, 1: PRINT " GOOD LUCK "; 11690 COLOR LFC, 0 11700 K$ = "": WHILE K$ = "": K$ = INKEY$: WEND 11704 LOCATE 12, 12: PRINT SPACE$(27); 11706 LOCATE 13, 12: PRINT SPACE$(27); 11710 LOCATE 15, 12: PRINT SPACE$(27); 11720 LOCATE 16, 12: PRINT SPACE$(27); 11730 LOCATE 18, 12: PRINT SPACE$(27); 11740 LOCATE 19, 12: PRINT SPACE$(27); 11750 LOCATE 21, 12: PRINT SPACE$(27); 11760 GOSUB 11500 11770 RETURN 11997 ' 11998 ' *** Main cursor control routine. *** 11999 ' 12000 GOSUB 11500 12005 LOCATE 23, 5 12010 IF FIRSTCYCLE THEN PRINT "Cursor to card you wish to move"; : GOTO 12020 12015 PRINT "Cursor to stack card is to go on"; 12020 LOCATE 24, 9: PRINT "Then press "; CHR$(34); "S"; CHR$(34); " to select"; 12025 OFFSTACKS = 0 12030 GOSUB 12100: M = IM: N = IN: GOSUB 12150 12033 IF FIRSTCYCLE THEN IF ALLCARDSUP THEN GOTO 12035 ELSE GOSUB 12730: GOTO 12038 12035 WHILE PLAYAREA(M + 1, N): M = M + 1: WEND 12036 IM = M: GOSUB 11550 12038 LOCATE , , 1 12040 GOSUB 12800 12050 IF K$ < CHR$(5) THEN GOSUB 12200: GOTO 12040 12060 IF K$ = CHR$(27) THEN RETURN 12070 IF K$ = "S" THEN RETURN 12080 IF K$ = "N" AND OFFSTACKS AND FIRSTCYCLE THEN RETURN 12090 GOTO 12040 12097 ' 12098 ' *** Find top left in main stack. *** 12099 ' 12100 IN = 1: IM = 1 12105 FOR NN = 1 TO 7 12110 IF PLAYAREA(20, NN) = 0 THEN GOTO 12130 12115 IM = PLAYAREA(20, NN) 12120 IN = NN 12125 NN = 8 12130 NEXT 12135 RETURN 12147 ' 12148 ' *** Find bottom right in main stack. *** 12149 ' 12150 EN = 1: EM = 1 12155 FOR NN = 7 TO 1 STEP -1 12160 IF PLAYAREA(20, NN) = 0 THEN GOTO 12180 12165 EM = PLAYAREA(20, NN) 12170 EN = NN 12175 NN = 0 12180 NEXT 12185 WHILE PLAYAREA(EM + 1, EN) 12190 EM = EM + 1 12195 WEND 12196 RETURN 12197 ' 12198 ' *** Move cursor based on key stroke. *** 12199 ' 12200 IF FIRSTCYCLE THEN IF ALLCARDSUP THEN GOSUB 13000 ELSE GOTO 12210 ELSE GOSUB 13000 12205 RETURN 12210 IF OFFSTACKS THEN GOSUB 12700: GOSUB 11550: RETURN 12220 IF K$ = CHR$(1) THEN GOSUB 12300: GOTO 12260: ' *** Up *** 12230 IF K$ = CHR$(2) THEN GOSUB 12400: GOTO 12260: ' *** Left *** 12240 IF K$ = CHR$(3) THEN GOSUB 12500: GOTO 12260: ' *** Right *** 12250 GOSUB 12600: GOTO 12260: ' *** Down *** 12260 IF OFFSTACKS THEN RETURN ELSE GOSUB 11550: RETURN 12297 ' 12298 ' *** Move cursor up. *** 12299 ' 12300 IF M = IM AND N = IN THEN GOSUB 12730: RETURN 12305 IF M > PLAYAREA(20, N) THEN M = M - 1: RETURN 12310 FOR NN = N - 1 TO 1 STEP -1 12315 IF PLAYAREA(20, NN) = 0 THEN GOTO 12335 12320 M = PLAYAREA(20, NN) 12325 N = NN 12330 NN = 0 12335 NEXT 12340 WHILE PLAYAREA(M + 1, N) 12350 M = M + 1 12355 WEND 12360 RETURN 12397 ' 12398 ' *** Move cursor left. *** 12399 ' 12400 IF N = IN THEN GOSUB 12730: RETURN 12405 FOR NN = N - 1 TO 1 STEP -1 12410 IF PLAYAREA(20, NN) = 0 THEN GOTO 12425 12415 N = NN 12420 NN = 0 12425 NEXT 12430 GOSUB 12440 12435 RETURN 12440 IF M >= PLAYAREA(20, N) AND PLAYAREA(M, N) THEN RETURN 12445 XM = M: M = PLAYAREA(20, N) 12450 IF XM < PLAYAREA(20, N) THEN RETURN 12455 WHILE PLAYAREA(M + 1, N): M = M + 1: WEND 12460 RETURN 12497 ' 12498 ' *** Move cursor right. *** 12499 ' 12500 IF N = EN THEN GOSUB 12730: RETURN 12505 FOR NN = N + 1 TO 7 12510 IF PLAYAREA(20, NN) = 0 THEN GOTO 12525 12515 N = NN 12520 NN = 8 12525 NEXT 12535 GOSUB 12440 12540 RETURN 12597 ' 12598 ' *** Move cursor down. *** 12599 ' 12600 IF M = EM AND N = EN THEN GOSUB 12730: RETURN 12605 IF PLAYAREA(M + 1, N) THEN M = M + 1: RETURN 12610 FOR NN = N + 1 TO 7 12615 IF PLAYAREA(20, NN) = 0 THEN GOTO 12635 12620 M = PLAYAREA(20, NN) 12625 N = NN 12630 NN = 8 12635 NEXT 12640 RETURN 12697 ' 12698 ' *** First cycle move off (12700) and on (12730) deck *** 12699 ' 12700 OFFSTACKS = 0 12705 IF K$ = CHR$(3) OR K$ = CHR$(4) THEN M = IM: N = IN ELSE M = EM: N = EN 12710 LOCATE 25, 1: PRINT SPACE$(39); 12715 RETURN 12730 IF MAXSDECK = 0 THEN GOSUB 12700: GOSUB 11550: RETURN 12733 OFFSTACKS = 1 12735 LOCATE 25, 9: PRINT "Press "; CHR$(34); "N"; CHR$(34); " for next card"; 12740 LOCATE 21, 4 12745 RETURN 12797 ' 12798 ' *** Wait for key stroke. *** 12799 ' 12800 K$ = "": WHILE K$ = "": K$ = INKEY$: WEND 12810 IF LEN(K$) > 1 THEN GOTO 12880 12820 IF K$ = "S" OR K$ = "s" OR K$ = CHR$(13) THEN K$ = "S": RETURN 12830 IF K$ = "N" OR K$ = "n" THEN K$ = "N": RETURN 12840 IF K$ = CHR$(8) THEN K$ = CHR$(2): RETURN 12850 IF K$ = CHR$(9) THEN K$ = CHR$(3): RETURN 12860 IF K$ = CHR$(27) THEN RETURN 12870 GOTO 12800 12880 K$ = RIGHT$(K$, 1) 12890 IF K$ = CHR$(72) THEN K$ = CHR$(1): RETURN 12900 IF K$ = CHR$(75) OR K$ = CHR$(15) THEN K$ = CHR$(2): RETURN 12910 IF K$ = CHR$(77) THEN K$ = CHR$(3): RETURN 12920 IF K$ = CHR$(80) THEN K$ = CHR$(4): RETURN 12930 IF K$ = CHR$(81) THEN K$ = "N": RETURN 12940 GOTO 12800 12997 ' 12998 ' *** Move cursor on second cycle, and first when all cards are up 12999 ' 13000 IF K$ > CHR$(2) THEN NINC = 1 ELSE NINC = -1 13010 IF MAXHS = 0 THEN NOTKING = 1 ELSE NOTKING = HOLDSTACK(1) MOD 13 13020 XN = N: HXN = N 13025 IF OFFSTACKS THEN OFFSTACKS = 0: XN = 9: IF NINC < 0 THEN N = 8: HXN = 7 ELSE N = 0: HXN = 1 13030 GOSUB 13500 13040 IF OFFSTACKS THEN RETURN 13050 M = PLAYAREA(20, N) 13060 IF M = 0 THEN M = 1: GOSUB 11550: RETURN 13070 WHILE PLAYAREA(M + 1, N) 13080 M = M + 1 13090 WEND 13100 GOSUB 11550 13110 RETURN 13497 ' 13498 ' *** Find next column *** 13499 ' 13500 IF (NINC < 0 AND N = 1) OR (NINC > 0 AND N = 7) THEN GOSUB 13600: IF OFFSTACKS THEN RETURN ELSE IF NINC < 0 THEN N = 8 ELSE N = 0 13510 N = N + NINC 13520 IF N = XN THEN RETURN ELSE XN = HXN 13530 IF NOTKING THEN IF PLAYAREA(20, N) THEN RETURN ELSE GOTO 13500 13540 IF PLAYAREA(20, N) THEN GOTO 13500 13550 RETURN 13597 ' 13598 ' *** Determine if cursor can be moved to aces *** 13599 ' 13600 IF MAXHS <> 1 THEN RETURN 13610 AI = INT((HOLDSTACK(1) - 1) / 13) + 1 13620 IF ACES(AI) = 0 THEN IF (HOLDSTACK(1) - 1) MOD 13 <> 0 THEN RETURN ELSE GOTO 13640 13630 IF ACES(AI) + 1 <> HOLDSTACK(1) THEN RETURN 13640 OFFSTACKS = 1 13650 LOCATE (AI + 1) * 2 + 2, 4 13660 RETURN 13997 ' 13998 ' *** EXECUTE MOVE OF CARDS SELECTED *** 13999 ' 14000 CANTDO = 0 14010 IF FROMDECK THEN GOSUB 14500 ELSE GOSUB 14100 14015 IF CANTDO THEN RETURN 14020 GOSUB 10800 14030 RETURN 14097 ' 14098 ' *** Move card from main stacks *** 14099 ' 14100 IF OFFSTACKS THEN GOSUB 14900 ELSE GOSUB 14600 14110 IF CANTDO THEN RETURN 14120 N = HOLDN: M = HOLDM: COLOR 7, 0 14130 WHILE PLAYAREA(M, N) 14140 PLAYAREA(M, N) = 0 14150 GOSUB 11550 14160 PRINT " "; 14165 M = M + 1 14170 WEND 14180 IF PLAYAREA(20, N) = HOLDM THEN GOSUB 14200 14190 RETURN 14197 ' 14198 ' *** Turn card over in main stacks *** 14199 ' 14200 M = HOLDM 14210 PLAYAREA(20, N) = M - 1 14220 IF PLAYAREA(20, N) = 0 THEN RETURN 14240 M = M - 1: GOSUB 11550 14245 IF PLAYAREA(M, N) < 27 THEN COLOR RFC, RBC ELSE COLOR BFC, BBC 14250 PRINT CARD$(PLAYAREA(M, N)); 14260 RETURN 14497 ' 14498 ' *** Move card from deck *** 14499 ' 14500 IF MAXSDECK = 0 THEN BEEP: CANTDO = 1: RETURN 14505 IF OFFSTACKS THEN GOSUB 14900 ELSE GOSUB 14600 14510 IF CANTDO THEN RETURN 14520 FOR XX = SDECKPOS TO MAXSDECK - 1 14530 SDECK(XX) = SDECK(XX + 1) 14540 NEXT 14550 SDECK(MAXSDECK) = 0 14560 MAXSDECK = MAXSDECK - 1 14565 LOCATE 21, 4 14570 SDECKPOS = SDECKPOS - 1 14575 IF MAXSDECK = 0 THEN PRINT " "; : GOTO 14586 14577 IF SDECKPOS = 0 THEN IF MAXSDECK < 3 THEN SDECKPOS = MAXSDECK ELSE SDECKPOS = 3 14578 IF SDECK(SDECKPOS) < 27 THEN COLOR RFC, RBC ELSE COLOR BFC, BBC 14582 PRINT CARD$(SDECK(SDECKPOS)); 14586 COLOR LFC, 0 14588 LOCATE 16, 6: PRINT MAXSDECK; 14589 LOCATE 19, 6: PRINT SDECKPOS; 14590 RETURN 14597 ' 14598 ' *** Move card to main stacks *** 14599 ' 14600 IF PLAYAREA(M, N) THEN GOSUB 14700 ELSE GOSUB 14800 14610 RETURN 14689 ' 14697 ' 14698 ' *** Move king to open stack *** 14699 ' 14700 GOSUB 500 14710 IF CANTDO THEN RETURN 14715 M = M + 1 14720 FOR HS = 1 TO MAXHS 14730 PLAYAREA(M, N) = HOLDSTACK(HS) 14740 GOSUB 11550: IF PLAYAREA(M, N) < 27 THEN COLOR RFC, RBC ELSE COLOR BFC, BBC 14750 PRINT CARD$(PLAYAREA(M, N)); 14760 M = M + 1 14770 NEXT 14780 COLOR LFC, 0: RETURN 14800 IF HOLDSTACK(1) MOD 13 > 0 THEN BEEP: CANTDO = 1: RETURN 14810 FOR M = 1 TO MAXHS 14820 PLAYAREA(M, N) = HOLDSTACK(M) 14830 GOSUB 11550: IF PLAYAREA(M, N) < 27 THEN COLOR RFC, RBC ELSE COLOR BFC, BBC 14840 PRINT CARD$(PLAYAREA(M, N)); 14850 NEXT 14860 PLAYAREA(20, N) = 1 14870 RETURN 14897 ' 14898 ' *** Move card to aces stacks *** 14900 ACES(AI) = HOLDSTACK(1) 14910 GOSUB 13650 14920 IF (ACES(AI)) < 27 THEN COLOR RFC, RBC ELSE COLOR BFC, BBC 14930 PRINT CARD$(ACES(AI)); : COLOR LFC, 0 14940 RETURN 14997 ' 14998 ' *** Finish game when all cards are showing *** 14999 ' 15000 TOTAL = 0: T = VAL(RIGHT$(TIME$, 2)): KK$ = "" 15001 WHILE TOTAL < 4 15005 TOTAL = 0 15010 FOR AI = 1 TO 4 15020 IF ACES(AI) MOD 13 = 0 THEN TOTAL = TOTAL + 1: GOTO 15100 15030 FOR N = 1 TO 7 15040 IF PLAYAREA(1, N) = 0 THEN GOTO 15090 15050 M = 1: WHILE PLAYAREA(M + 1, N): M = M + 1: WEND 15060 IF AI <> INT((PLAYAREA(M, N) - 1) / 13) + 1 THEN GOTO 15090 15070 IF ACES(AI) = 0 THEN IF (PLAYAREA(M, N) - 1) MOD 13 = 0 THEN GOSUB 15500: GOTO 15090 ELSE GOTO 15090 15080 IF ACES(AI) + 1 = PLAYAREA(M, N) THEN GOSUB 15500 15090 NEXT 15100 NEXT 15110 WEND 15120 COLOR LFC, 0 15130 RETURN 15497 ' 15498 ' *** Edit card and move to aces if valid *** 15499 ' 15500 ACES(AI) = PLAYAREA(M, N) 15510 PLAYAREA(M, N) = 0 15520 GOSUB 11550: COLOR LFC, 0 15530 PRINT " "; 15540 GOSUB 13650 15550 IF ACES(AI) < 27 THEN COLOR RFC, RBC ELSE COLOR BFC, BBC 15560 PRINT CARD$(ACES(AI)); 15597 ' 15598 ' *** Creates 1 second delay for each card move *** 15599 ' 15600 WHILE VAL(RIGHT$(TIME$, 2)) = T AND KK$ <> CHR$(27) 15610 KK$ = INKEY$ 15620 WEND 15630 T = VAL(RIGHT$(TIME$, 2)): ' Initialized at the start of 15000 15640 RETURN 15997 ' 15998 ' *** Uncover cards in stacks and up to 9 cards of deck *** 15999 ' 16000 FOR M = 1 TO 6 16010 FOR N = M + 1 TO 7 16020 IF PLAYAREA(M, N) = 0 THEN GOTO 16060 16030 IF PLAYAREA(M, N) < 27 THEN COLOR RFC, RBC ELSE COLOR BFC, BBC 16040 GOSUB 11550 16050 PRINT CARD$(PLAYAREA(M, N)); 16060 NEXT 16070 NEXT 16080 COLOR LFC, 0 16085 IF MAXSDECK THEN GOSUB 11500 ELSE RETURN 16090 LOCATE 23, 1 16100 IF MAXSDECK > 9 THEN PRINT "First 9 cards of deck being shown now"; : Y = 9 ELSE PRINT "Cards left in deck being shown now"; : Y = MAXSDECK 16110 T = VAL(RIGHT$(TIME$, 2)): KK$ = "" 16120 FOR X = 1 TO Y 16130 LOCATE 21, X * 4 16140 IF SDECK(X) < 27 THEN COLOR RFC, RBC ELSE COLOR BFC, BBC 16150 PRINT CARD$(SDECK(X)); 16160 GOSUB 15600 16170 NEXT 16180 COLOR LFC, 0 16190 RETURN 39997 ' 39998 ' *** Check to see if user wants to play another game *** 39999 ' 40000 GOSUB 11500 40010 LOCATE 24, 5: PRINT "Press ESC to exit program - OR -"; 40020 LOCATE 25, 5: PRINT " any other key to play again"; 40030 K$ = "": WHILE K$ = "": K$ = INKEY$: WEND 40040 IF K$ = CHR$(27) THEN PLAYGAME = 0 40050 RETURN 40097 ' 40098 ' *** Check to see if user wants to end game *** 40099 ' 40100 GOSUB 11500 40110 LOCATE 24, 5: PRINT "Press ESC to exit game - OR -"; 40120 LOCATE 25, 5: PRINT " any other key to continue play"; 40130 K$ = "": WHILE K$ = "": K$ = INKEY$: WEND 40150 RETURN 40197 ' 40198 ' *** Check to see if user wants me to finish game *** 40199 ' 40200 GOSUB 11500 40210 LOCATE 23, 1: PRINT "Congratulations all cards are up. Press"; 40220 LOCATE 24, 1: PRINT "any key and I will the move cards to "; 40230 LOCATE 25, 1: PRINT "the ACES. ESC if you want the pleasure."; 40240 K$ = "": WHILE K$ = "": K$ = INKEY$: WEND 40250 IF K$ = CHR$(27) THEN IDO = 0 40260 RETURN 60000 DATA " A" 60001 DATA " 2" 60002 DATA " 3" 60003 DATA " 4" 60004 DATA " 5" 60005 DATA " 6" 60006 DATA " 7" 60007 DATA " 8" 60008 DATA " 9" 60009 DATA "10" 60010 DATA " J" 60011 DATA " Q" 60012 DATA " K" 60013 DATA " A" 60014 DATA " 2" 60015 DATA " 3" 60016 DATA " 4" 60017 DATA " 5" 60018 DATA " 6" 60019 DATA " 7" 60020 DATA " 8" 60021 DATA " 9" 60022 DATA "10" 60023 DATA " J" 60024 DATA " Q" 60025 DATA " K" 60026 DATA " A" 60027 DATA " 2" 60028 DATA " 3" 60029 DATA " 4" 60030 DATA " 5" 60031 DATA " 6" 60032 DATA " 7" 60033 DATA " 8" 60034 DATA " 9" 60035 DATA "10" 60036 DATA " J" 60037 DATA " Q" 60038 DATA " K" 60039 DATA " A" 60040 DATA " 2" 60041 DATA " 3" 60042 DATA " 4" 60043 DATA " 5" 60044 DATA " 6" 60045 DATA " 7" 60046 DATA " 8" 60047 DATA " 9" 60048 DATA "10" 60049 DATA " J" 60050 DATA " Q" 60051 DATA " K"