home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / lambda / misc / black.lbr / BLACK.BZS / BLACK.BAS
Encoding:
BASIC Source File  |  1993-10-25  |  22.6 KB  |  503 lines

  1. 10 '***************************************************************************
  2.  
  3.    '****                                   ****
  4. 11 '****    KAYPRO 10  BLACKJACK    Version 2.1    7/14/89           ****
  5.  
  6.    '****                                   ****
  7. 12 '****        by Richard S. Altman                   ****
  8.  
  9.    '****              P.O. Box 4388                   ****
  10. 13 '****              Clearlake, CA 95422                   ****
  11.  
  12.    '****                                   ****
  13. 14 '****    (c) 1989 by Richard Altman.  All Rights Reserved.       ****
  14.  
  15.    '****                                   ****
  16. 15 '***************************************************************************
  17.  
  18. 16 '
  19. 17 ' USER SUPPORTED
  20. 18 ' --------------
  21. 19 '
  22. 20 '     This program is user-supported software.  It is copyrighted and cannot
  23. 21 ' be sold for profit (without the author's express written permission),  but
  24. 22 ' it may be copied and distributed for free.
  25. 23 '
  26. 24 '     The  SHAREWARE  concept is a  distribution method  that dispenses with
  27. 25 ' heavy  marketing/advertising costs and gives the user the  opportunity  to
  28. 26 ' try a software program before buying.   Its continued existence depends on
  29. 27 ' each user paying for what he does, in fact, use.
  30. 28 '
  31. 29 '     If you plan to continue to use this program  [BLACKJACK],  please send
  32. 30 ' the $20 (or more) registration fee directly to the author:
  33. 31 '
  34. 32 '               Richard S. Altman
  35. 33 '                P.O. Box 4388
  36. 34 '                Clearlake, CA 95422-4388
  37. 35 '
  38. 36 '      Upon registration,  you will receive a floppy diskette containing the
  39. 37 ' latest version of this program,  as well as a printed manual detailing its
  40. 38 ' uses  and  specifications.   You will also receive a  Blackjack  TUTORIAL,
  41. 39 ' a FREE calendar printing program, and other programs by the same author.
  42. 40 '
  43. 41 '      WHEN ORDERING,  please be sure to indicate  single or double  density
  44. 42 ' disk drive, and the name of the program [BLACKJACK.BAS].  Comments on pro-
  45. 43 ' grams are also most welcome!
  46. 44 '
  47. 45 '      Due to possible unforeseen circumstances,  the above offer is subject
  48. 46 ' to change without notice. 
  49. 47 '
  50. 48 CLEAR:DEFINT A-S,V-Z:DEFSTR D-F,I:DIM A(111),AA(3,8),JJ(3,8),F(24)
  51. 49 CLS$=CHR$(26):PRINT CLS$:GOSUB 7000:WIDTH 255:GOTO 200:'
  52.  
  53.  
  54. 50 '    *******************************************
  55.  
  56.     ***     Miscellaneous Subroutines    ***
  57.  
  58.     *******************************************
  59. 52 IF BK>999 THEN DP="#####":GOTO 56
  60. 54 IF BK>99 THEN DP="####":GOTO 56 ELSE DP="###"
  61. 56 PRINT USING DP;BK;:RETURN
  62. 58 PRINT F(21);:GOSUB 5010:PRINT" "L$"'s turn " DSCR:RETURN
  63. 60 IF UX=0 AND X=1 AND (JA=0 OR JA=1011) THEN 68
  64. 62 IF UX=9 AND X=1 AND (JB=0 OR JB=1011) THEN 68
  65. 64 IF UX=0 AND X=2 AND (JC=0 OR JC=1011) THEN 68
  66. 66 IF UX=9 AND X=2 AND (JD=0 OR JD=1011) THEN 68 ELSE RETURN
  67. 68 U=21.5:T(X)=T(X)+TB(X)*1.5:RETURN
  68. 70 PRINT F(21) DSCR:IF M=1 THEN PS$=FNF(6,61):RETURN
  69. 72 IF M=2 THEN PS$=FNF(11,61):RETURN ELSE PS$=FNF(17,61):RETURN
  70. 74 PRINT STRING$(79,8) CHR$(11) DCLEAR:RETURN:'    Clear Prev. Line
  71. 76 PRINT CLS$:PRINT DS:PRINT"  "E5;TAB(30)"B L A C K J A C K";
  72. 78 PRINT TAB(67);E5:PRINT DS:PRINT:RETURN
  73. 80 IQ=INKEY$:FOR G=1 TO 1000:IF INKEY$=CHR$(13) THEN RETURN ELSE NEXT:RETURN
  74. 82 '    Money Display Routine
  75. 84 TA=ABS(TT)
  76. 86 IF TA>999999! THEN U$="$#####,####.##":GOTO 98
  77. 88 IF TA>99999! THEN U$="$####,####.##":GOTO 98
  78. 90 IF TA>9999 THEN U$="$###,####.##":GOTO 98
  79. 92 IF TA>999 THEN U$="$##,####.##":GOTO 98
  80. 94 IF TA>99 THEN U$="$#####.##":GOTO 98
  81. 96 U$="$####.##"
  82. 98 PRINT USING U$;TA;:RETURN
  83. 100 PRINT CLS$:PRINT FB:PRINT FL:PRINT"   ***" TAB(30);
  84. 102 PRINT"B L A C K J A C K"TAB(71)"***":PRINT FL:PRINT FB:RETURN
  85. 104 IF U=21.5 THEN RETURN
  86. 106 T(X)=T(X)+TB(X):RETURN:'        Add to Player's score.
  87. 108 T(X)=T(X)-TB(X):RETURN:'        Subtract from Player's score.
  88. 110 PRINT F1 A$ F2 B$ F3"DEALER":RETURN
  89. 112 '
  90. 200 '    Preparation for BLACKJACK
  91. 205 '
  92. 210 IF FTEMP="*" THEN 240
  93. 215 PRINT FNF(24,14)"(c) 1989 by Richard Altman -- All Rights Reserved."FNF(15,20) I7"Do you want instructions  (Y or N) ?  ";
  94. 220 FK=INKEY$:IF FK="" THEN COUNTER=COUNTER+1:GOTO 220
  95. 225 IF FK="Y" OR FK="y" OR FK="N" OR FK="n" OR FK=CHR$(13) THEN 230 ELSE 220
  96. 230 PRINT:RANDOMIZE COUNTER:GOSUB 74
  97. 235 IF FK="Y" OR FK="y" THEN 4000
  98. 240 'ND=2:NP=2:A$="RICH":B$="LINDA":C=ND*52:T1=500:T2=350:GOTO 270
  99. 245 PRINT F(12);:INPUT".... 1 or 2 decks";ND:IF ND<>1 THEN ND=2
  100. 250 PRINT FNF(12,20) ND DCLEAR:C=ND*52
  101. 255 PRINT F(14);:INPUT".... 1 or 2 players";NP:IF NP<>1 THEN NP=2
  102. 260 PRINT FNF(14,22) NP DCLEAR:A$="":B$=""
  103. 265 PRINT FNF(16,9)DSCR;:INPUT"Enter first name of Player #1--- ";A$:IF NP=2 THEN PRINT FNF(17,9);:INPUT"Enter first name of Player #2--- ";B$ ELSE B$=""
  104. 270 L1=LEN(A$):IF L1=0 THEN 265 ELSE FOR X=1 TO L1
  105. 275 IF ASC(MID$(A$,X,1))>90 THEN MID$(A$,X,1)=CHR$(ASC(MID$(A$,X,1))-32)
  106. 280 NEXT:L2=LEN(B$):IF NP=2 AND L2=0 THEN 265 ELSE FOR X=1 TO L2
  107. 285 IF ASC(MID$(B$,X,1))>90 THEN MID$(B$,X,1)=CHR$(ASC(MID$(B$,X,1))-32)
  108. 290 NEXT
  109. 295 '
  110. 300 '    *************************************
  111.  
  112.     *****      INITIAL SET-UP    *****
  113.  
  114.     *************************************
  115. 305 PRINT F(12) DSCR:GOSUB 5500
  116. 310 FOR X=1 TO ND:N=(X-1)*52:FOR Y=1 TO 52:A(N+Y)=Y:NEXT Y,X
  117. 315 FOR L=1 TO 104:X=INT(RND(C)*100):Y=INT(RND(C)*100):A=A(X):A(X)=A(Y):A(Y)=A
  118. 320 NEXT:'        GOSUB 385
  119. 325 J=1:GOSUB 5020:PRINT I7:GOTO 500
  120. 330 '
  121. 350 '    *************************************
  122.  
  123.     *****        SHUFFLE        *****
  124.  
  125.     *************************************
  126. 355 LC=1:RANDOMIZE COUNTER+FNRN(COUNTER):GOSUB 5025
  127. 360 PRINT F(20) E1:PRINT E2:PRINT E3:PRINT E2:PRINT E1;
  128. 365 FOR L=1 TO 104:X=FNRN(C):Y=FNRN(C):A=A(X):A(X)=A(Y):A(Y)=A
  129. 370 GOSUB 380:NEXT L:'        GOSUB 385
  130. 375 J=1:IF JS=0 THEN PRINT CLS$:GOTO 5020 ELSE PRINT F(19) DSCR
  131. 380 IF L=10 OR L=30 OR L=50 OR L=70 OR L=90 THEN PRINT F(20) E1:PRINT E2:PRINT E2:PRINT E2:PRINT E1;:RETURN ELSE IF L=20 OR L=40 OR L=60 OR L=80 THEN PRINT F(20) E1:PRINT E2:PRINT E3:PRINT E2:PRINT E1;:RETURN ELSE RETURN
  132. 385 FOR L=C-14 TO C-3:J=L:GOSUB 350:R1=R:J=L+3:GOSUB 350:IF R=R1 THEN FOR L1=LC TO 40:IF A(L1)<>A(L) THEN A=A(L1):A(L1)=A(L):A(L)=A:LC=LC+1:NEXT
  133. 390 RETURN
  134. 395 '
  135. 400 '    *************************************
  136.  
  137.     *****    DETERMINE SUIT, RANK    *****
  138.  
  139.     *************************************
  140. 410 AJ=A(J):S=INT((AJ-1)/13):R=AJ-S*13: 'GOSUB 430
  141. 420 RETURN
  142. 430 IF M=3 THEN RETURN ELSE PRINT F(1) DCLEAR"Suit="S+1"    Rank="R"   ---  ";
  143. 440 INPUT"Input Rank  (1-13)";RR:IF RR<>0 THEN R=RR
  144. 450 GOSUB 460:A(J)=S*13+R:PRINT F(1) DCLEAR:RETURN
  145. 460 IF A(J)=(S+1)*13+R THEN S=S+1:RETURN ELSE RETURN
  146. 470 '
  147. 500 '    *************************************
  148.  
  149.     *****       PLACE BETS        *****
  150.  
  151.     *************************************
  152. 504 'TB(1)=T1:TB(2)=T2:JS=0:GOTO 555
  153. 505 TB(1)=T1:TB(2)=T2:GOSUB 76:XF=1:PRINT FNF(8,1) A$"   ";
  154. 510 FOR X=1 TO NP:PRINT FNF(10,XF)"    Last Bet was:  ";
  155. 515 TT=TB(X):GOSUB 84:PRINT FNF(12,XF)DSCR;:INPUT"    Place Bet_____ ";TB$
  156. 520 TB=VAL(TB$):IF TB<>0 THEN TB(X)=TB
  157. 525 IF TB(X)=0 THEN TB(X)=50
  158. 530 IF TB(X)>50000! THEN L$=" Maximum Bet is $ 50,000.00 "+I7:GOTO 570
  159. 535 PRINT FNF(12,XF+19);:TT=TB(X):GOSUB 84
  160. 540 IF TB(X)=9999 THEN PRINT CLS$:PRINT:PRINT"End of Program":PRINT:SYSTEM
  161. 545 IF X=1 AND NP=2 THEN XF=41:PRINT FNF(8,XF) B$"   ";
  162. 550 T1=TB(1):T2=TB(2):NEXT:JS=0:FOR TX=1 TO 300:NEXT
  163. 555 IF J>C-10 THEN GOSUB 350
  164. 560 GOSUB 600:JS=0:GOTO 700
  165. 565 '
  166. 570 L$=FNF(12,XF+4)+L$:GOSUB 5075:GOSUB 80:PRINT
  167. 575 TB(1)=T1:TB(2)=T2:GOTO 515
  168. 580 '
  169. 600 '    *************************************
  170.  
  171.     *****       DISPLAY CARDS    *****
  172.  
  173.     *************************************
  174. 605 PRINT CLS$:BJ=0:PRINT F(3) DL
  175. 610 FOR N=1 TO 2:FOR M=1 TO 3 STEP 3-NP
  176. 615 IF M<>3 OR N<>1 THEN 620 ELSE 650
  177. 620 IF NP=1 AND M=2 THEN M=3
  178. 625 GOSUB 2050:A(108+M)=A(108+M)+R
  179. 630 AA(M,N)=R:JJ(M,N)=J-1
  180. 635 NEXT M,N:RETURN
  181. 650 '    *************************************
  182.  
  183.     *****    (Dealer's 1st Card)    *****
  184.  
  185.     *************************************
  186. 655 GOSUB 400:A(0)=A(J):J=J+1:IF R>9 THEN R=10
  187. 660 IF R=1 THEN R=1001
  188. 665 N=1:GOSUB 2000:PRINT STRING$(3,11) STRING$(8,8) D1 DDOWN D1 DDOWN D1
  189. 670 A(111)=R:PRINT F(20) DL
  190. 675 GOTO 635
  191. 700 '    *************************************
  192.  
  193.     *****       DEALER ACE ???    *****
  194.  
  195.     *************************************
  196. 705 X=0:Y=0:IF R=1001 THEN 800
  197. 710 IF A(111)=1011 THEN 900
  198. 715 GOTO 1000
  199. 800 '    *************************************
  200.  
  201.     *****      INSURANCE, etc.    *****
  202.  
  203.     *************************************
  204. 805 GOSUB 110:GOSUB 5050:GOSUB 845
  205. 810 IX=INKEY$:IF IX="" THEN 810 ELSE X=VAL(IX)
  206. 815 IF X<1 OR X>2 THEN 810
  207. 820 IF NP=1 THEN 840
  208. 825 GOSUB 110:GOSUB 5055:GOSUB 845
  209. 830 IY=INKEY$:IF IY="" THEN 830 ELSE Y=VAL(IY)
  210. 835 IF Y<1 OR Y>2 THEN 830
  211. 840 IF A(111)<>1011 THEN 950 ELSE 900
  212. 845 PRINT F(22) DSCR;:GOSUB 5010:PRINT" "L$" ";:GOSUB 5015
  213. 850 PRINT FNF(22,LEN(L$)+9) INSUR$;:RETURN
  214. 900 '    *************************************
  215.  
  216.     *****    Dealer Blackjack !!    *****
  217.  
  218.     *************************************
  219. 905 GOSUB 110:H=J:J=0:N=1:M=3:GOSUB 2100
  220. 910 PRINT FNF(17,32)DJ F(22) DSCR:L$="DEALER"
  221. 915 J=H:BJ(3)=BJ(3)+1
  222. 920 IF X=1 THEN TB(1)=0
  223. 925 IF Y=1 THEN TB(2)=0
  224. 930 V=21:BD=9:GOTO 2590
  225. 950 '    *************************************
  226.  
  227.     *****    NO Dealer Blackjack    *****
  228.  
  229.     *************************************
  230. 955 PRINT F(22) DSCR"   ... NO BLACKJACK ... ";:GOSUB 80
  231. 960 IF X=1 THEN T(1)=T(1)-TB(1)*.5
  232. 965 IF Y=1 THEN T(2)=T(2)=TB(2)*.5
  233. 970 '
  234. 1000 '    *************************************
  235.  
  236.     *****       DEAL and PLAY    *****
  237.  
  238.     *************************************
  239. 1010 PL=NP:FOR M=1 TO NP:N=3
  240. 1020 C1=AA(1,1):C2=AA(1,2):C3=AA(2,1):C4=AA(2,2)
  241. 1030 GOSUB 110
  242. 1040 IF M=1 THEN GOSUB 5050:GOSUB 58
  243. 1050 IF M=2 THEN GOSUB 5055:GOSUB 58
  244. 1060 IF JR=9 AND ((M=1 AND C1=1001) OR (M=2 AND C3=1001)) THEN IL=IJ ELSE IL=IK
  245. 1070 GOSUB 5015:PRINT F(23) IL DCLEAR;:X=5:DD=F
  246. 1080 IF JR=0 AND JS=0 THEN PRINT",  3--DOUBLE DOWN";:IF (M=1 AND N=3 AND C1=C2 AND C1<>10) OR (M=2 AND N=3 AND C3=C4 AND C3<>10) THEN PRINT", "I7;:GOSUB 5100
  247. 1090 PRINT"  ? ";
  248. 1100 IF IL=IJ THEN 5125
  249. 1110 II=INKEY$:IX=""
  250. 1120 IX=INKEY$:IF IX="" OR IX<"1" OR IX>"4" THEN 1120 ELSE X=VAL(IX)
  251. 1130 IF JR=9 AND ((M=1 AND C1=1001) OR (M=2 AND C3=1001)) THEN 1500
  252. 1140 IF JR=9 AND X>2 THEN 1110
  253. 1150 Q=M+108:IF N=3 AND A(Q)=1011 THEN 1500
  254. 1160 IF X=1 THEN 1400
  255. 1170 IF X=2 THEN GOSUB 74:GOTO 1500
  256. 1180 IF X=3 THEN 1600
  257. 1190 IF X=4 THEN 1700
  258. 1200 '
  259. 1400 '    *************************************
  260.  
  261.     *****        H I T        *****
  262.  
  263.     *************************************
  264. 1410 GOSUB 74:GOSUB 2050
  265. 1420 A(Q)=A(Q)+R
  266. 1430 IF A(Q)<1000 AND A(Q)>21 THEN 1460
  267. 1440 IF A(Q)-(INT(A(Q)/1000)*1000)>21 THEN 1460
  268. 1450 N=N+1:IF DD="DD" THEN DD=D:GOTO 1500 ELSE 1060
  269. 1460 GOSUB 110:BU=BU+1:BX=1:GOSUB 5150:'        BUST
  270. 1470 '
  271. 1500 '    *************************************
  272.  
  273.     *****         S T A N D        *****
  274.  
  275.     *************************************
  276. 1510 GOSUB 110:JS=0:IF N=3 AND A(Q)=1011 THEN T(M+2)=T(M+2)+1:BJ=BJ+1:BJ(M)=BJ(M)+1:GOSUB 1540:IF JR=9 THEN GOSUB 80:IF BJ>1 AND (C1=1001 OR C3=1001) THEN BJ=BJ-1
  277. 1520 IF JR=9 THEN RETURN
  278. 1530 NEXT M:GOTO 2500
  279. 1540 IF M=1 THEN PRINT FNF(6,32)DJ;:RETURN ELSE PRINT FNF(11,32)DJ;:RETURN
  280. 1550 '
  281. 1600 '    *************************************
  282.  
  283.     *****    D O U B L E   D O W N    *****
  284.  
  285.     *************************************
  286. 1610 IF N<>3 THEN 1110
  287. 1620 DD="DD":TB(M)=TB(M)*2:GOTO 1400
  288. 1630 '
  289. 1700 '    *************************************
  290.  
  291.     *****     S P L I T   P A I R    *****
  292.  
  293.     *************************************
  294. 1710 IF (M=1 AND N=3 AND C1=C2 AND C1<>10) OR (M=2 AND N=3 AND C3=C4 AND C3<>10) THEN 1760 ELSE 1110
  295. 1720 IF M=1 THEN PRINT I1 DCLEAR ELSE PRINT I2 DCLEAR
  296. 1730 FOR X=1 TO 5:PRINT DCLEAR:IF X>1 THEN 1750
  297. 1740 IF M=1 THEN GOSUB 5050 ELSE GOSUB 5055
  298. 1750 NEXT:RETURN
  299. 1760 PRINT F(23) IK DSCR;:PL=PL+1:BC=BC+M
  300. 1770 FOR JX=1 TO 2:GOSUB 1720:BX=0
  301. 1780 JL=J:J=JJ(M,JX):N=1:GOSUB 2050:A(Q)=R:J=JL
  302. 1790 N=2:GOSUB 2050:A(Q)=A(Q)+R:N=3
  303. 1800 JR=9:GOSUB 1060
  304. 1810 IF M=1 AND JX=1 THEN JA=A(Q):A(Q)=0 : IF BX=1 THEN BB=1
  305. 1820 IF M=1 AND JX=2 THEN JB=A(Q):A(Q)=JA: IF BX=1 THEN BB=BB+2
  306. 1830 IF M=2 AND JX=1 THEN JC=A(Q):A(Q)=0 : IF BX=1 THEN BB=BB+4
  307. 1840 IF M=2 AND JX=2 THEN JD=A(Q):A(Q)=JC: IF BX=1 THEN BB=BB+8
  308. 1850 NEXT JX:JR=0:IF BB=0 THEN BU=0:BB=16:GOTO 1530
  309. 1860 IF BB=15 THEN BU=2:GOTO 1530
  310. 1870 IF NP=1 AND BB=3 THEN BU=1:GOTO 1530 ELSE BU=NP-1:GOTO 1530
  311. 1880 '
  312. 2000 '    *************************************
  313.  
  314.     *****    DRAW CARD OUTLINE    *****
  315.  
  316.     *************************************
  317. 2010 GOSUB 2240:GOSUB 5030:PRINT ITL ITM ITR DOWN;
  318. 2020 PRINT ITL F7 ITL DOWN ITL F7 ITL DOWN ITL F7 ITL DOWN;
  319. 2030 PRINT IBL IBM IBR;:GOSUB 5035:RETURN
  320. 2040 '
  321. 2050 JS=9
  322. 2100 '    *************************************
  323.  
  324.     *****    PRINT SUIT and RANK    *****
  325.  
  326.     *************************************
  327. 2110 GOSUB 400:GOSUB 2000:PRINT STRING$(3,11) STRING$(8,8);
  328. 2120 IF R=1  THEN PRINT"  ACE  ";:R=1001:GOTO 2170
  329. 2130 IF R=11 THEN PRINT" JACK  ";:R=10:GOTO 2170
  330. 2140 IF R=12 THEN PRINT" QUEEN ";:R=10:GOTO 2170
  331. 2150 IF R=13 THEN PRINT" KING  ";:R=10:GOTO 2170
  332. 2160 IF R=10 THEN PRINT"  10   "; ELSE PRINT"  "R"  ";
  333. 2170 GOSUB 5200
  334. 2180 IF S<=0 THEN PRINT" HEART";:GOTO 2220
  335. 2190 IF S=1  THEN PRINT" D'MND";:GOTO 2220
  336. 2200 IF S=2  THEN PRINT" SPADE";:GOTO 2220
  337. 2210 IF S=3  THEN PRINT" CLUBS";
  338. 2220 J=J+1:IF J>C THEN GOSUB 350
  339. 2230 RETURN
  340. 2240 P=N-1:IF M=1 THEN 2250 ELSE IF M=2 THEN 2260 ELSE 2270
  341. 2250 IF N=1 THEN PRINT I1;:RETURN ELSE PRINT I1 STRING$(P*10,12);:RETURN
  342. 2260 IF N=1 THEN PRINT I2;:RETURN ELSE PRINT I2 STRING$(P*10,12);:RETURN
  343. 2270 IF N=1 THEN PRINT I3;:RETURN ELSE PRINT I3 STRING$(P*10,12);:RETURN
  344. 2280 '
  345. 2500 '    *************************************
  346.  
  347.     *****    S C O R E   H A N D S    *****
  348.  
  349.     *************************************
  350. 2510 PRINT F(21) DSCR:GOSUB 110:PRINT F3;:L$="DEALER":GOSUB 5060
  351. 2520 N=1:M=3:W=J:J=0:GOSUB 2100:J=W:VV=0
  352. 2530 V=A(111):N=3:IF BU=PL OR BJ=2 OR (BU=PL-1 AND BJ=1) THEN VV=1:'
  353.  
  354.     Both players have finished.
  355. 2540 UX=0:W=V/1000:V=V-W*1000:X=0:IF W>0 THEN X=1
  356. 2550 IF V>16 THEN 2590
  357. 2560 IF X>0 AND V+10>16 AND V+10<22 THEN V=V+10:GOTO 2590
  358. 2570 IF VV=1 THEN 2590 ELSE GOSUB 2050
  359. 2580 V=V+R+W*1000:N=N+1:GOTO 2540:'    Dealer gets another card.
  360. 2590 FOR X=1 TO NP:U=A(108+X):'        U=Player,   V=Dealer
  361. 2600 Y=U/1000:U=U-Y*1000
  362. 2610 IF Y>0 AND U+10<22 THEN U=U+10:'    Add 10 if Ace is present.
  363. 2620 U(X)=U:IF U>21.5 THEN U=0:'    Player's hand went BUST.
  364. 2630 IF T(X+2)>0 THEN GOSUB 60:'    T(X+2) had Blackjack!
  365. 2640 BU=C+X:H=BU+2:IF V>21 AND VV=0 THEN V=1:GOSUB 5150 ELSE GOSUB 3200:'
  366.  
  367.         Dealer (also) went BUST.
  368. 2650 PRINT F3 L$:IF BC=0 THEN 2690:'    No split hands.
  369. 2660 IF (X=1 AND BC=2) OR (X=2 AND BC<2) THEN 2690 ELSE 2750
  370. 2670 '
  371. 2680 '    **********    No SPLIT hands
  372. 2690 IF V=U THEN WP=3:P(X)=P(X)+1:GOTO 2720
  373. 2700 IF V>U THEN WP=2:L(X)=L(X)+1:GOSUB 108:GOTO 2720
  374. 2710 IF V<U THEN WP=1:W(X)=W(X)+1:GOSUB 104
  375. 2720 MX=M:M=X:GOSUB 70:M=MX:PRINT PS$ DCLEAR;D(WP);:GOTO 2790
  376. 2730 '
  377. 2740 '    **********    Score SPLIT hands
  378. 2750 IF V=U THEN PP(X)=PP(X)+1:GOTO 2790
  379. 2760 IF V>U THEN LL(X)=LL(X)+1:GOSUB 108:GOTO 2790
  380. 2770 IF V<U THEN WW(X)=WW(X)+1:GOSUB 104
  381. 2780 '
  382. 2790 IF BB=0 THEN 2910:'          IF BB=0 then NO splits/GOTO next player.
  383. 2800 IF X=1 THEN 2810 ELSE 2830:'    else Score SPLITS .....
  384. 2810 IF BC=0 OR BC=2 THEN 2910:'    ..... for Player #1
  385. 2820 IF UX=9 THEN 2850 ELSE U=JB:UX=9:GOTO 2600
  386. 2830 IF BC=0 OR BC=1 THEN 2910:'    ..... for Player #2
  387. 2840 IF UX=9 THEN 2850 ELSE U=JD:UX=9:GOTO 2600
  388. 2850 IF PP(X)=2 THEN WP=6:P(X)=P(X)+1:GOTO 2910
  389. 2860 IF WW(X)=2 THEN WP=4:W(X)=W(X)+1:GOTO 2910
  390. 2870 IF LL(X)=2 THEN WP=5:L(X)=L(X)+1:GOTO 2910
  391. 2880 IF PP(X)=1 AND WW(X)=1 THEN WP=7:W(X)=W(X)+1:GOTO 2910
  392. 2890 IF PP(X)=1 AND LL(X)=1 THEN WP=8:L(X)=L(X)+1:GOTO 2910
  393. 2900 IF WW(X)=1 AND LL(X)=1 THEN WP=9:P(X)=P(X)+1
  394. 2910 MX=M:M=X:GOSUB 70:M=MX:PRINT PS$ DCLEAR;D(WP);:UX=0:T(X+2)=0:NEXT
  395. 2920 PRINT F(23)">>>>>  Press <";:L$=" T ":GOSUB 5075:PRINT"> only if you ";
  396. 2930 PRINT"want TOTALS displayed.   ";:I=INKEY$:COUNT=0
  397. 2940 FK=INKEY$:IF FK="" THEN COUNT=COUNT+1:GOTO 2960
  398. 2950 IF FK="T" OR FK="t" THEN 3000 ELSE FK="XX":GOTO 3000
  399. 2960 IF COUNT>350 THEN 500 ELSE 2940
  400. 2970 '
  401. 3000 '    *************************************
  402.  
  403.     *****        PRINT SUMMARY    *****
  404.  
  405.     *************************************
  406. 3010 PRINT CLS$:FOR X=107 TO 111:A(X)=0:NEXT
  407. 3020 BD=0:BC=0:BU=0:BB=0:JA=0:JB=0:JC=0:JD=0
  408. 3030 FOR X=1 TO 2:PP(X)=0:WW(X)=0:LL(X)=0:NEXT:TH=TH+1:IF FK="XX" THEN 500
  409. 3040 X=1:GOSUB 76:PRINT F(7) A$;
  410. 3050 IF T(X)=0 THEN L$="EVEN" ELSE IF T(X)<0 THEN L$="LOST" ELSE L$="WON"
  411. 3060 IF T(X)=0 THEN PRINT" is ";:GOSUB 5060:PRINT":  $ 0.00";
  412. 3070 IF T(X)<0 THEN PRINT" has ";:GOSUB 5060:PRINT": ";:TT=T(X):GOSUB 84
  413. 3080 IF T(X)>0 THEN PRINT" has ";:GOSUB 5060:PRINT": ";:TT=T(X):GOSUB 84
  414. 3090 IF X=1 THEN PRINT F(7); ELSE PRINT F(9);
  415. 3100 PRINT STRING$(35,12)"BJ= ";:BK=BJ(X):GOSUB 52
  416. 3110 PRINT"    W= ";:BK=W(X):GOSUB 52
  417. 3120 PRINT"   L= ";: BK=L(X):GOSUB 52
  418. 3130 PRINT"   P= ";: BK=P(X):GOSUB 52
  419. 3140 PRINT:PRINT
  420. 3150 IF NP=2 AND X=1 THEN X=2:PRINT B$;:GOTO 3050
  421. 3160 PRINT DS:PRINT:PRINT TAB(43)"TOTAL HANDS= ";TH
  422. 3170 PRINT TAB(43)"DEALER BJ's= ";BJ(3):PRINT:PRINT DS
  423. 3180 PRINT F(23)"Press <ANY KEY> to continue. ";:I=INKEY$
  424. 3190 IN=INKEY$:IF IN="" THEN 3190 ELSE 500
  425. 3200 IF V=1 OR BD=9 THEN RETURN
  426. 3210 PRINT FNF(17,61)" "V CHR$(8) CHR$(34) STRING$(4,8) CHR$(34);:RETURN
  427. 4000 '    *************************************
  428.  
  429.     *****     DISPLAY INSTRUCTIONS    *****
  430.  
  431.     *************************************
  432. 4005 GOSUB 76:PRINT F(8);
  433. 4010 PRINT F"     This BLACKJACK program enables the operator to play head-"
  434. 4015 PRINT F"to-head with the computer, simulating the exact rules as those"
  435. 4020 PRINT F"on the Las Vegas strip.":PRINT
  436. 4025 PRINT F"     The cards are dealt from one or two 52-card decks until a"
  437. 4030 PRINT F"hand starts with  less than 12 cards remaining,  in which case"
  438. 4035 PRINT F"they are shuffled again.":PRINT  
  439. 4040 PRINT F"     The dealer ";:L$="must":GOSUB 5060
  440. 4045 PRINT" HIT all totals up to 16  and STAND on all"
  441. 4050 PRINT F"totals of 17 and above.":PRINT:L$="repeat your last bet"
  442. 4055 PRINT F"     When placing your bet,  you may  ";:GOSUB 5060
  443. 4060 PRINT"  by ":PRINT F"simply pressing <RETURN>."
  444. 4065 FTEMP="continue.":GOSUB 6030
  445. 4070 PRINT CLS$
  446. 4075 PRINT"The ";:L$="INSURANCE":GOSUB 5060
  447. 4080 PRINT" bet is offered at half the player's bet when the dealer's"
  448. 4085 PRINT"up-card is an Ace.":PRINT
  449. 4090 PRINT"You may ";:L$="DOUBLE DOWN":GOSUB 5060
  450. 4095 PRINT" on any two cards,  and  receive one more card while"
  451. 4100 PRINT"the original bet is doubled.":PRINT
  452. 4105 PRINT"You may ";:L$="SPLIT":GOSUB 5060
  453. 4110 PRINT" any pair, but resplitting is not allowed.  Also, only one"
  454. 4115 PRINT"card is dealt to each of a pair of split aces."
  455. 4120 PRINT:PRINT:PRINT
  456. 4125 PRINT F"THE ";:L$=" COMMANDS ":GOSUB 5075
  457. 4130 PRINT" ARE AS FOLLOWS:"
  458. 4135 PRINT F;F"1 -- HIT (draw another card)"
  459. 4140 PRINT F;F"2 -- STAND (stand on current total)"
  460. 4145 PRINT F;F"3 -- DOUBLE DOWN (double your bet and draw one card)"
  461. 4150 PRINT F;F"4 -- SPLIT PAIR (form two hands from a pair with the"
  462. 4155 PRINT F;F;F"original bet on each hand)"
  463. 4160 L$=F(21)+"To exit program, enter ":GOSUB 5060:L$=" 9999 ":GOSUB 5075
  464. 4165 L$=" as a Bet.             GOOD LUCK!         ":GOSUB 5060
  465. 4170 FTEMP="START the game.":GOSUB 6030:PRINT CLS$
  466. 4175 FTEMP="*":GOSUB 100:GOTO 210
  467. 4180 '
  468. 5000 '    **************************************************
  469.  
  470.     **********    MISC. SUBROUTINES    **********
  471.  
  472.     **************************************************
  473. 5005 '
  474. 5010 PRINT ESC "B0";:RETURN:'        Inverse Video ON/OFF
  475. 5015 PRINT ESC "C0";:RETURN:'
  476. 5020 PRINT ESC "B4";:RETURN:'        Turn Cursor ON/OFF
  477. 5025 PRINT ESC "C4";:RETURN:'
  478. 5030 PRINT ESC "B1";:RETURN:'        Reduced Intensity ON/OFF
  479. 5035 PRINT ESC "C1";:RETURN:'
  480. 5040 PRINT ESC "B3";:RETURN:'        Underline ON/OFF
  481. 5045 PRINT ESC "C3";:RETURN:'
  482. 5050 L$=A$:PRINT F1;:GOTO 5060:'    Underline A$
  483. 5055 L$=B$:PRINT F2;:'            Underline B$
  484. 5060 GOSUB 5040:PRINT L$;:GOSUB 5045:RETURN:'    Underline On/Off Subroutine
  485. 5065 '                    -----------------------------------
  486. 5070 GOSUB 5010:GOSUB 5030:PRINT L$;:GOSUB 5015:GOTO 5035:'    Rvrse Video
  487. 5075 GOSUB 5010:PRINT L$;:GOTO 5015:'                BRITE Video
  488. 5080 '
  489. 5100 GOSUB 5025:L$=" 4--SPLIT PAIR ":FOR XT=1 TO 6:GOSUB 5075:FOR TX=1 TO 150
  490. 5105 NEXT:PRINT STRING$(15,8) L$;:FOR TX=1 TO 175:NEXT:PRINT STRING$(15,8);
  491. 5110 NEXT XT:GOSUB 5020:PRINT LEFT$(L$,14)I7;:RETURN
  492. 5115 '
  493. 5125 FKEY=FNF(23,55):GOSUB 5025
  494. 5130 IX=INKEY$:IF IX="" THEN 5135 ELSE 5225
  495. 5135 FOR TX=1 TO 300:NEXT:PRINT FKEY"       ";
  496. 5140 FOR TX=1 TO 150:NEXT:PRINT FKEY"ANY KEY";:GOTO 5130
  497. 5145 '
  498. 5150 PRINT F3"DEALER"
  499. 5155 GOSUB 5025:GOSUB 70:FOR AT=1 TO 3:'        Flash "BUST" ..........
  500. 5160 PRINT PS$".BUST.";:FOR TA=1 TO 200:NEXT:'                    ...
  501. 5165 PRINT PS$ DCLEAR;:FOR TA=1 TO 100:NEXT TA,AT:PRINT PS$".BUST.";:'        ...
  502. 5170 FOR TIMER=1 TO 600:NEXT:GOSUB 5020:PRINT PS$ DCLEAR:RETURN:'        ...
  503. 5175 '
  504. 5200 PRINT DOWNR;:RETURN:'      Go DOWN one line
  505. 5225 PRINT F(24);:GOSUB 74:GOSUB 5020:GOTO 1130
  506. 5230 '
  507. 5245 '    *****  Dealer 1st Card
  508. 5250 N=1:GOSUB 2000:PRINT STRING$(3,11) STRING$(8,8) D DDOWN D DDOWN D;:RETURN
  509. 5255 '
  510. 5500 '    ***************************************
  511.  
  512.     ***** PRINT INITIAL "Shuffle" BOX *****
  513.  
  514.     ***************************************
  515. 5510 GOSUB 5025:PRINT FNF(16,3);:FT="        "
  516. 5520 PRINT FT SPC(6) E1
  517. 5530 PRINT FT SPC(3) FG;:GOSUB 5580:PRINT FG
  518. 5540 PRINT FT SPC(3) FG;:GOSUB 5570:PRINT FG
  519. 5550 PRINT FT SPC(3) FG;:GOSUB 5580:PRINT FG
  520. 5560 PRINT FT SPC(3) E1;:RETURN
  521. 5570 L$=F7:GOSUB 5070:PRINT "= = = SHUFFLING = = =";:GOTO 5070
  522. 5580 L$=STRING$(35,32):GOTO 5070
  523. 5590 '
  524. 6000 '    *************************************
  525.  
  526.     *****    INKEY$ SUBROUTINES    *****
  527.  
  528.     *************************************
  529. 6010 K$=INKEY$:I$=""
  530. 6020 I$=INKEY$:IF I$="" THEN 6020 ELSE RETURN
  531. 6030 '
  532. 6040 PRINT F(24)"  "E5"   Press <RETURN> to ";FTEMP"  ";
  533. 6050 K$=INKEY$:II=""
  534. 6060 II=INKEY$:IF II<>CHR$(13) THEN 6060 ELSE RETURN
  535. 6070 '
  536. 7000 '    *************************************
  537.  
  538.     *****      Set Up Variables    *****
  539.  
  540.     *************************************
  541. 7005 FB="   "+STRING$(70,42):FL="   ***"+STRING$(64,32)+"***":GOSUB 100
  542. 7010 IJ=CHR$(187)+" Only ONE CARD dealt to each split Ace. "+CHR$(183)
  543. 7015 IJ=IJ+"     Press <ANY KEY>":IK="OPTIONS:    1--HIT,  2--STAND"
  544. 7020 ITL=CHR$(213):ITM=STRING$(7,131):ITR=CHR$(215):IBL=CHR$(149)
  545. 7025 IBM=STRING$(7,176):IBR=CHR$(181):DOWN=CHR$(10)+STRING$(9,8)
  546. 7030 DL=STRING$(75,132):DJ="*** BLACKJACK ***":DCLEAR=CHR$(24):DSCR=CHR$(23)
  547. 7035 DS=STRING$(75,45):F=STRING$(6,32):F7=STRING$(7,32):FG=CHR$(42)
  548. 7040 FS=STRING$(60,12):ESC=CHR$(27):IE=ESC+"=":GOSUB 5020:E5=STRING$(7,132)
  549. 7045 FOR X=1 TO 24:F(X)=IE+CHR$(31+X)+" ":NEXT:DOWNR=CHR$(10)+STRING$(7,8)
  550. 7050 PS$(1)=F(4):PS$(2)=F(9):PS$(3)=F(15):INSUR$="INSURANCE   1=Yes/ 2=No "
  551. 7055 DEF FNF(X,Y)=IE+CHR$(X+31)+CHR$(Y+31):DEF FNRN(X)=INT(RND(X)*100)
  552. 7060 I1=FNF(4,5): I2=FNF(9,5):  I3=FNF(15,5): DT="BOTH SPLITS ":D1=" ***** "
  553. 7065 F1=FNF(5,61):F2=FNF(10,61):F3=FNF(16,61):DDOWN=CHR$(10)+STRING$(7,8)
  554. 7070 D(7)="WIN/PUSH SPLITS":D(8)="LOSE/PUSH SPLITS":D(9)="WIN/LOSE SPLITS"
  555. 7075 D(1)="WIN":D(2)="LOSE":D(3)="PUSH":D(4)=DT+D(1):D(5)=DT+D(2):D(6)=DT+D(3)
  556. 7080 E1=STRING$(37,179):E2=FG+STRING$(35,32)+FG:I7=CHR$(7)
  557. 7085 E3=FG+F7+"= = = SHUFFLING = = =        "+FG:RETURN
  558. 7090 '
  559. (3)
  560. 7080 E1=STRING$(37,179):E2=FG+STRING$(35,32)+FG:I7=CHR$(7)
  561. 7085 E3=FG+F7+"= = = SHUFFLING = = =        "+FG:RETURN
  562. 7