d * POKER.BAS ** FIVE CARD DRAW POKER PROGRAM *n * CODEWORKS MAGAZINE 3838 SOUTH WARNER ST. TACOMA WA 984092x * PLEASE DO NOT REMOVE THESE CREDIT LINESo * PHONES VOICE (206) 475-2219 DOWNLOAD (206) 475-2356: Adapted for the Tandy 600 by Dave Thomas I P:SP$SP$" ":DA$DA$"-": M(X)X d: I(X)(Xd): S$(X)(SP$,X): D$(X)(DA$,X). B(4),M(, ),B$(4)T ** MAKE RANDOMIZER IF NEEDED **t ((,,)(,,))| A : D$( );" The CodeWorks ";D$(!)  );" 5-C A R D D R A W P O K E R P R O G R A M"%  );" just watch or sit in"4 D$(P);:    );"You may watch 5 players or be one. Choose 0 to watch, 1 to"   );"5 to sit in. The game ends when any player goes broke." "  );"There are no wild cards, a 3-card draw limit and any pair"S ,  );"opens. Chips are $5, $10 and $25. Bet in multiples of $5" 6  );"from $5 to $25. After the draw, if you are the opener, you" @  );"may check by betting 0. Press ENTER after the next three"( J  );"questions, after that the keys will respond when pressed.". Tu ^  )"";:"Which position do you want to play: 0 = none or 1-5";U h U U ^ r::  )"";:"How much money will you start with";DO |  );"Choose the speed of the betting/drawing action"J   )"";:"on a scale of 1-10, 1 is very fast, 10 is very slow";T1Y T1T1 v  I :M(I, )DO: I     :CLEAR CARDS AND ACTION  :  );"No one opened - ante and deal again"  T T1: T :delay loop& I : M(I, ) . Iu :  );"Shuffle and deal....... " :15 spaces  ,,:"Ante $5 " :9 spaces A A I  : I, :"PLAYER";I@P: IX I  : I, : M(X, ) &XX(0 I_:  :MAKE DECK,SHUFFLE,DEAL, INITIALIZE FOLD.tD  :ANTE UPN  :SORT EACH HANDX :  ); S$(()b U SH : SHl  :PRINT HANDSvF1 < :FIND VALUE OF HANDS j :FIND OPENERR A1 A1:AA:  :IF NO ONE OPENED[FB  :ESTABLISH BET FOR OPENER n :1ST ROUND OF BETTING  :UPDATE POT AND CLEAR BET BUFFERS  :DISCARD AND DRAW   :SHOW THE DRAW&  :SORT EACH HAND?  :PRINT HANDSHF1i < :FIND VALUE OF HANDSrFB   :ESTABLISH BET OF OPENER n :2ND ROUND OF BETTING BL*  :UPDATE POT AND CLEAR BET BUFFERS4 D :FIND RELATIVE VALUE OF HANDS#>SHMH  :SHOW HANDS & ELIMINATE FOLDSfR 2 :SHOW WINNER\ I :M(I,):M(I,):M(I, ): If  :CLEAR CARDS AND ACTIONpAA: z: ** MAKE 4 DIFFERENT SUITS WITH 13 CARDS EACH ** I 31B(I)IfW(I )9 IA:^ ** SHUFFLE THE DECK **gC4v I 4R((()C))TB(R):B(R)B(C):B(C)TCC I: ** INITIALIZE PLAY OR FOLD FLAG AND FLUSH FLAG IN ARRAY **( I :M(I,):M(I, ): I0:a$ ** DEAL HANDS OF 5 CARDS TO EACH PLAYER **j.DKx8 I B J LM(I,J)B(DK)VDKDK` Jj It~: ** EVERYBODY ANTE UP 5 BUCKS ** I :POTPOT:M(I, )M(I, ): I0  :PRINT THE POT6>:x ** SORT EACH HAND INTO ASCENDING NUMERICAL ORDER ** I F J KJ M(M(I,J))M(M(I,K))  TM(I,J):M(I,J)M(I,K):M(I,K)TF  J  F  I(#2:Y< ** FIND VALUES OF HANDS EXCEPT FOR STRAIGHTS **jF F1 nxP I Z M(I,) M(I,) M(I,) M(I,)d In I x J  KJ  M(M(I,J))M(M(I,K)) VV" I(M(I,J))I(M(I,K)) SS* K2 Jr V M(I,)V : V M(I,) : V M(I,) F1 S M(I,) M(I,)  S M(I,):M(I, )S:V I: ** FIND OUT IF THERE ARE STRAIGHTS OR POSSIBLES ** I , J N M(I,) M(I,) bN(J)M(M(I,J))j" J{, F1 J6 N()N() M(I,)::POSS STRGT LO MISSING@ N()N() M(I,)::POSS STRGT HI MISSINGJ N()N() M(I,) ::5 CARD STRAIGHT^T N()N() N() N() M(I,) :AL::ACE LO STRGTt^ M(I, ) hM(I,) ::WE HAVE A FLUSHr AL M(I,)::ACE LO STRGT FLUSH| N()N() M(I,)::STRAIGHT FLUSH) N()N() N() M(I,)::ROYAL FLUSH2AL: I@H: ** FIND ODDBALL CARD IN A FOUR-FLUSH AND REPLACE IT ** I  IU M(I,) > M(I,) N M(I,) N J SSI(M(I,J)) J S S: 05 S S: 0L S S: 0T&Sb0 J : I(M(I,J))S M(I,J)B(DK):DKDK:M(I,)D JNSX Ib:l ** FIND 3 CARDS TO DRAW TO A PAIR AND REPLACE THEM **)v ** OR FIND THREE TO REPLACE IN A NOTHING HAND **7 I G IU  \ M(I,)  j J  M(M(I,J))M(M(I,J)) SSJ J S M(I,)B(DK):DKDK:M(I,)B(DK):DKDK:M(I,)B(DK):DKDK:M(I,): L S M(I,)B(DK):DKDK:M(I,)B(DK):DKDK:M(I,)B(DK):DKDK:M(I,):  S M(I,)B(DK):DKDK:M(I,)B(DK):DKDK:M(I,)B(DK):DKDK:M(I,):  S M(M(I,)) U (()) M(I,):BL: I S M(I,)B(DK):DKDK:M(I,)B(DK):DKDK:M(I,)B(DK):DKDK:M(I,): Y U  zR(()): R  M(I,)B(DK):DKDK:M(I,)B(DK):DKDK:M(I,):  M(I,)B(DK):DKDK:M(I,)B(DK):DKDK:M(I,)B(DK):DKDK:M(I,) S  I*:V4 ** FIND AND REPLACE ODD CARD AT END OF A STRAIGHT **d> I tH IU pR M(I,) p\ M(I,) M(I,)B(DK):DKDK:M(I,)f M(I,) M(I,)B(DK):DKDK:M(I,)p Iz:7  ** FIND AND REPLACE ONE CARD TO TWO PAIRS OR 4 OF KIND **E  I U  IU  j  M(I,)   M(I,) M(I,)   J   M(M(I,J))M(M(I,J)) SSJ  J  M(I,) SS ! S M(I,)B(DK):DKDK:M(I,)5! S M(I,)B(DK):DKDK:M(I,)e! S S M(I,)B(DK):DKDK:M(I,)m!Su! I}! S! :!$ ** FIND AND REPLACE 2 CARDS TO THREE OF KIND **!. I !8 IU  !B M(I,)  "L M(I,)  "V J 8"` M(M(I,J))M(M(I,J)) SSJ@"j J"t S M(I,)B(DK):DKDK:M(I,)B(DK):DKDK:M(I,)"~ S M(I,)B(DK):DKDK:M(I,)B(DK):DKDK:M(I,)" S M(I,)B(DK):DKDK:M(I,)B(DK):DKDK:M(I,)# S # I# # :5# ** PRINT DISPLAY **=# XK# I X# X,,f# J # SH  :  # B$(J);" ";# J# XX# I# #( :#2 ** FIND WHO HAS WHAT AND DISPLAY WINNER **#< I $F b:  : C$$P I$$Z S:S12$d I G$n M(I,)  f$x M(I,)S SM(I,):SSIn$ I|$ I $ M(I,)S N(I)I : N(I)$ I$ I $ M(N(I), )S1 S1M(N(I), ):SSI$ I% :"PLAYER ";SS;" takes the $";POT;"POT":  <% M(SS, )M(SS, )POT:POTj%  ,,: S$(()::CLEAR POT HAS LINE|% S:S1:SS% T  : T::delay loop% % :% ** DECLARE THE HAND *% M(I,) C$" ":&" M(I,) C$"high card ":F&, M(I,) C$"pair ":p&6 M(I,) C$"Two pair ":&@ M(I,) C$"Three of a kind ":&J M(I,) C$"Straight ":&T M(I,) C$"FLUSH ":'^ M(I,) C$"FULL House ":B'h M(I,) C$"4 OF A KIND ":l'r M(I,) C$"STRAIGHT FLUSH! ":'| M(I,) C$"ROYAL FLUSH !! ":' :' ** MAKE SUITS AND VALUES RECOGNIZABLE **' IU D$" "():B$(J)D$" ":'( M(I,) D$" "(_):B$(J)D$" ":L( M(M(I,J)) D$" A":  q( M(M(I,J)) D$" J":  ( M(M(I,J)) D$" Q":  ( M(M(I,J)) D$" K":  ( M(M(I,J)) D$(M(M(I,J))):  ) D$" "(M(M(I,J))) ) SUQ) & : : Remark this line for suit letters instead of symbols.r) I(M(I,J)) SUg: & ) I(M(I,J)) SUq: & ) I(M(I,J)) SUa: & ) I(M(I,J)) SU_)& B$(J)D$(I(M(I,J))SU))0 ): :2*D ** DETERMINE RELATIVE VALUE OF SIMILAR HANDS **:*N :k*X ** HI CARD AND FLUSH HAND DETERMINATION **y*b I *l M(I,)  *v M(I,) M(I,)  * J * M(I, )M(I, )M(M(I,J))J* J+ M(I, )M(I, )+ I+ :4+ ** HIGH PAIR DETERMINATION **B+ I W+ M(I,) 4 m+ M(I,) 4 {+ J + M(M(I,J))M(M(I,J)) SSJ+ J+ S M(I, )M(M(I,))M(M(I,))M(M(I,))M(M(I,))-, S M(I, )M(M(I,))M(M(I,))M(M(I,))M(M(I,))o, S M(I, )M(M(I,))M(M(I,))M(M(I,))M(M(I,)), S M(I, )M(M(I,))M(M(I,))M(M(I,))M(M(I,)),* S:M(I, )M(I, ) ,4 I,> : -H ** DETERMINE HIGH HAND IN 3 OF KIND, FULL HOUSE, 4 OF KIND **.-R I C-\ M(I,) z s-f M(I,) M(I,) M(I,) z -p M(I, )M(M(I,))-z I- :- ** DETERMINE HIGH HAND IN TWO PAIR **- I - S- M(I,) . M(I,) . J ;. M(M(I,J))M(M(I,J)) SSJC. Jn. M(I, )(M(M(I,)))(M(M(I,))). S M(I, )M(I, )M(M(I,)). S M(I, )M(I, )M(M(I,)). S M(I, )M(I, )M(M(I,)). I.:/ ** DETERMINE HIGH STRAIGHT HAND ***/$ I ?/. M(I,) Lp/8 M(I,) M(I,) M(I,) L/BM(I, )M(M(I,))/L I/V/`:/j ** FIND DEALER AND OPENER **/tIA:A1: I I/~ b: X,Y$:"Dealer" 0II: I IY0 M(I,) M(I,) M(I,) M(I,) b:"Passes": |0 T T1: T::DELAY LOOP0 M(I,) BOI: b: X,Y$: :"Opener"::0 T T1: T::DELAY LOOP0II: I I1A1A1: A1 1 1:;1 ** ESTABLISH BET FOR OPENER **D1IBOZ1BT(() )~1 BT BT BT 1  M(I,) BTBT 1 FB BTBT 1 IU 1( b: BT FB "Checks " : "Bets ";BT22 BT M(BO,) P12<BOBO: BO BON2F M(BO,) < : c2PM(I,)M(I,)BTi2Zq2d:2n ** THE BETTING ROUNDS **2x FB 2R(() )2 R R R  : 2R(()) 3 R R R R &3:T3 ** BETTING AND RAISING ROUND CONTROL **l3FL:IBO:B1:R13II: I I3 T T1: T::DELAY LOOP3 FL 3 M(I,) FLFL: 3:4 ** 1ST ROUND BETTING STRATEGY**4 FB r/4HCM(M(I,))M(M(I,))?4 IU }4" HC M(I,) BL M(I,) B1:R1R1: 4, M(I,) B1:R1R1:R : 46 M(I,) HC BT B1: 4@ R1 M(I,) B1: -5J M(I,) BT (()) B1: <5TB1: D5^:j5h ** 2ND ROUND BETTING STRATEGY**z5r IU 5|HCM(M(I,))M(M(I,))5 HC M(I,) BL M(I,) B1:R1R1:  6 M(I,) (()) B1:R1R1: 76 R1 M(I,) B1:R1R1: u6 R1 M(I,) (()) B1:R1R1: 6 M(I,) B1: 6 M(I,) R1 B1: 6B1: 6:6 ** MISC. BETTING HOUSEKEEPING CHORES **X7 R1 R1 R$"RAISES" : R1 R1 R$"raises" : R1 R1 R$"Raise!"p7 R1 B1: 7 B1 b: R$;R:M(I,)M(I,)(BTRM(I,)):BTBTR:FL: 8 B1 b:"CALLS";BTM(I,):M(I,)M(I,)BTM(I,):FLFL: ;8 B1 b:"folds ":M(I,):FLFL: C8:]8 ** SHOW THE DRAW **e8&IA80 M(I,) b:"draws ";M(I,)8: T T1: T :DELAY LOOP8DII: I I8N IA 0 : 8X:9b ** LOCATE PLAYER ON SCREEN SUBROUTINE **(9l I X:Y.=9v I X:Y.R9 I X:Y.g9 I X:Y.}9 I X :Y.9 X,Y,:9 , ,:::STATUS LINE LOCATION9  ,,:"POT HAS $";POT:9 I  : I,,: S$(@): I:::*: ** USER BET IF OPENER ROUTINE **P: , ,:"How much do you bet";i:BT$"":BY$"":BX$"":BY$: BY$""  : BY$"0" FB BT :  : BY$"5" BT(BY$):  :BX$: BX$"" : BT(BY$BX$): BT ; , ,: S$(()J;  BT BT BT BT BT BT P;*X;4:;> ** USER DISCARD AND DRAW SUBROUTINE **;H , ,:"Discard how many (0 to 3)";;RHM$: HM$"0" HM$"3" H;\HM(HM$);f HM  Q$"R" B1C>$ , :"How much do you wish to raise the bet";\>.HY$: HY$"" .>8 HY$"5" HR(HY$): HR: V>BHX$: HX$"" B>LHR(HY$HX$): HR>V , ,: S$(2)?` HR HR HR HR HR $?jRHR: ?t:8?~ ** END OF GAME ROUTINE **@?:a?  );" IT'S ALL OVER...":?  );"HERE ARE THE NET GAINS AND LOSSES."?? I :  );"PLAYER ";I;" ";: "$$#,###.##";M(I, )DO: I?@  );"BETTER LUCK NEXT TIME"@ ,,:@:Q@ ** UPDATE POT AND CLEAR BET BUFFER ROUTINE **_@ I r@POTPOTM(I,)@M(I, )M(I, )M(I,)@ M(I,)@ I@  :PRINT THE POT@(@2:@< :OF PROGRAM