home *** CD-ROM | disk | FTP | other *** search
/ UpTime Volume 1 #4 / utv1n4s1.d64 / blackjack (.txt) next >
Commodore BASIC  |  2022-08-28  |  12KB  |  347 lines

  1. 5 if a=1 then 2550
  2. 10 print"[147]":poke 53281,0
  3. 110 rem   ****dimensions****
  4. 120 dimdu%(52),d%(52),d1$(13),d2$(13),s$(4),sc$(2),h%(12,8),s1(12),s2(12)
  5. 130 dimb(3,6),br(6),ai(6),r(12),rl(3),cl(8),pn$(6),pc$(6),k(3),cn(12)
  6. 140 rem   ***pre-initialize***
  7. 150 bo=53280:ba=53281:pt=646:lb$="[154]":lg$="[153]":wh$="":yw$="[158]":cy$="[159]"
  8. 160 sk=2:pokesk,0:ro=251:co=252:p2=679:pd=681:pr=683
  9. 170 fori=0to12:readq:pokep2+i,q:next
  10. 180 ak$="       press spacebar to continue"
  11. 190 bl$="                                        "
  12. 195 cs$="[147]":rv$="":of$="[146]"
  13. 200 goto2450
  14. 210 rem *******subroutines********
  15. 220 rem      ***deal deck***
  16. 230 printcs$:pokebo,11:pokeba,11:pokept,10:r=11:c=7:gosub430
  17. 240 print"the deck is being shuffled"
  18. 250 n=1:fori=1to4:forj=1to13:du%(n)=100*i+j:n=n+1:nextj,i
  19. 260 n=1:fori=1to52:x=int(rnd(1)*52)+1
  20. 270 ifdu%(x)<>0then300
  21. 280 x=x+1:ifx>52thenx=1
  22. 290 goto270
  23. 300 d%(i)=du%(x):du%(x)=0
  24. 310 nexti:nc=52:printcs$:pokebo,k(1):pokeba,k(2):pokept,k(3):return
  25. 320 rem     ***time loop***
  26. 330 t=150+ti
  27. 340 get a$:if a$="[140]" then 3000
  28. 345 ift>tithen340
  29. 350 return
  30. 360 rem    ***get delay***
  31. 370 getz$:ifz$=""then370
  32. 375 if z$="[140]" then 3000
  33. 380 return
  34. 390 rem   ***two-way get***
  35. 400 getz$:if z$="" or z$<>i$ and z$<>j$ then400
  36. 405 if z$="[140]" then 3000
  37. 410 return
  38. 420 rem   ***move cursor***
  39. 430 pokero,r:pokeco,c:sys683:return
  40. 440 rem   ***decode card***
  41. 450 su=int(cd/100):de=cd-100*su:return
  42. 460 rem  ***develop card string***
  43. 470 gosub450:cd$=c1$+sc$(fnc(su))+d1$(de)+c2$+sc$(fnc(su))+s$(su)+c3$
  44. 480 cd$=cd$+sc$(fnc(su))+d2$(de)+c4$:return
  45. 490 rem   ***update score***
  46. 500 gosub450:s1(p)=s1(p)+fnv(de):s2(p)=s2(p)+fnv(de)
  47. 510 if de=1 and (s1(p)=s2(p))then s1(p)=s1(p)+10
  48. 520 return
  49. 530 rem    ***print card***
  50. 540 gosub470
  51. 550 r=rl(fnh(p)):c=cl(cn(p)):gosub430:printcd$;:return
  52. 560 rem    ***erase all cards***
  53. 570 r=13:c=0:gosub430:x$=left$(bl$,39)
  54. 580 forz=1to12:printx$;:nextz:return
  55. 590 rem   ***print color strip***
  56. 600 printhm$pc$(p+6*(p>6));:forz=1to6:printrv$bl$of$;:nextz
  57. 601 print"[144][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183]";
  58. 602 r=23: c=13: gosub 430:print"[144]f8 for uptime"pc$(p+6*(p>6))
  59. 605 return
  60. 610 rem   ***bankroll overdrawn***
  61. 620 y=p:ify>6theny=y-6
  62. 630 gosub600:printhm$bk$" you are busted "           
  63. 640 print"have some money on me!"
  64. 645 br(y)=br(y)*-2:ai(y)=ai(y)+br(y)+(br(y)/2)
  65. 660 gosub 330:return
  66. 670 rem   ***print score***
  67. 680 printtab(24-len(x$));x$;:return
  68. 690 rem  ***print win score***
  69. 700 x$="won"+str$(w):printtab(38-len(x$));x$:return
  70. 710 rem  ***print tie score***
  71. 720 x$="broke even":printtab(38-len(x$));x$:return
  72. 730 rem  ***print lost score***
  73. 740 x$="lost"+str$(w):printtab(38-len(x$));x$:return
  74. 750 rem   ****main game routines****
  75. 760 gosub230
  76. 770 pokebo,11:pokeba,15:forp=1tonp
  77. 780 rem   ***take bets***
  78. 790 gosub600:printhm$""bk$spc(20-((len(pn$(p))+7)/2));
  79. 795 printpn$(p)tn$
  80. 800 print""eb$": ";:lm=4:gosub4000:x=val(gf$)
  81. 810 ifx<2thengosub600:printhm$bk$"minimum bet=$2":goto800
  82. 820 ifx>500thengosub600:printhm$bk$"maximum bet=$500":goto800
  83. 830 b(1,p)=int(x):br(p)=br(p)-b(1,p):ifbr(p)<0thengosub620
  84. 840 nextp
  85. 850 rem  ***print dealer's hand***
  86. 860 p=0:r=7:c=1:gosub430:printbu$tab(13)"dealer's hand"
  87. 870 cn(p)=cn(p)+1:h%(p,cn(p))=d%(nc):cd=d%(nc):nc=nc-1:cd$=bc$:gosub550
  88. 880 gosub500
  89. 890 cn(p)=cn(p)+1:h%(p,cn(p))=d%(nc):cd=d%(nc):nc=nc-1:gosub540:gosub500
  90. 900 ifde<>1then970
  91. 910 rem  ***take insurance bets***
  92. 920 forp=1tonp:gosub600:printhm$""bk$spc(20-((len(pn$(p))+7)/2)) pn$(p)tn$
  93. 930 print:print"insurance bet? (y/n)":i$="y":j$="n":gosub400
  94. 940 ifz$=j$then960
  95. 950 b(2,p)=b(1,p)/2:br(p)=br(p)-b(1,p)/2:ifbr(p)<0thengosub620
  96. 960 nextp:p=0
  97. 970 ifs1(p)<>21then1100
  98. 980 rem    ***dealer blackjack***
  99. 990 gosub600:printhm$""bk$spc(10)"dealer has blackjack":t=8:gosub330:r(0)=100
  100. 1000 cd=h%(0,1):cn(0)=1:gosub540
  101. 1010 forp=1tonp:gosub600:printhm$bk$ tab(20-((len(pn$(p))+7)/2)) pn$(p)tn$:cn(p)=0
  102. 1020 r=13:c=1:gosub430:printbu$ tab(20-((len(pn$(p))+7)/2))pn$(p)"'s hand"
  103. 1030 fori=1to2:cn(p)=cn(p)+1:h%(p,cn(p))=d%(nc):cd=d%(nc):nc=nc-1:gosub540
  104. 1040 gosub500:nexti
  105. 1050 r(p)=s1(p):ifs1(p)=21thenr(p)=100
  106. 1060 ifr(p)<>100thengosub600:printhm$""bk$spc(16)"you lose":goto1080
  107. 1070 printhm$""bk$spc(5)"blackjack-your bet is returned"
  108. 1080 t=8:gosub330:gosub570:nextp:goto1710
  109. 1090 rem  ***deal player's hands***
  110. 1100 forp=1tonp
  111. 1110 r=13:c=1:gosub430:printbu$ tab(20-((len(pn$(p))+7)/2))pn$(p)"'s hand"
  112. 1120 gosub600:printhm$""bk$spc(20-((len(pn$(p))+7)/2)) pn$(p)tn$:cn(p)=0
  113. 1130 fori=1to2:cn(p)=cn(p)+1:h%(p,cn(p))=d%(nc):cd=d%(nc):nc=nc-1:gosub540
  114. 1140 gosub500:nexti
  115. 1150 rem    ***player blackjack***
  116. 1155 if s1(p)<>21 then 1180
  117. 1160 gosub600:printhm$""bk$bj$:r(p)=100:t=8:gosub330
  118. 1165 if np>1 then 1510
  119. 1166 goto 1710
  120. 1170 rem    ***check for pairs***
  121. 1180 cd=h%(p,1):gosub450:d1=de:cd=h%(p,2):gosub450:d2=de:ifd1<>d2then1300
  122. 1190 gosub600:printhm$""bk$spc(9)"split your pair? (y/n)"
  123. 1195 i$="y":j$="n":gosub400
  124. 1200 ifz$=j$then1300
  125. 1210 rem  ***split the pair***
  126. 1220 b(3,p)=b(1,p):br(p)=br(p)-b(1,p):ifbr<0thengosub620
  127. 1230 pokesk,(peek(sk))or(2^p):h%(p+6,1)=h%(p,2):h%(p,2)=0:cn(p)=1:gosub570
  128. 1240 r=13:c=1:gosub430:printbu$pn$(p)"'s hand"
  129. 1250 s1(p)=0:s2(p)=0:cd=h%(p,1):gosub540:gosub500:p=p+6:cn(p)=1
  130. 1260 r=19:c=1:gosub430:printbu$pn$(p-6)"'s split hand"
  131. 1270 cd=h%(p,1):gosub540:gosub500:p=p-6
  132. 1280 h%(2,p)=d%(nc):cd=d%(nc):nc=nc-1:cn(p)=cn(p)+1:gosub540:gosub500
  133. 1290 rem  ***one down for double***
  134. 1300 ifs2(p)<9ors2(p)>11then1420
  135. 1310 gosub600:printhm$""bk$spc(7)"one down for double? (y/n)"
  136. 1315 i$="y":j$="n":gosub400
  137. 1320 ifz$=j$then1420
  138. 1330 y=p:v=1:ify>6theny=y-6:v=3
  139. 1340 br(y)=br(y)-b(v,y):ifbr(y)<0thengosub620
  140. 1350 b(v,y)=2*b(v,y)
  141. 1360 cn(p)=cn(p)+1:h%(p,cn(p))=d%(nc):cd=d%(nc):nc=nc-1:gosub540:gosub500
  142. 1370 ifs1(p)<22thenr(p)=s1(p):goto1390
  143. 1380 r(p)=s2(p):ifr(p)>21thenprint:printbs$:t=8:gosub330:goto1400
  144. 1390 gosub600:printhm$""bk$ys$;r(p):t=8:gosub330
  145. 1400 goto1510
  146. 1410 rem   ***play regular hand***
  147. 1420 gosub600:printhm$bk$ht$:i$="y":j$="n":gosub400:ifz$=j$then1460
  148. 1430 cn(p)=cn(p)+1:h%(p,cn(p))=d%(nc):cd=d%(nc):nc=nc-1:gosub540:gosub500
  149. 1440 ifs2(p)>21then1470
  150. 1450 goto1420
  151. 1460 ifs1(p)<22thenr(p)=s1(p):goto1480
  152. 1470 r(p)=s2(p)
  153. 1480 ifr(p)<22then1490
  154. 1481 gosub600:printhm$""bk$bs$:t=8:gosub330:ifnp>1 then 1510
  155. 1485 if np=1 then 1710
  156. 1490 gosub600:printhm$""bk$ys$;r(p):t=8:gosub330
  157. 1500 rem ***check & adjust for split hand***
  158. 1510 ifp>6thenp=p-6:goto1560
  159. 1520 if(peek(sk)and(2^p))<>2^pthen1560
  160. 1530 p=p+6:cn(p)=cn(p)+1:h%(p,cn(p))=d%(nc):cd=d%(nc):nc=nc-1:gosub540:gosub500
  161. 1540 ifs1(p)=21then1160
  162. 1550 goto1300
  163. 1560 gosub570:nextp
  164. 1570 rem   ***finish dealer hand***
  165. 1580 p=0:cn(p)=1:cd=h%(p,1):gosub540:t=6:gosub330
  166. 1590 if r(p+6)<>100 or r(0)=100 then 1600
  167. 1595 rem w=1.5*b(3,p):br(p)=br(p)+2.5*b(3,p):gosub700:goto 1990
  168. 1600 cn(p)=2
  169. 1610 ifs1(p)>16then1640
  170. 1620 cn(p)=cn(p)+1:h%(p,cn(p))=d%(nc):cd=d%(nc):nc=nc-1:gosub540:gosub500
  171. 1630 t=6:gosub330:goto1610
  172. 1640 ifs1(p)>16ands1(p)<22thenr(p)=s1(p):goto1690
  173. 1650 ifs2(p)<17then1620
  174. 1660 ifs2(p)>16ands2(p)<22thenr(p)=s2(p):goto1690
  175. 1670 gosub600:printhm$bk$"dealer busts-all remaining players win"
  176. 1675 t=8:gosub330
  177. 1680 r(p)=s2(p):goto1710
  178. 1690 gosub600:printhm$bk$spc(10)"dealer's score is";r(p):t=8:gosub330
  179. 1700 rem  ***print summary***
  180. 1710 printcs$;:pokebo,k(1):pokeba,k(2):pokept,k(3):zy=0
  181. 1720 printtab(16)"summary":printtab(16)"[163][163][163][163][163][163][163]"
  182. 1730 print"dealer's score=";:ifr(0)=100thenprint" blackjack":goto1750
  183. 1740 printr(0);:ifr(0)>21thenprint"bust"
  184. 1750 print:print"name-bet"tab(20)"score"tab(31)"result"
  185. 1760 print"[163][163][163][163][163][163][163][163]"tab(20)"[163][163][163][163][163]"tab(31)"[163][163][163][163][163][163]":ifzy=1thenzy=0:goto2040
  186. 1770 forp=1tonp:printpn$(p)"'s
  187. 1780 [153][163]4)"regular bet";
  188. 1790 [139]r(p)[178]100[167]x$[178]"bj":[141]680:[137]1810
  189. 1800 x$[178][196](r(p)):[141]680
  190. 1810 [139]r(p)[178]100[175]r(0)[179][177]100[167]w[178]1.5[172]b(1,p):br(p)[178]br(p)[170]2.5[172]b(1,p):[141]700:[1