home *** CD-ROM | disk | FTP | other *** search
- 0 X=RND(-TI)
- 10 DIMST(7),ST$(7,12),PL(7),PL$(7,6),F$(4),D$(24),N$(52),CS$(12):POKE53269,0
- 20 GOSUB10000:GOSUB11000:GOSUB12000:GOSUB13000:GOSUB14000:GOSUB15000:GOSUB16000
- 30 GOSUB17000:POKEV+21,4:GOSUB1500
- 40 GOTO6000
- 100 REM THIS IS THE MAIN GAME PLAYING ROUTINE
- 105 CT=0:FORI=1TO7:CT=CT+ST(I):NEXTI:IFCT=0THENIFN=52THEN20000
- 110 GETI$:GOSUB500:IFI$=""THEN110
- 120 IFI$="R"THEN1000
- 130 IFI$="L"THEN2000
- 140 IFI$="P"THEN3000
- 150 IFI$="D"THEN4000
- 160 IFI$="F"THEN5000
- 170 IFI$="N"THEN6000
- 180 IFI$="E"THEN7000
- 190 IFI$=CHR$(133)THENGOSUB16500
- 195 IFI$=CHR$(134)THENGOSUB16300
- 200 GOTO100
- 500 REM THIS ROUTINE IS USED TO READ THE JOYSTICK
- 510 JS=127-PEEK(56320)
- 520 IFJS=0THENGOTO599
- 530 IFJS=1THENI$="D":GOTO590
- 540 IFJS=8THENI$="R":GOTO590
- 550 IFJS=2THENI$="P":GOTO590
- 560 IFJS=4THENI$="L":GOTO590
- 570 IFJS=18THENI$="N":GOTO590
- 580 IFJS=17THENI$="F":GOTO590
- 590 FORA=1TO50:NEXTA
- 599 RETURN
- 1000 REM THIS ROUTINE MOVES THE SPRITE TO THE RIGHT
- 1010 IFSC>7THEN100
- 1020 SC=SC+1:GOSUB1500:GOTO100
- 1500 REM MOVE SPRITE(S)
- 1510 IFSC<7THENPOKEV+16,0:POKEV+4,(SC-1)*40+22:POKEV+5,SY:GOTO1599
- 1520 IFSC=7THENPOKEV+21,4:POKEV+16,5:POKEV+4,7:POKEV+5,SY:GOTO1599
- 1530 POKEV+21,1
- 1599 RETURN
- 2000 REM THIS ROUTINE MOVES THE SPRITE TO THE LEFT
- 2010 IFSC<2THEN100
- 2020 SC=SC-1:GOSUB1500:GOTO100
- 3000 REM THIS ROUTINE PICKS UP CARD(S)
- 3010 IFH=1THENE$="YOU HAVE CARDS IN YOUR HAND":GOTO9000
- 3050 IFSC<8THEN3100
- 3060 IFD<1THENE$="THERE ARE NO CARDS TO PICK UP":GOTO9000
- 3070 CS$(1)=D$(D):CS=1:D=D-1:GOSUB3500:FR=SC:GOTO3199
- 3100 IFST(SC)<1THENE$="THERE ARE NO CARDS TO PICK UP":GOTO9000
- 3110 FORX=1TOST(SC):CS$(X)=ST$(SC,X):NEXTX
- 3120 CS=ST(SC)
- 3130 GOSUB3600:ST(SC)=0:FR=SC:GOTO3199
- 3199 H=1:GOTO100
- 3500 REM THIS ROUTINE PRINTS THE BACK OF A CARD AT THE BOTTOM OF THE SCREEN
- 3510 PRINTCHR$(19);:FORX=1TO21:PRINTCHR$(13);:NEXTX
- 3520 PRINTCHR$(156);:FORX=1TO3:PRINTTAB(35)"[166][166][166][166]";CHR$(13);:NEXTX
- 3530 Y=2018:Z=56290:Y1=102:Z1=4
- 3540 FORX=1TO4:POKEY+X,Y1:POKEZ+X,Z1:NEXTX:PRINTCHR$(19);
- 3599 RETURN
- 3600 REM PRINT BACK OF CARD ON STACK
- 3610 PRINTCHR$(31);CHR$(19);:K=ST(SC)+3:FORX=1TOK:PRINTCHR$(13);:NEXTX
- 3620 FORX=1TOK
- 3630 PRINTTAB((SC-1)*5)CHR$(18);" ";CHR$(13);CHR$(145);:PRINTCHR$(145);
- 3640 NEXTX
- 3670 PRINTCHR$(146);CHR$(156);
- 3675 IFPL(SC)=0THEN3699
- 3680 FORX=1TO4:PRINTCHR$(13);TAB((SC-1)*5)"[166][166][166][166]";:NEXTX
- 3699 RETURN
- 4000 REM DROP STACK OF CARDS IN YOUR HAND
- 4010 REM ERROR CHECKING
- 4050 IFSC<8THEN4100
- 4060 IFCS$(1)=" "THENE$="YOU ARE NOT HOLDING ANY CARDS":GOTO9000
- 4065 IFFR<8THENE$="YOU CAN NOT DROP THESE CARDS HERE.":GOTO9000
- 4070 D=D+1:D$(D)=CS$(1):GOSUB6500:GOTO4999
- 4100 IFCS<1THENE$="YOU ARE NOT HOLDING ANY CARDS":GOTO9000
- 4101 IFST(SC)=0THEN4111
- 4102 SU$=CS$(1):GOSUB5500:GOSUB5600:DS=DE:SS=SU
- 4104 SU$=ST$(SC,ST(SC)):GOSUB5500:GOSUB5600
- 4106 IFDE<>DS+1THENE$="YOU CAN'T PLAY THAT CARD HERE":GOTO9000
- 4107 IFSS=1ORSS=3THENSS=SS+1
- 4108 IFSU=1ORSU=3THENSU=SU+1
- 4109 IFSS=SUTHENE$="YOU CAN'T PLAY THAT COLOR HERE":GOTO9000
- 4110 GOTO4115
- 4111 IFSC=FRTHEN4115
- 4112 IFLEFT$(CS$(1),1)<>"K"THENE$="YOU CAN ONLY PUT A KING HERE":GOTO9000
- 4115 FORX=1TOCS:ST(SC)=ST(SC)+1:ST$(SC,ST(SC))=CS$(X):NEXTX
- 4120 X=SC:GOSUB18000:IFSC=FRTHEN4999
- 4123 IFFR>7THEN4150
- 4125 IFPL(FR)>0THEN4130
- 4126 IFPL(FR)=0THENPRINTCHR$(19);CHR$(13);CHR$(31);:FORX=1TO4
- 4127 PRINTTAB((FR-1)*5)S3$;CHR$(13);:NEXTX:FR=0:GOTO4999
- 4130 ST(FR)=1:ST$(FR,ST(FR))=PL$(FR,PL(FR)):PL(FR)=PL(FR)-1:X=FR:GOSUB18000
- 4140 GOTO4999
- 4150 IFD>0THENGOSUB6500:GOTO4999
- 4160 PRINTCHR$(19);:FORX=1TO21:PRINTCHR$(13);:NEXTX
- 4170 FORX=1TO3:PRINTTAB(35)" ";CHR$(13);:NEXTX
- 4180 Y=2018:Z=56290:Y1=32:Z1=1
- 4190 FORX=1TO4:POKEY+X,Y1:POKEZ+X,Z1:NEXTX:PRINTCHR$(19);:GOTO4999
- 4999 H=0:CS=0:CS$(1)=" ":GOTO100
- 5000 REM FOUNDATION ROUTINE
- 5010 IFH=1THENE$="YOU HAVE CARDS IN YOUR HAND":GOTO9000
- 5020 IFSC<8THEN5050
- 5030 IFD<1THENE$="THERE IS NO CARD TO FOUNDATION":GOTO9000
- 5040 SU$=D$(D):GOSUB5500:GOSUB5600:DS=DE:GOTO5100
- 5050 IFST(SC)<1THENE$="THERE IS NO CARD TO FOUNDATION":GOTO9000
- 5060 SU$=ST$(SC,ST(SC)):GOSUB5500:GOSUB5600:DS=DE
- 5100 SU$=F$(SU):GOSUB5600
- 5110 IFDE<>DS-1THENE$="YOU CAN'T FOUNDATION THIS CARD":GOTO9000
- 5120 IFSC<8THENF$(SU)=ST$(SC,ST(SC)):GOTO5140
- 5130 F$(SU)=D$(D)
- 5140 S1$=CO$(VAL(RIGHT$(F$(SU),1)))+CHR$(18)+CHR$(32)
- 5145 PRINTCHR$(19);
- 5150 PRINTCHR$(13);:IFSU>1THENFORX=1TO(SU-1)*5:PRINTCHR$(13);:NEXTX
- 5160 PRINTTAB(35)S1$;LEFT$(F$(SU),2);S2$;CHR$(13);
- 5170 FORZ=1TO3:PRINTTAB(35)S3$;CHR$(13);:NEXTZ:PRINTCHR$(19);
- 5180 IFSC<8THEN5250
- 5190 D=D-1:IFD>0THENGOSUB6500:GOTO100
- 5200 FORX=1TO21:PRINTCHR$(13);:NEXTX
- 5210 FORX=1TO3:PRINTTAB(35)" ";CHR$(13);:NEXTX
- 5220 Y=2018:Z=56290:Y1=32:Z1=1
- 5230 FORX=1TO4:POKEY+X,Y1:POKEZ+X,Z1:NEXTX:PRINTCHR$(19);:GOTO100
- 5250 ST(SC)=ST(SC)-1:IFST(SC)>0THEN5400
- 5260 IFPL(SC)>0THEN5300
- 5265 PRINTCHR$(19);CHR$(13);CHR$(31);
- 5270 FORX=1TO4:PRINTTAB((SC-1)*5);S3$;CHR$(13);:NEXTX
- 5280 GOTO100
- 5300 ST(SC)=1:ST$(SC,1)=PL$(SC,PL(SC)):PL(SC)=PL(SC)-1
- 5310 X=SC:GOSUB18000:GOTO100
- 5400 IFSU>2THENPRINTCHR$(144);
- 5410 IFSU<3THENPRINTCHR$(28);
- 5420 FORX=1TOST(SC)+1:PRINTCHR$(13);:NEXTX
- 5430 FORX=1TO3:PRINTTAB((SC-1)*5)S3$;CHR$(13);:NEXTX
- 5440 PRINTCHR$(31);TAB((SC-1)*5)S3$;CHR$(19);:GOTO100
- 5500 REM CONVERT SUIT TO A NUMBER
- 5510 SU=1:IFMID$(SU$,2,1)="[216]"THENSU=2
- 5520 IFMID$(SU$,2,1)="[211]"THENSU=3
- 5530 IFMID$(SU$,2,1)="[218]"THENSU=4
- 5599 RETURN
- 5600 REM CONVERT DENOMINATION TO A NUMBER
- 5610 DE=VAL(LEFT$(SU$,1)):IFDE>0THEN5699
- 5615 IFLEFT$(SU$,1)="A"THENDE=1
- 5620 IFLEFT$(SU$,1)="T"THENDE=10
- 5630 IFLEFT$(SU$,1)="J"THENDE=11
- 5640 IFLEFT$(SU$,1)="Q"THENDE=12
- 5650 IFLEFT$(SU$,1)="K"THENDE=13
- 5699 RETURN
- 6000 REM DEAL NEXT CARD
- 6005 IFH=1THENE$="YOU HAVE CARDS IN YOUR HAND":GOTO9000
- 6010 IFN=52THENE$="THERE ARE NO MORE CARDS LEFT.":GOTO9000
- 6020 D=D+1:N=N+1:D$(D)=N$(N)
- 6030 GOSUB6500:GOTO100
- 6500 REM PRINT LATEST DISCARD
- 6510 PRINTCHR$(19);:FORX=1TO21:PRINTCHR$(13);:NEXTX
- 6520 S1$=CO$(VAL(RIGHT$(D$(D),1)))+CHR$(18)+CHR$(32)
- 6530 PRINTTAB(35)S1$;LEFT$(D$(D),2);S2$;CHR$(13);
- 6540 FORZ=1TO2:PRINTTAB(35)S3$;CHR$(13);:NEXTZ
- 6550 Y=2018:Z=56290:Y1=160:Z1=0:IFRIGHT$(D$(D),1)="1"THENZ1=2
- 6560 FORX=1TO4:POKEY+X,Y1:POKEZ+X,Z1:NEXTX:PRINTCHR$(19);
- 6599 RETURN
- 7000 REM THIS ROUTINE ALLOWS THE OPTION OF NEW GAME OR CONTINUATION
- 7010 PRINTCHR$(19);:FORX=1TO19:PRINTCHR$(13);:NEXTX
- 7020 PRINTCHR$(18);CHR$(31);"NEW GAME - (Y/N/C)?";CHR$(13);
- 7030 GETA$:IFA$=""THEN7030
- 7040 IFA$="Y"THENRUN
- 7045 IFA$="N"THEN20120
- 7050 PRINTCHR$(13);CHR$(145);CHR$(145);
- 7060 C$=" ":C$=C$+C$+C$+C$+" "
- 7070 PRINTCHR$(18);C$;CHR$(13);:PRINTCHR$(18);C$;
- 7080 GOTO100
- 9000 REM DISPLAY ERROR MESSAGES ON SCREEN
- 9010 PRINTCHR$(19);:FORX=1TO19:PRINTCHR$(13);:NEXTX
- 9020 PRINTCHR$(18);CHR$(31);E$;CHR$(13);
- 9030 PRINTCHR$(18);"PRESS ANY KEY TO CONTINUE";
- 9040 GETA$:IFA$<>""THEN9050
- 9045 IF127-PEEK(56320)<>16THEN9040
- 9050 PRINTCHR$(13);CHR$(145);CHR$(145);
- 9060 C$=" ":C$=C$+C$+C$+C$+" "
- 9070 PRINTCHR$(18);C$;CHR$(13);:PRINTCHR$(18);C$;
- 9080 GOTO100
- 10000 REM THIS ROUTINE DRAWS THE COVER SCREEN
- 10010 PRINTCHR$(147);:POKE53281,10:POKE53280,2
- 10020 FORX=1TO8:PRINTCHR$(13);:NEXTX
- 10030 PRINTTAB(11)CHR$(144);"S O L I T A I R E"
- 10040 PRINTCHR$(13):PRINTCHR$(13)
- 10050 PRINTTAB(18)CHR$(28);"BY";CHR$(13)
- 10060 PRINTTAB(10)"DONNA AND SAM SHUPE"
- 10070 FORX=1TO200:NEXTX
- 10999 RETURN
- 11000 REM THIS ROUTINE INITIALIZES THE ORIGINAL DECK OF CARDS
- 11010 Y=0:S$="[218]":C$="1":GOSUB11100:RESTORE
- 11020 Y=1:S$="[211]":GOSUB11100:RESTORE
- 11030 Y=2:S$="[193]":C$="2":GOSUB11100:RESTORE
- 11040 Y=3:S$="[216]":GOSUB11100
- 11050 GOTO11999
- 11100 FORX=1TO13:READN1$:N$(X+Y*13)=N1$+S$+C$:NEXT:RETURN
- 11110 DATA A,2,3,4,5,6,7,8,9,T,J,Q,K
- 11999 RETURN
- 12000 REM THIS ROUTINE SHUFFLES THE CARDS 2 TIMES
- 12010 FORN=1TO52:Y=INT(RND(1)*52)+1
- 12020 N1$=N$(N):N$(N)=N$(Y):N$(Y)=N1$
- 12030 NEXTN
- 12040 FORN=1TO52:Y=INT(RND(1)*52)+1
- 12050 N1$=N$(N):N$(N)=N$(Y):N$(Y)=N1$
- 12060 NEXTN
- 12999 RETURN
- 13000 REM THIS ROUTINE INITIALIZES THE SPRITE POINTER
- 13010 V=53248:POKE2042,13:POKE2040,14
- 13020 FORN=0TO62:READQ:POKE832+N,Q:NEXT
- 13030 POKEV+41,7
- 13100 DATA 0,7,224,0,7,224,0,7,224,0,7,224,0,7,224,0,7,224
- 13110 DATA 0,63,250,0,63,250,0,63,250,0,63,250,0,63,250,0,63,250
- 13120 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- 13130 DATA 0,0,0,0,0,0,0,0,0
- 13220 FORN=0TO62:READQ:POKE896+N,Q:NEXT
- 13230 POKEV+39,7
- 13300 DATA 0,15,192,0,15,192,0,15,192,0,15,255,0,15,255,0,15,255
- 13310 DATA 0,15,255,0,15,255,0,15,255,0,15,192,0,15,192,0,15,192
- 13320 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- 13330 DATA 0,0,0,0,0,0,0,0,0
- 13999 RETURN
- 14000 REM THIS ROUTINE INITIALIZES ALL POINTERS
- 14010 D=0:SC=1:SY=190:POKEV,10:POKEV+1,230
- 14020 FORX=1TO7:ST(X)=1:NEXT
- 14030 FORX=1TO7:PL(X)=X-1:NEXT
- 14040 CO$(1)=CHR$(28):CO$(2)=CHR$(144)
- 14999 RETURN
- 15000 REM THIS ROUTINE DEALS THE CARDS TO THE STACKS AND UNKNOWN PILES
- 15010 N=0
- 15020 FORX=1TO7
- 15030 IFPL(X)>0THENFORY=1TOPL(X):N=N+1:PL$(X,Y)=N$(N):NEXTY
- 15040 N=N+1:ST$(X,1)=N$(N)
- 15050 NEXTX
- 15999 RETURN
- 16000 REM THIS ROUTINE DRAWS THE INITIAL SCREEN OF CARDS
- 16010 PRINTCHR$(147);:POKE53281,1:POKE53280,14
- 16020 S2$=CHR$(32)+CHR$(146):S3$=CHR$(18)+" "+CHR$(146)
- 16030 CL$=" ":CL$=CL$+" SOLITAIRE "+CL$
- 16035 PRINTCHR$(31);CHR$(18);CL$
- 16040 CL$=" ":CL$=CL$+CL$+CL$+CL$+" "
- 16050 FORX=1TO20:PRINTCHR$(31);CHR$(18);CL$:NEXTX:Y1=160:Z1=6
- 16060 GOSUB16300
- 16120 Y=1983:Z=56255:FORX=1TO34:POKEY+X,Y1:POKEZ+X,Z1:NEXTX:PRINTCHR$(19);
- 16199 RETURN
- 16300 REM PRINT KEYBOARD INSTRUCTIONS
- 16310 PRINTCHR$(19);CHR$(31);:FORX=1TO21:PRINTCHR$(17);:NEXTX
- 16320 CL$="N-NEXT F-FOUNDATION E-END "
- 16330 PRINTCHR$(18);CL$
- 16340 CL$="L-LEFT D-DROP F1-JOYSTK"
- 16350 PRINTCHR$(18);CL$
- 16360 CL$="R-RIGHT P-PICK UP INSTR "
- 16370 PRINTCHR$(18);CL$
- 16399 RETURN
- 16500 REM PRINT JOYSTICK INSTRUCTIONS
- 16510 PRINTCHR$(19);CHR$(31);:FORX=1TO21:PRINTCHR$(17);:NEXTX
- 16520 CL$=" ^-DROP FIRE + E-END "
- 16530 PRINTCHR$(18);CL$
- 16540 CL$=" V-PICK UP ^-FOUNDATION F3-KEYBRD"
- 16550 PRINTCHR$(18);CL$
- 16560 CL$="<->L & R V-NEXT INSTR "
- 16570 PRINTCHR$(18);CL$
- 16599 RETURN
- 17000 REM THIS ROUTINE DRAWS THE INITIAL STACKS OF CARDS
- 17010 FORX=1TO7
- 17020 GOSUB18000
- 17030 NEXTX
- 17999 RETURN
- 18000 REM PLACE STACK OF CARDS ON SCREEN
- 18010 PRINTCHR$(19);CHR$(13);
- 18020 FORY=1TOST(X)
- 18030 S1$=CO$(VAL(RIGHT$(ST$(X,Y),1)))+CHR$(18)+CHR$(32)
- 18050 PRINTTAB((X-1)*5)S1$;LEFT$(ST$(X,Y),2);S2$;CHR$(13);
- 18060 NEXTY
- 18070 FORZ=1TO3:PRINTTAB((X-1)*5);S3$;CHR$(13);:NEXTZ
- 18999 RETURN
- 20000 REM YOU FINALLY DID IT
- 20005 POKE53269,0
- 20010 PRINTCHR$(147);:FORX=1TO8:PRINTCHR$(13);:NEXTX
- 20020 PRINTTAB(11)CHR$(144);"CONGRATULATIONS!"
- 20030 FORJ=1TO10
- 20040 POKE53281,J:POKE53280,J+5
- 20050 FORI=1TO200:NEXT
- 20060 NEXTJ
- 20080 FORI=1TO5:PRINTCHR$(13):NEXTI
- 20090 PRINTCHR$(28);" PLAY AGAIN? (Y/N)";
- 20100 GETA$:IFA$=""THEN20100
- 20110 IFA$="Y"THENRUN
- 20120 PRINTCHR$(147);CHR$(154);:POKE53281,6:POKE53280,14
- 20130 POKE53269,0
- 20999 END
-