10 REM POK20.ECB 15 REM ========== S O L - 2 0 P O K E R ========= 5-10-78 20 REM ========= by Ralph Hopkins Eagan Minn. 30 DIM D(52),H(5),O(10),P(13),R(5),Q(5),X(5),Y(5) 40 FOR X=1 TO 52: LET D(X)=X: NEXT X: REM ....New Deck 50 DATA 12,9,12,16,12,23,12,30,12,37 60 DATA 1000,250,100,25,15,10,5,3,1,5,0,100 70 FOR X=1 TO 5: READ Y(X),X(X): NEXT X 80 FOR X=1 TO 9: READ O(X): NEXT X 90 PRINT "&K": READ D,H,M: LET A$=" to 1 )" 100 CURSOR 3,18: PRINT "XXX*X*X*X*X*X*X*X*XXX" 110 CURSOR 4,16: PRINT "XXX XXX" 120 CURSOR 5,15: PRINT "XXX S O L - 2 0 XXX" 130 CURSOR 6,15: PRINT "XXX P O K E R XXX" 140 CURSOR 7,16: PRINT "XXX XXX" 150 CURSOR 8,18: PRINT "XXX*X*X*X*X*X*X*X*XXX" 160 CURSOR 14,1 170 INPUT (1,200)" DO YOU NEED INSTRUCTIONS ? (Y OR N)---=>",D$ 180 IF D$="Y" THEN PRINT "&K" ELSE 1000 190 CURSOR 3,15 200 PRINT "### WELCOME TO SOL-20 POKER ###";: CURSOR 6,15 210 PRINT "### THE GAME IS 5 CARD DRAW. ###";: CURSOR 8,7 220 PRINT " You will be dealt 5 cards with the option of" 230 PRINT " discarding from 0 to 5 of the cards. On the card" 240 PRINT " display, the numbers above your cards (1 to 5) are" 250 PRINT " the numbers you type in if you want to hold that" 260 PRINT " card. 'Stars' ***** will underline your choice" 270 PRINT " indicating that the card will be held." 280 CURSOR 15,1: PRINT "### ENTER ANY LETTER TO SEE THE"; 290 INPUT (1,200)" EXAMPLE---=>",Y$ 300 PRINT "&K": CURSOR 2,1 310 PRINT " 1 2 3 4 5" 320 PRINT " 10-H J-S Q-H 2-C 6-D" 330 PRINT " ***** *****";: CURSOR 7,1 340 PRINT "### INPUT CARD TO HOLD (0-5)---=>";: CURSOR 9,1 350 FOR X=1 TO 10: PRINT "=====";: NEXT X: CURSOR 11,7 360 PRINT " In the above example, cards #1 and #3 have been held." 370 PRINT " (1 = 10 of HEARTS ; 3 = QUEEN of HEARTS)" 380 PRINT " ### NOTE ### Input the '0' to erase all holds so far." 390 CURSOR 15,1: INPUT (1,200)"ENTER ANY LETTER TO SEE MORE---=>",Y$ 400 PRINT "&K": CURSOR 2,7 410 PRINT "Two other special inputs are:";: CURSOR 3,10 420 PRINT "'F' to FOLD and 'S' to STOP the game.": CURSOR 5,7 430 PRINT " Otherwise, terminate the 'HOLD' selections by" 440 PRINT " entering any letter.";: CURSOR 8,7 450 PRINT "For the next input, you will be asked to" 460 PRINT " place your bet. House limits are any bet" 470 PRINT " from $0 to $10.00";: CURSOR 11,1 480 PRINT " The '@' symbol is used to make the $10.00 bet";: CURSOR 15,1 490 INPUT (1,200)"### ENTER ANY LETTER TO SEE MORE ---=>",Y$ 500 PRINT "&K": CURSOR 3,7 510 PRINT "### YOU'VE BEEN ADVANCED $";M;".00 CREDIT ###"; 520 CURSOR 6,10 530 PRINT "### NOTE ### Dealers's FEE'S are $";D;".00"; 540 CURSOR 12,15: PRINT "*#* G O O D L U C K *#*"; 550 CURSOR 15,1 560 INPUT (1,100)"ENTER ANY LETTER TO START PLAY ---=>",Y$ 570 GOTO 1000 600 FOR Z=1 TO 20: REM ....SHUFFLE CARD DECK 610 LET Z1=INT(RND(0)*43)+10: LET Z2=INT(RND(0)*10)+1 620 LET Z3=D(Z1): LET D(Z1)=D(Z2): LET D(Z2)=Z3 630 NEXT Z: REM ...values are from 1 to 52 640 RETURN 700 REM ...============ VARIBLES DEFINED ============== 710 REM ...C = CARDS HELD (INPUT) 720 REM ...B = YOUR BET (INPUT) 730 REM ...D = DEALER"S FEE 740 REM ...D( ) = ORDER OF SHUFFLED DECK (1 TO 52) 750 REM ...F = FLUSH CALCULATION 760 REM ...H( ) = 1 FOR HOLDING CARDS OR 0 FOR DISCARDING 770 REM ...H = # HANDS PLAYED 780 REM ...M = YOUR MONEY ($100 AT THE START) 790 REM ...O( ) = "ODDS" FOR THE BET PAYOFFS 800 REM ...P = YOUR PAYOFF "MULTIPLIER CONSTANT" 810 REM ...P2 = # OFF PAIRS YOU GOT 820 REM ...P3 = 3 OF A KIND INDICATOR 830 REM ...P4 = 4 OF A KIND INDICATOR 840 REM ...P5 = FULL HOUSE INDICATOR 850 REM ...Q( ) = CARD SUIT 1 = SPADE 2 = HEART 860 REM ... 3 = DIAMOND 4 = CLUB 870 REM ...P( ) = CARD TYPE COUNTERS 880 REM ...R( ) = CARD VALUE (1 TO 13 with Ace=1) 890 REM ...S = Smallest card value (STRAIGHT calculation) 900 REM ...S1 = 1 FOR A STRAIGHT OR 0 IF NOT 910 REM ...T = FOR TABS 920 REM ...X,Y,Z = SCRATCH 930 REM ...Y( ),X( ) = CARD DISPLAY CURSOR LOCATIONS 1000 PRINT "&K": REM ...********** S T A R T *********** 1010 CURSOR 5,15: PRINT "*** SHUFFLING THE DECK NOW ***" 1020 GOSUB 600: REM ...Suffle the card deck 1030 GOSUB 600 1040 IF D$="D" THEN GOSUB 4300: REM ....### DEBUG SECTION ### 1050 FOR Z=1 TO 5: LET H(Z)=1: NEXT Z 1060 LET H=H+1 1070 IF M<1 THEN 4000: REM .....Your BROKE ! 1100 PRINT "&K": LET T=20: REM ........ odds display...... 1110 PRINT "ROYAL FLUSH";TAB(T);"(";O(1);A$ 1120 PRINT "STRAIGHT FLUSH";TAB(T);"(";O(2);A$ 1130 PRINT "4 OF A KIND";TAB(T);"(";O(3);A$ 1140 PRINT "FULL HOUSE";TAB(T);"(";O(4);A$ 1150 PRINT "FLUSH";TAB(T);"(";O(5);A$ 1160 PRINT "STRAIGHT";TAB(T);"(";O(6);A$ 1170 PRINT "3 OF A KIND";TAB(T);"(";O(7);A$ 1180 PRINT "2 PAIR";TAB(T);"(";O(8);A$ 1190 PRINT "1 PAIR";TAB(T);"(";O(9);A$ 1200 GOSUB 1900: REM .....Display $ money $ left to bet with 1210 GOSUB 1700: REM ....."Dealer fee" MSG. 1220 GOSUB 3900: REM .....Figure out card SUIT and VALUE 1230 FOR Z=1 TO 5: CURSOR 11,X(Z)+1: PRINT Z;: NEXT Z 1240 CURSOR 12,1: GOSUB 1500: REM ....Card display 1250 GOSUB 1800: REM .....ERASE "Dealer fee" MSG. 1260 GOSUB 1900: REM .....Display $ money $ left to bet with 1280 FOR Z=1 TO 5: LET H(Z)=0: NEXT Z 1290 CURSOR 15,1: PRINT "### INPUT CARD TO HOLD (0-5) ---=>"; 1300 INPUT ,(1,5)C$ 1310 IF C$="" THEN CURSOR 15,35: GOTO 1300 1320 LET C=ASC(C$)-48: IF C<0 THEN 1300 1330 IF C=22 THEN 1000: REM .....Fold 1340 IF C=35 THEN 4000: REM .....Exit/STOP 1345 IF C>5 THEN 2000 1350 IF C=0 THEN 1360 ELSE 1380 1360 FOR Z=1 TO 5: LET H(Z)=0: NEXT Z 1365 CURSOR 13,5: PRINT " "; 1370 CURSOR 15,35: GOTO 1300: REM ....INPUT next card to hold 1380 LET H(C)=1: CURSOR 13,X(C) 1390 PRINT "*****";: CURSOR 15,35: GOTO 1300 1500 FOR Z=1 TO 5: REM .............CARD DISPLAY 1510 IF H(Z)=0 THEN 1620 1520 CURSOR Y(Z),X(Z) 1530 IF R(Z)=1 THEN PRINT " A-";: GOTO 1580: REM ....card type 1540 IF R(Z)<11 THEN PRINT R(Z);"-"; 1550 IF R(Z)=11 THEN PRINT " J-"; 1560 IF R(Z)=12 THEN PRINT " Q-"; 1570 IF R(Z)=13 THEN PRINT " K-"; 1580 IF Q(Z)=1 THEN PRINT "S "; 1590 IF Q(Z)=2 THEN PRINT "H "; 1600 IF Q(Z)=3 THEN PRINT "D "; 1610 IF Q(Z)=4 THEN PRINT "C "; 1620 NEXT Z 1630 RETURN 1650 LET T=45: REM ....."BET" Acceptance MSG. 1660 CURSOR 2,T: PRINT "* Your $";B;" bet *"; 1670 CURSOR 3,T: PRINT "### ACCEPTED ###"; 1680 LET M=M-B: PAUSE 15: GOSUB 1800 1690 GOSUB 1900: RETURN 1700 LET T=45: REM ......."Dealer fee" MESSAGE 1710 CURSOR 2,T: PRINT "****************"; 1720 CURSOR 3,T: PRINT "** THE DEAL **"; 1730 CURSOR 4,T: PRINT "** COST $";D;" **"; 1740 CURSOR 5,T: PRINT "****************"; 1750 LET M=M-D: PAUSE 10 1760 RETURN 1800 LET T=45: REM .......ERASE "Dealer fee" MESSAGE 1810 FOR Z=1 TO 5 1820 CURSOR Z,T: PRINT " "; 1830 NEXT Z 1840 RETURN 1850 LET T=45 1860 CURSOR 2,T: PRINT "### NOT ###"; 1870 CURSOR 3,T: PRINT "### ENOUGH ###"; 1880 CURSOR 4,T: PRINT "### MONEY! ###"; 1890 PAUSE 20: GOSUB 1800: RETURN 1900 LET T=50: REM .........DISPLAY $ MONEY $ LEFT.... 1910 CURSOR 8,T: PRINT " "; 1920 CURSOR 8,T: PRINT "$";M; 1930 CURSOR 9,T: PRINT "============"; 1940 CURSOR 10,T: PRINT " M O N E Y "; 1950 RETURN 2000 CURSOR 15,1: PRINT " "; 2010 LET X=5: REM ......NEW DEAL, Hide new cards 2020 FOR Z=1 TO 5 2030 IF H(Z)=1 THEN 2080 2040 LET X=X+1: LET D(Z)=D(X) 2050 CURSOR Y(Z),X(Z): PRINT "#####"; 2060 CURSOR Y(Z)+1,X(Z): PRINT "#####"; 2070 PAUSE 3 2080 NEXT Z 2100 CURSOR 15,1 2110 PRINT "<*###*> HOW MANY DOLLERS TO BET ? (0-10) ---=>"; 2120 INPUT ,(1,5)B$ 2130 IF B$="" THEN CURSOR 15,46: GOTO 2120 2140 LET B=ASC(B$)-48 2150 LET B=ABS(B) 2200 IF B=0 THEN 1000: REM ......FOLD 2210 IF B=22 THEN 1000: REM ......FOLD 2220 IF B=35 THEN 4000: REM ......EXIT/STOP 2230 IF B>9 THEN LET B=B/100: REM ....Bets less than $1.00 2240 IF B=.16 THEN LET B=10: REM ...."@" GIVES A $10 BET 2250 IF B>M THEN GOSUB 1850: REM ....Not enough MONEY 2260 IF M<0 THEN 4000: REM .....You're broke ! 2270 IF B>M THEN 2090: REM ....Re-place your bets 2300 GOSUB 1650: REM ...."Bet acceptance" MSG. 2310 FOR Z=1 TO 5: LET H(Z)=1: NEXT Z 2320 GOSUB 3900: REM ...Get Q( ) and R( ) again 2330 GOSUB 1500: REM ...Get card display 3000 REM ...======== FIND OUT WHAT WON ========== 3020 REM .....If you have pairs, you can't possibly have any 3030 REM ..............straights or flushes. 3040 REM ...***** Look for PAIRS, 3, 4 of a kind ***** 3050 FOR Z=1 TO 13: LET P(Z)=0: NEXT Z 3060 FOR Z=1 TO 5: REM .... Count how many Aces, twos, etc. 3070 LET P(R(Z))=P(R(Z))+1 3080 NEXT Z 3090 LET P=0: LET P2=0: LET P3=0: LET P4=0: LET P5=0 3100 FOR Z=1 TO 13: REM ...Count 2, 3, 4 of a kind 3110 IF P(Z)=4 THEN LET P4=P4+1: GOTO 3140 3120 IF P(Z)=3 THEN LET P3=P3+1: GOTO 3140 3130 IF P(Z)=2 THEN LET P2=P2+1 3140 NEXT Z 3200 IF P3=1 THEN LET P5=P3+P2: REM ...FULL HOUSE ??? 3210 IF P5=2 THEN LET P=O(4): GOTO 3500: REM ...Full House won 3220 IF P4=1 THEN LET P=O(3): GOTO 3500: REM ...4 of kind won 3230 IF P3=1 THEN LET P=O(7): GOTO 3500: REM ...3 of kind won 3240 IF P2=2 THEN LET P=O(8): GOTO 3500: REM ...2 pair won 3250 IF P2=1 THEN LET P=O(9): GOTO 3500: REM ...1 pair won 3300 REM ....**** Sort for a STRAIGHT **** 3310 LET S=1: LET L=1 3320 FOR Z=2 TO 5 3330 IF R(Z)R(L) THEN LET L=Z: REM ...Get largest value 3350 NEXT Z 3360 IF (R(L)-R(S))=4 THEN LET S1=1 ELSE LET S1=0 3370 IF R(S)=1 THEN IF S1=0 THEN LET R(S)=14: GOTO 3300 3380 REM ...Line 3370; A low or a high Ace makes a STRAIGHT 3390 IF S1=1 THEN LET P=O(6): REM ...Found a STRAIGHT 3400 LET F=Q(1): REM ....**** Look for a FLUSH **** 3410 FOR Z=2 TO 5 3420 IF F=Q(Z) THEN 3430 ELSE 3500: REM ....NO flush found 3430 NEXT Z 3440 LET P=O(5): REM ....Found a FLUSH 3450 LET F=0 3460 IF S1=1 THEN LET P=O(2): REM ....STRAIGHT FLUSH !!! 3470 FOR Z=1 TO 5: LET F=F+R(Z): NEXT Z 3480 IF F=60 THEN LET P=O(1): REM ....### ROYAL FLUSH !!! ### 3500 LET T=45: REM ...******** MAKE THE PAYOFF ******* 3505 FOR Z=1 TO 52: LET D(Z)=Z: NEXT Z: REM ...NEW DECK 3510 IF P=0 THEN 3800: REM .....You did'nt win 3520 CURSOR 1,T: PRINT " ***************"; 3530 CURSOR 2,T: PRINT "*** YOU WIN *** "; 3540 CURSOR 3,T: PRINT " ***************"; 3550 CURSOR 5,T: PRINT " $";P*B; 3560 LET M=M+(P*B): GOSUB 600 3570 GOSUB 1900: REM ....Display $money$ 3580 GOSUB 3700: REM ....Display what won 3590 GOSUB 600: REM ...Shuffle card deck 3600 GOSUB 1800 3610 GOSUB 600: REM ...Shuffle card deck 3620 GOTO 1000: REM ...On to the next play 3700 LET T=0: REM .....DISPLAY WHAT WON...... 3710 FOR Z=1 TO 9 3720 IF P=O(Z) THEN 3750 3730 CURSOR Z,T 3740 PRINT " "; 3750 NEXT Z 3770 RETURN 3800 LET T=45: REM ...."LOSE" Message 3810 IF B=0 THEN 1000 3820 CURSOR 2,T: PRINT "T H A N K Y O U"; 3830 CURSOR 3,T: PRINT "----------------" 3840 CURSOR 4,T: PRINT "(For Your $";B; 3850 IF B<1 THEN PRINT ")"; ELSE PRINT ".00)"; 3860 GOSUB 600: GOSUB 1800 3870 GOSUB 600: GOTO 1000 3900 REM ...........GOSUB to figure card type/values 3910 FOR Z=1 TO 5 3920 IF D(Z)>13 THEN LET Q(Z)=INT((D(Z)-1)/13)+1 ELSE LET Q(Z)=1 3930 LET R(Z)=D(Z)-(Q(Z)*13)+13 3940 NEXT Z 3950 RETURN 4000 PRINT "&K": CURSOR 3,15: PRINT "*** YOU PLAYED ";H;" HANDS ***"; 4010 CURSOR 6,7: LET M=M-100 4020 PRINT "The House has reclaimed it's $100.00";: CURSOR 9,1 4030 PRINT "Your holdings are therefore $";M;: CURSOR 12,15 4040 IF M<0 THEN PRINT "### YOU ARE IN THE HOLE $";M;" ###"; 4050 IF M>0 THEN PRINT "*** YOU ARE A $";M;" WINNER ***"; 4060 IF M=0 THEN PRINT "+ YOU BREAK EVEN +"; 4070 IF M<1000 THEN 4500 4200 GOTO 4500 4300 REM ......========== DEBUG SECTION ============ 4310 REM ......ENABLE by inputting 'D' to the "DO YOU NEED 4320 REM ...... INSTRUCTIONS" Input 4330 PRINT "&K&J&J";TAB(15);"### PROGRAM DEBUG ###";: CURSOR 7,5 4340 PRINT "*** VERIFY THE WIN COMBINATION'S ***";: CURSOR 9,1 4350 FOR Z=1 TO 5 4360 PRINT "CARD #";Z; 4370 INPUT (2,0)", Input value (1-52)---=>",D(Z) 4380 NEXT Z 4390 RETURN 4500 END