10 REM CARD GAME 20 REM BY DONNA K. WOODY 25 PRINTCHR$(147):S=54272:POKES+24,8:POKES+6,0:POKES+1,255:POKES+4,8 30 POKE783,PEEK(783)AND254:POKE53281,1:REM CLEAR PLOT FLAG 40 GOSUB4999:REM INITIALIZE DECK 50 GOSUB6000:REM TITLE PAGE 60 GOSUB5300:REM SHUFFLE DECK 70 GOSUB5400:REM PRINT OUT MOVEMENT INFO 80 PRINTCHR$(19):REM HOME BUT DON'T CLEAR 90 H=0:V=2:Z=0:PI=0:CO=0:QQ=0:FORX=1TO8:PA$(X)="":NEXT 94 T=1:REM PRINT OUT NUMBERS FOR PILES 95 FORX=1TO8:PRINTTAB(T);X; 96 T=T+5 97 NEXT 100 FORCO=1TO52:REM DEAL CARDS 104 PI=PI+1:IFPI>8THENPI=8:GOTO260 105 QQ=52-CO:Q=23:W=25-(LEN(STR$(QQ))-1) 106 Q$=" "+RIGHT$(STR$(QQ),LEN(STR$(QQ))-1):GOSUB200 107 REM LINE 105 & 106 PRINTS # OF CARDS LEFT IN DECK 108 PA$(PI)=D$(CO) 110 Q=V:W=H:Q$=CA$:GOSUB200:REM PRINT CARD 120 Q=V+1:W=H+1:Q$=PA$(PI):GOSUB200:GOSUB340:REM PRINT RANK 122 Q=V+5:W=11:Q$=WA$:GOSUB200:REM GET CHOICE 123 GOSUB500:IFK>0THENK=O:GOTO600:REM CK TO SEE IF VALID MOVES IF NOT QUIT 124 GOSUB220:REM GET KEY PRESS 125 IF(A$=CHR$(34)ORA$=CHR$(19)ORA$=CHR$(147))THEN124 126 Q=V+5:W=27:Q$=A$:GOSUB200:REM PRINT KEYPRESS 127 IFA$="N"THEN145:REM GET NEXT CARD 128 IFA$="E"THENGOSUB900:REM END GAME 130 IFASC(A$)>48ANDASC(A$)<58THEN1000:REM IF NUMBER PICKUP CARD 140 GOTO124 145 H=H+5 146 IFCO=53THEN122 170 NEXTCO:REM DEAL NEXT CARD 175 GOSUB500:IFK>0THENK=O:GOTO600:REM CK TO SEE IF VALID MOVES IF NOT QUIT 180 IFPI=1ANDCO=0THEN300:REM YOU WON 181 GOTO122 198 : 199 REN *** PRINT CARD *** 200 POKE781,Q:POKE782,W:SYS65520:PRINTQ$; 210 RETURN 218 : 219 REM *** GET CHARACTER FROM KEYBOARD *** 220 A$="":POKE198,0:WAIT198,1:GETA$ 230 RETURN 240 : 250 REM *** TRY TO HAVE MORE THAN 8 PILES *** 260 Q=16:W=0:Q$="YOU ARE LIMITED TO 8 PILES. ":GOSUB200 270 Q=18:W=0:Q$="PLAY ON THE PILES YOU ALREADY HAVE.":GOSUB200:GOTO122 298 : 299 REM *** YOU WON *** 300 PRINTCHR$(147) 310 FORX=1TO100:PRINT"*** YOU WON!!![160]***";:NEXT 320 GOTO950 329 : 330 REM *** SOUND EFFECTS *** 340 POKES+24,6:POKES+5,128:POKES+4,129:FORI=1TO50:NEXT:POKES+4,128:POKES+5,. 350 POKES+24,.:POKES+24,15:POKES+4,129:POKES+4,128:RETURN 398 : 399 REM *** YOU LOST *** 400 Q=12:W=0:Q$="THAT'S TOO BAD. ":GOSUB200 410 Q=14:W=0:Q$="YOU LOST THIS GAME. ":GOSUB200 415 PRINT:PRINT:PRINT" [145][145][145]" 420 IFPI>1THENPRINT:PRINT:PRINT"YOU HAD "PI" PILES LEFT. ":GOTO430 425 PRINT:PRINT:PRINT" " 430 GOTO950 498 : 499 REM *** CHECK TO SEE IF YOU CAN MOVE *** 500 IFPA$(8)=""THENK=O:RETURN 505 K=0 510 FOR LC = 1 TO 4 520 IF RIGHT$(PA$(LC),1)=RIGHT$(PA$(LC+4),1) THEN K=K+1:REM CHECK SUIT 530 NEXT 540 IF K <4 THENK=0:RETURN 550 FOR PC=1TO7 560 FORLC = PC+1 TO PC+3 570 IF MID$(PA$(PC),2,1)=MID$(PA$(LC),2,1) THEN K=0 :PC=5:LC=PC+3 575 NEXT 580 NEXT 590 RETURN 598 : 599 REM *** NO VALID MOVES - END? *** 600 Q=16:W=0:Q$="THERE ARE NO LEGAL PLAYS LEFT.":GOSUB200 610 Q=18:W=0:Q$="PRESS SPACE BAR TO CONTINUE. ":GOSUB200:GOSUB220 620 GOTO410:REM PRINT OUT SCORE 698 : 699 REM *** INVALID MOVE *** 700 Q=16:W=0:Q$="YOU CAN ONLY MOVE TO AN ADJACENT PILE ":GOSUB200 710 Q=18:W=0:Q$="OR JUMP ONE OR TWO PILES. ":GOSUB200 720 GOTO1170 898 : 899 REM *** END GAME OR ANOTHER *** 900 Q=16:W=0:Q$="DO YOU WANT TO END THIS GAME (Y/N)? ":GOSUB200 910 Q=18:W=0:Q$=" ":GOSUB200 920 GOSUB220:IFA$="Y"THEN 400 930 IFA$="N"THENQ=16:W=0:Q$=" ":GOSUB200:RETURN 940 GOTO920 950 Q=18:W=0:Q$="DO YOU WANT TO PLAY AGAIN (Y/N)? ":GOSUB200 960 GOSUB220:IFA$="Y"THENGOTO60 970 IFA$="N"THEN 990 980 GOTO960 990 PRINT"[147]LOAD"CHR$(34)"PAYLOAD"CHR$(34)",8":PRINT"RUN" 992 POKE631,13:POKE632,13:POKE198,2:END 998 : 999 REM *** PICK UP CARD *** 1000 A=VAL(A$):REM 'A' IS CARD TO PICK UP 1005 IFA=1THEN124 1020 IFA<=PITHEN1050:REM CHECK FOR VALID PILE 1030 GOTO124:REM NOT VALID PILE 1039 : 1040 REM *** BLANK OUT CARD *** 1050 H1=5*(A-1):REM HORIZONTAL LOCATION 1060 Q=V:W=H1:Q$=BA$:GOSUB200 1070 : 1080 REM *** DROP CARD *** 1090 Q=V+5:W=11:Q$=WC$:GOSUB200:REM DROP WHERE 1100 GOSUB220:Q=V+5:W=30:Q$=A$:GOSUB200:REM PRINT KEYPRESS 1105 B=VAL(A$):REM B IS WHERE TO DROP CARD 1110 IFB<=PITHEN1122:REM CHECK FOR VALID PILE 1120 GOTO1090:REM NOT VALID PILE 1122 LZ=A-B:IFLZ<1THEN700:REM NOT VALID MOVE 1123 IFLZ>3THEN700:REM NOT VALID MOVE 1129 : 1130 REM *** DOES SUIT OR RANK MATCH *** 1140 IFRIGHT$(PA$(A),1)=RIGHT$(PA$(B),1)THEN1205:REM SUIT MATCH 1150 IFMID$(PA$(A),2,1)=MID$(PA$(B),2,1)THEN1205:REM RANK MATCH 1159 : 1160 REM *** ILLEGAL PLAY *** 1170 Q=V:W=H1:Q$=BL$:GOSUB200:REM WHITE OUT BACKGROUND 1180 Q=V+1:W=H1+1:Q$=PA$(A):GOSUB200:REM PRINT RANK 1190 GOTO122:REM GO BACK TO GET ANOTHER CHOICE 1199 : 1200 REM *** LEGAL PLAY DROP CARD *** 1205 H2=5*(B-1):REM HORIZONTAL LOCATION 1210 Q=V+1:W=H2+1:IFLEN(PA$(A))=4THENQ$=PA$(A):GOSUB200:GOSUB340:GOTO1240 1220 Q$=PA$(A)+" ":GOSUB200:GOSUB340:REM PRINT SUIT 1229 : 1230 REM *** ERASE PICKED UP CARD *** 1240 Q=V:W=H1:Q$=ER$:GOSUB200:REM ERASE CARD 1242 PA$(B)=PA$(A):PA$(A)="":REM ERASE VALUE FOR CARD 1249 : 1250 REM *** WAS 'A' LAST CARD IN LINE *** 1260 IFA=PITHENPI=PI-1:Z=Z-1:H=H-5:GOTO122:REM NO BLANK SPACES 1269 : 1270 REM *** FILL IN BLANK SPACES *** 1280 FORE=B+1TOPI-1:REM FROM CARD MOVED +1TO LAST PILE 1290 IFPA$(E)<>""THEN 1370 1300 PA$(E)=PA$(E+1):REM MOVE CARD DOWN 1310 H=5*(E-1):REM HORIZONTAL LOCATION FOR CARD 1320 Q=V:W=H:Q$=CA$:GOSUB200:REM PRINT CARD 1330 Q=V+1:W=H+1:Q$=PA$(E):GOSUB200:GOSUB340:REM PRINT RANK 1340 H=H+5:REM ERASE E+1 CARD LOCATION 1350 Q=V:W=H:Q$=ER$:GOSUB200:REM ERASE CARD 1360 PA$(E+1)="" 1370 NEXTE 1379 : 1380 REM *** RETURN TO GET ANOTHER CHOICE 1390 H=H-5:PI=PI-1:Z=Z-1:GOTO122 4996 : 4997 REM *** SET UP CARD ARRAYS *** 4999 DIMD$(52),PA$(24) 5000 FORX=1TO13:X$=STR$(X):D$(X)=RIGHT$(X$,LEN(X$)-1):NEXT 5010 FORX=14TO26:X$=STR$(X-13):D$(X)=RIGHT$(X$,LEN(X$)-1):NEXT 5020 FORX=27TO39:X$=STR$(X-26):D$(X)=RIGHT$(X$,LEN(X$)-1):NEXT 5030 FORX=40TO52:X$=STR$(X-39):D$(X)=RIGHT$(X$,LEN(X$)-1):NEXT 5040 D$(1)="A":D$(11)="J":D$(12)="Q":D$(13)="K":D$(24)="J":D$(25)="Q":D$(26)="K" 5050 D$(37)="J":D$(38)="Q":D$(39)="K":D$(50)="J":D$(51)="Q":D$(52)="K" 5060 D$(14)="A":D$(27)="A":D$(40)="A" 5070 FORX=1TO13:D$(X)=""+D$(X)+"[211]":NEXT 5080 FORX=14TO26:D$(X)="[144]"+D$(X)+"[193]":NEXT 5090 FORX=27TO39:D$(X)=""+D$(X)+"[218]":NEXT 5100 FORX=40TO52:D$(X)="[144]"+D$(X)+"[216]":NEXT 5198 : 5199 REM *** CARD SHAPE *** 5200 CA$="[144][176][195][195][195][174][157][157][157][157][157][194] [194][157][157][157][157][157][194] [194][157][157][157][157][157][194] [194][157][157][157][157][157][173][195][195][195][189]" 5210 BA$="[159][166][166][166][157][157][157][157][157][166][166][166][157][157][157][157][157][166][166][166][157][157][157][157][157]" 5220 BL$=" [157][157][157][157][157] [157][157][157][157][157] [157][157][157][157][157][146]" 5230 ER$="[146] [157][157][157][157][157] [157][157][157][157][157] [157][157][157][157][157] [157][157][157][157][157] [146]" 5240 WA$="[144]WHICH (1-8,E,N)? [157][157][157][157][157]" 5250 WC$="[144]DROP ON WHICH PILE?[160]" 5290 RETURN 5298 : 5299 REM *** SHUFFLE DECK *** 5300 PRINTCHR$(147):Q=22:W=13:Q$="SHUFFLING DECK":GOSUB200 5310 FORCO=1TO52:REM RND DECK & PRINT * WHILE WAITING 5320 C%=(RND(Q9)*52)+1 5330 T$=D$(CO):D$(CO)=D$(C%):D$(C%)=T$:REM INTERCHANGE CARDS - SHUFFLE 5340 A%=(RND(Q9)*20)+1:B%=(RND(Q9)*39)+1:REM RND POINTS FOR STAR 5350 POKE781,A%:POKE782,B%:SYS65520:PRINT"*" 5360 NEXT 5370 RETURN 5398 : 5399 REM *** PRINT OUT MOVEMENT INFO *** 5400 PRINTCHR$(147):REM CLEAR HOME 5410 POKE781,22:POKE782,0:SYS65520 5420 PRINT"[144]<1-8> - PICK UP CARD - NEXT CARD" 5430 PRINT"[144] - EXIT GAME - CARDS LEFT" 5440 RETURN 5998 : 5999 REM *** TITLE PAGE *** 6000 PRINTCHR$(147);CHR$(142);CHR$(8):REM CLEAR HOME 6010 FORX=1TO30:REM PRINT CARDS FOR TITLE PAGE 6020 H%=(RND(1)*34)+1:REM RND HORIZONTAL POSITION 6030 V%=(RND(1)*15)+1:REM RND VERTICAL POSITION 6040 C%=(RND(1)*52)+1:REM RND CARD 6050 Q=V%:W=H%:Q$=CA$:GOSUB200:REM PRINT CARD 6060 Q=V%+1:W=H%+1:Q$=D$(C%):GOSUB200:GOSUB340:REM PRINT RANK 6070 NEXT 6080 Q=6:W=15:Q$=" [146]":GOSUB200:REM PRINT RED SPACES FOR TITLE 6090 Q=7:W=15:Q$=" SOLITAIRE [146]":GOSUB200:REM PRINT TITLE 6100 Q=8:W=15:Q$=" [146]":GOSUB200:REM PRINT RED SPACES FOR TITLE 6110 Q=11:W=18:Q$=" [146]":GOSUB200:REM PRINT RED SPACES 6120 Q=12:W=18:Q$=" BY [146]":GOSUB200:REM PRINT TITLE 6130 Q=13:W=18:Q$=" [146]":GOSUB200:REM PRINT RED SPACES 6140 Q=17:W=12:Q$=" [146]":GOSUB200:REM PRINT RED SPACES 6150 Q=18:W=12:Q$=" DONNA K. WOODY [146]":GOSUB200:REM PRINT AUTHOR 6160 Q=19:W=12:Q$=" [146]":GOSUB200:REM PRINT RED SPACES 6170 POKE781,23:POKE782,4:SYS65520:PRINT"[144]DO YOU NEED INSTRUCTIONS (Y/N)? "; 6180 GOSUB220 6190 IFA$="Y"THEN6220 6200 IFA$="N"THENRETURN 6210 GOTO6170 6215 REM 147-CLEAR HOME: 14-UPPER/LOWER CASE: 8-DISABLES C/SHIFT KEY 6220 PRINTCHR$(147);CHR$(14);CHR$(8);TAB(14)"[201][206][211][212][210][213][195][212][201][207][206][211]":PRINT 6230 PRINT" [212]HIS SOLITAIRE GAME IS PLAYED WITH A":PRINT 6240 PRINT"STANDARD DECK OF 52 CARDS.":PRINT 6250 PRINT" [212]HE COMPUTER WILL DEAL CARDS ONE AT A":PRINT 6260 PRINT"TIME. [212]HE OBJECT OF THE GAME IS TO GET":PRINT 6270 PRINT"ALL THE CARDS IN ONE PILE. [195]ARDS ARE":PRINT 6280 PRINT"PLAYED IN THE FOLLOWING MANNER:":PRINT 6290 PRINT" [195]ARDS OF THE SAME SUIT REGARDLESS" 6300 PRINT" OF RANK.":PRINT 6310 PRINT" [195]ARDS OF THE SAME RANK REGARDLESS" 6320 PRINT" OF SUIT.":PRINT 6324 POKE781,23:POKE782,4:SYS65520:PRINT"[208]RESS [211][208][193][195][197] [194][193][210] TO CONTINUE."; 6325 GOSUB220:PRINTCHR$(147):REM GET KEY & HOME 6330 PRINT"[198]OR EXAMPLE: [193] KING OF CLUBS CAN BE":PRINT 6340 PRINT"PLAYED ON ANY OTHER CLUB, A KING OF":PRINT 6350 PRINT"DIAMONDS, A KING OF HEARTS, OR A KING OF" 6360 PRINT"SPADES.":PRINT 6370 PRINT" [201]F THE TOP CARD OF ONE PILE MATCHES":PRINT 6380 PRINT"THE TOP CARD OF ANOTHER PILE, THEN THE":PRINT 6390 PRINT"ENTIRE PILE IS MOVED. [208]ILES CAN BE":PRINT 6400 PRINT"MOVED TO AN ADJACENT PILE, OVER ONE":PRINT 6410 PRINT"PILE, OR OVER TWO PILES. [198]OR EXAMPLE,":PRINT 6420 PRINT"IF THE FIRST PILE HAS A KING OF CLUBS,":PRINT 6424 POKE781,23:POKE782,4:SYS65520:PRINT"[208]RESS [211][208][193][195][197] [194][193][210] TO CONTINUE."; 6425 GOSUB220:PRINTCHR$(147):REM GET KEY AND HOME 6430 PRINT"THE SECOND A QUEEN OF SPADES, THE THIRD":PRINT 6440 PRINT"A 2 OF HEARTS, AND THE FOURTH A KING OF":PRINT 6450 PRINT"SPADES, THE PILE WITH THE KING OF":PRINT 6460 PRINT"SPADES COULD JUMP TO THE PILE WITH THE":PRINT 6470 PRINT"QUEEN OF SPADES. [212]HEN THE KING OF":PRINT 6480 PRINT"SPADES COULD BE PUT ON THE KING OF":PRINT 6490 PRINT"CLUBS. [198]ROM 4 PILES DOWN TO TWO PILES.":PRINT 6493 PRINT" [217]OU MAY EXIT THE PROGRAM AT ANY TIME.":PRINT 6494 PRINT"[212]HE COMPUTER CHECKS FOR VALID MOVES AND":PRINT 6495 PRINT"WILL END THE GAME IF YOU ARE BLOCKED." 6496 POKE781,23:POKE782,4:SYS65520:PRINT"[208]RESS [211][208][193][195][197] [194][193][210] TO CONTINUE."; 6497 GOSUB220:PRINTCHR$(147):REM GET KEY & HOME 6500 PRINTCHR$(9);CHR$(142);CHR$(8):RETURN 6505 REM 9-ENABLES C/SHIFT: 142-SET UPPER CASE/GRAPHICS: 8 DISABLES C/SHIFT 6998 : 6999 REM *** VARIABLES USED *** 7000 REM H=HORIZONTAL POSITION (ROW) 7010 REM V=VERTICAL POSITION (COL.) 7020 REM PI=CARD PILE 7030 REM Z=NUMBER OF PILES IN ROW 7040 REM CO=COUNTER FOR DECK 7050 REM A=PILE TO PICK CARD UP FROM 7060 REM B=WHERE TO DROP CARD 7070 REM A$=TEMP HOLDING STRING FOR INPUT 7080 REM Q=HORIZONTAL POSITION (ROW) IN SUBROUTINE 7090 REM W=VERTICAL POSITION (COL.) IN SUBROUTINE 7100 REM Q$=WHAT KIND OF CARD OR RANK TO PRINT IN SUBROUTINE 7110 REM D=COUNTER IN LOOP 7120 REM H1=ROW POSITION OF CARD PICKED UP 7130 REM H2=ROW POSITION OF WHERE TO DROP CARD 7140 REM WA$,WB$,WC$=MESSAGE PROMPTS 7150 REM WA$,WB$,WC$=MESSAGE PROMPTS 7160 REM PA$()=TOP CARD OF PILE 7170 REM D$()=DECK OF CARDS 7180 REM E=COUNTER