arismoko

monitor bj

Sep 30th, 2021 (edited)
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Init
  2. print("Enter your bet here:")
  3. term.redirect(peripheral.wrap("top"))
  4. term.setBackgroundColor(colors.green)
  5. term.setTextColor(colors.red)
  6. term.clear()
  7. function center(str)
  8.   curX,curY = term.getCursorPos()
  9.   maxX,maxY = term.getSize()
  10.   maxX = maxX / 2
  11.   maxX = maxX - (#str/2)
  12.   term.setCursorPos(maxX,curY)
  13.   print(str)
  14. end
  15. deckCount = false
  16. cardCount = false
  17. analysis = {}
  18.  
  19. -- Start Game
  20. paintutils.drawFilledBox(1,7,51,11,colors.lightGray)
  21. term.setCursorPos(1,8)
  22. term.setTextColor(colors.red)
  23. center("Blackjack")
  24. term.setCursorPos(1,10)
  25. term.setTextColor(colors.yellow)
  26. center("Deluxe")
  27. sleep(3)
  28. faceCount = 0
  29. for i=1,19 do
  30.   paintutils.drawFilledBox(1,i,51,i,colors.green)
  31.   sleep(0)
  32. end
  33. function shuffle()
  34. faceCount = 0
  35. term.setBackgroundColor(colors.green)
  36. term.clear()
  37. term.setCursorPos(1,9)
  38. term.setTextColor(colors.red)
  39. center("Shuffling deck...")
  40. cards = {
  41. "A", "A", "A", "A",
  42. "J", "J", "J", "J",
  43. "K", "K", "K", "K",
  44. "Q", "Q", "Q", "Q",
  45. "2", "2", "2", "2",
  46. "3", "3", "3", "3",
  47. "4", "4", "4", "4",
  48. "5", "5", "5", "5",
  49. "6", "6", "6", "6",
  50. "7", "7", "7", "7",
  51. "8", "8", "8", "8",
  52. "9", "9", "9", "9",
  53. "10", "10", "10", "10",
  54. }
  55. deck = {}
  56. for i,v in pairs(cards) do
  57.   repeat
  58.     pos = math.random(1,52)
  59.   until deck[pos] == nil
  60.   deck[pos] = v
  61.   sleep(0)
  62. end
  63. end
  64. shuffle()
  65. playerHand = {}
  66. dealerHand = {}
  67. cash = 1000
  68. function countCard(sCard)
  69.   if sCard == "A" or sCard == "J" or sCard == "K" or sCard == "Q" or sCard == "10" then
  70.     faceCount = faceCount - 1
  71.   elseif sCard == "2" or sCard == "3" or sCard == "4" or sCard == "5" or sCard == "6" then
  72.     faceCount = faceCount + 1
  73.   end
  74. end
  75. function dealSelf(hide)
  76.   dealerHand[#dealerHand+1] = deck[#deck]
  77.   if not hide then
  78.     countCard(deck[#deck])
  79.   end
  80.   deck[#deck] = nil
  81. end
  82. function dealPlayer()
  83.   playerHand[#playerHand+1] = deck[#deck]
  84.   countCard(deck[#deck])
  85.   deck[#deck] = nil
  86. end
  87. function drawCard(card,x,y) do
  88.   term.setBackgroundColor(colors.red)
  89.   term.setTextColor(colors.green)
  90.   if card == "flipped" then
  91.     term.setBackgroundColor(colors.red)
  92.     term.setTextColor(colors.green)
  93.     term.setCursorPos(x,y)
  94.     write("+-+")
  95.     term.setCursorPos(x,y+1)
  96.     write("|*|")
  97.     term.setCursorPos(x,y+2)
  98.     write("+-+")
  99.   elseif card == "10" then
  100.     term.setCursorPos(x,y)
  101.     write("10 ")
  102.     term.setCursorPos(x,y+1)
  103.     write("   ")
  104.     term.setCursorPos(x,y+2)
  105.     write(" 10")
  106.   else
  107.     term.setCursorPos(x,y)
  108.     write(card.."  ")
  109.     term.setCursorPos(x,y+1)
  110.     write("   ")
  111.     term.setCursorPos(x,y+2)
  112.     write("  "..card)
  113.   end
  114.   end
  115. end
  116. function getHandValue(tHand)
  117.   nValue = 0
  118.   nAces = 0
  119.   for i,v in pairs(tHand) do
  120.     if v == "A" then
  121.       nAces = nAces + 1
  122.       nValue = nValue + 11
  123.     elseif v == "2" then
  124.       nValue = nValue + 2
  125.     elseif v == "3" then
  126.       nValue = nValue + 3
  127.     elseif v == "4" then
  128.       nValue = nValue + 4
  129.     elseif v == "5" then
  130.       nValue = nValue + 5
  131.     elseif v == "6" then
  132.       nValue = nValue + 6
  133.     elseif v == "7" then
  134.       nValue = nValue + 7
  135.     elseif v == "8" then
  136.       nValue = nValue + 8
  137.     elseif v == "9" then
  138.       nValue = nValue + 9
  139.     elseif v == "10" then
  140.       nValue = nValue + 10
  141.     elseif v == "J" then
  142.       nValue = nValue + 10
  143.     elseif v == "K" then
  144.       nValue = nValue + 10
  145.     elseif v == "Q" then
  146.       nValue = nValue + 10
  147.     end
  148.   end
  149.   repeat
  150.     if nValue > 21 and nAces > 0 then
  151.       nAces = nAces - 1
  152.       nValue = nValue - 10
  153.     end
  154.   until nAces <= 0 or nValue <= 21
  155.   if nAces > 0 then
  156.     soft = true
  157.   else
  158.     soft = false
  159.   end
  160.   return nValue,soft
  161. end
  162. dealerShowing = false
  163. buttons = false
  164. function redraw()
  165.   term.setBackgroundColor(colors.green)
  166.   term.clear()
  167.   term.setTextColor(colors.red)
  168.   spacing = 25-(#dealerHand*2)
  169.   for i,v in pairs(dealerHand) do
  170.     if dealerShowing or i == 1 then
  171.       drawCard(v,spacing,3)
  172.     else
  173.       drawCard("flipped",spacing,3)
  174.     end
  175.     spacing = spacing + 4
  176.   end
  177.   spacing = 25-(#playerHand*2)
  178.   for i,v in pairs(playerHand) do
  179.     if i == #playerHand and doubled and not dealerShowing then
  180.       drawCard("flipped",spacing,13)
  181.     else
  182.       drawCard(v,spacing,13)
  183.     end
  184.     spacing = spacing + 4
  185.   end
  186.   if buttons then
  187.     term.setCursorPos(10,17)
  188.     term.setBackgroundColor(colors.lightGray)
  189.     term.setTextColor(colors.gray)
  190.     write(" Stand ")
  191.     term.setCursorPos(18,17)
  192.     if doubled then
  193.       term.setBackgroundColor(colors.gray)
  194.       term.setTextColor(colors.lightGray)
  195.     else
  196.       term.setBackgroundColor(colors.lightGray)
  197.       term.setTextColor(colors.gray)
  198.     end
  199.     write(" Hit ")
  200.     term.setCursorPos(24,17)
  201.     if cash >= (bet*2) and not doubled then
  202.       term.setBackgroundColor(colors.lightGray)
  203.       term.setTextColor(colors.gray)
  204.     else
  205.       term.setBackgroundColor(colors.gray)
  206.       term.setTextColor(colors.lightGray)
  207.     end
  208.     write(" Double ")
  209.     term.setCursorPos(33,17)
  210.     if #playerHand == 2 and playerHand[1] == playerHand[2] then
  211.       term.setBackgroundColor(colors.lightGray)
  212.       term.setTextColor(colors.gray)
  213.     else  
  214.       term.setBackgroundColor(colors.gray)
  215.       term.setTextColor(colors.lightGray)
  216.     end
  217.     write(" Split ")
  218.   end
  219.   term.setCursorPos(2,16)
  220.   term.setBackgroundColor(colors.green)
  221.   term.setTextColor(colors.red)
  222.   write("Cash:")
  223.   term.setCursorPos(2,17)
  224.   term.setTextColor(colors.lime)
  225.   write("$"..tostring(cash))
  226.   term.setCursorPos(45,16)
  227.   term.setTextColor(colors.red)
  228.   if deckCount then
  229.     write("Deck:")
  230.     term.setCursorPos(46,17)
  231.     term.setTextColor(colors.lightGray)
  232.     write(tostring(#deck))
  233.   end
  234.   if cardCount then
  235.     write("Count:")
  236.     term.setCursorPos(46,17)
  237.     term.setTextColor(colors.red)
  238.     write(tostring(faceCount))
  239.   end
  240.   if #playerHand > 0 then
  241.     term.setCursorPos(1,11)
  242.     term.setBackgroundColor(colors.green)
  243.     term.setTextColor(colors.gray)
  244.     if dealerShowing or not doubled then
  245.       center(tostring(getHandValue(playerHand)))
  246.     else
  247.       center("?")
  248.     end
  249.     term.setCursorPos(1,7)
  250.     if dealerShowing then
  251.       center(tostring(getHandValue(dealerHand)))
  252.     else
  253.       center("?")
  254.     end
  255.   end
  256. end
  257. function msg(str)
  258.   paintutils.drawFilledBox(1,8,51,10,colors.gray)
  259.   term.setCursorPos(1,9)
  260.   term.setTextColor(colors.red)
  261.   center(str)
  262. end
  263. function winAnim()
  264.   dollars = {}
  265.   for i=1,51 do
  266.     dollars[i] = math.random(-5,0)
  267.   end
  268.   term.setTextColor(colors.yellow)
  269.   term.setBackgroundColor(colors.green)
  270.   for i=1,40 do
  271.     for x,v in pairs(dollars) do
  272.       if v >= 1 and v <= 51 then
  273.         term.setCursorPos(x,v)
  274.         write(" ")
  275.       end
  276.       dollars[x] = dollars[x]+1
  277.       if (v+1) >= 1 and (v+1) <= 51 then
  278.         term.setCursorPos(x,v+1)
  279.         write("$")
  280.       end
  281.     end
  282.     sleep(0.1)
  283.   end
  284.   for i=1,19 do
  285.     paintutils.drawLine(1,i,51,i,colors.green)
  286.     sleep(0)
  287.   end
  288. end
  289. function log(str)
  290.   f = fs.open("/log","a")
  291.   f.writeLine(str)
  292.   f.close()
  293. end
  294. function playHand()
  295.   if cash == 0 then
  296.     optA = true
  297.     optB = true
  298.     optC = true
  299.     while true do
  300.     term.setBackgroundColor(colors.green)
  301.     term.clear()
  302.     paintutils.drawImage(paintutils.loadImage("/Blackjack/dollar"),1,1)
  303.     term.setBackgroundColor(colors.green)
  304.     term.setTextColor(colors.red)
  305.     term.setCursorPos(1,11)
  306.     center("You're ruined!")
  307.     term.setCursorPos(1,18)
  308.     term.setBackgroundColor(colors.lightGray)
  309.     term.setTextColor(colors.gray)
  310.     if optA then
  311.       term.setBackgroundColor(colors.lightGray)
  312.       term.setTextColor(colors.gray)
  313.     else
  314.       term.setBackgroundColor(colors.gray)
  315.       term.setTextColor(colors.lightGray)
  316.     end
  317.     center(" Move in with mom ")
  318.     term.setCursorPos(1,16)
  319.     if optB then
  320.       term.setBackgroundColor(colors.lightGray)
  321.       term.setTextColor(colors.gray)
  322.     else
  323.       term.setBackgroundColor(colors.gray)
  324.       term.setTextColor(colors.lightGray)
  325.     end
  326.     center(" Resort to crime  ")
  327.     term.setCursorPos(1,14)
  328.     if optC then
  329.       term.setBackgroundColor(colors.lightGray)
  330.       term.setTextColor(colors.gray)
  331.     else
  332.       term.setBackgroundColor(colors.gray)
  333.       term.setTextColor(colors.lightGray)
  334.     end
  335.     center("  Pray for money  ")
  336.     if true then
  337.       e,c,x,y = os.pullEvent('mouse_click')
  338.       if y == 18 and optA then
  339.         optA = false
  340.         if true then
  341.           msg("She bails you out!")
  342.           sleep(3)
  343.           cash = 500
  344.           break
  345.         end
  346.       elseif y == 16 and optB then
  347.         optB = false
  348.         if math.random(1,4) == 4 then
  349.           msg("You start a drug operation!")
  350.           sleep(3)
  351.           cash = 15000
  352.           break
  353.         else
  354.           msg("You'll get caught!")
  355.           sleep(3)
  356.         end
  357.       elseif y == 14 and optC then
  358.         optC = false
  359.         if math.random(1,2) == 2 then
  360.           msg("Your wish is granted!")
  361.           sleep(3)
  362.           cash = 1000
  363.           break
  364.         else
  365.           msg("You live in sin!")
  366.           sleep(3)
  367.         end
  368.       end
  369.     end
  370.     end
  371.   end
  372.   bet = 0
  373.   buttons = false
  374.   Blackjack = false
  375.   playerBust = false
  376.   dealerBust = false
  377.   dealerShowing = false
  378.   playerHand = {}
  379.   dealerHand = {}
  380.   if #deck < 12 then
  381.     shuffle()
  382.   end
  383.   doubled = false
  384.   redraw()
  385.   if not splitCard then
  386.     repeat
  387.       paintutils.drawFilledBox(10,17,39,17,colors.green)
  388.       term.setCursorPos(18,17)
  389.       term.setTextColor(colors.red)
  390.       write("Bet: ")
  391.       bet = tonumber(read())
  392.       if not bet then
  393.         bet = cash+1
  394.       end
  395.     until bet <= cash
  396.   end
  397.   if not splitCard then
  398.     dealPlayer()
  399.     redraw()
  400.     sleep(0.5)
  401.     dealSelf()
  402.     redraw()
  403.     sleep(0.5)
  404.     dealPlayer()
  405.     redraw()
  406.     sleep(0.5)
  407.     dealSelf(true)
  408.     redraw()
  409.   else
  410.     playerHand[#playerHand+1] = splitCard
  411.     bet = splitBet
  412.     splitCard = nil
  413.     splitBet = nil
  414.     dealSelf()
  415.     redraw()
  416.     sleep(0.5)
  417.     dealPlayer()
  418.     redraw()
  419.     sleep(0.5)
  420.     dealSelf(true)
  421.     redraw()
  422.     sleep(0.5)
  423.     msg("Playing Split Hand")
  424.     sleep(3)
  425.   end
  426.   continue = true
  427.   if getHandValue(playerHand) == 21 then
  428.     continue = false
  429.     Blackjack = true
  430.   end
  431.   while continue do
  432.     buttons = true
  433.     redraw()
  434.     if getHandValue(playerHand) > 21 then
  435.       playerBust = true
  436.       continue = false
  437.       break
  438.     end
  439.     e,c,x,y = os.pullEvent("monitor_touch")
  440.     if y == 17 then
  441.       if x >= 10 and x <= 16 then
  442.         -- Stand
  443.         break
  444.       end
  445.       if x >= 18 and x <= 22 then
  446.         -- Hit
  447.         if not doubled then
  448.           dealPlayer()
  449.         end
  450.       end
  451.       if x >= 24 and x <= 31 then
  452.         -- Double
  453.         if cash >= (bet*2) and not doubled then
  454.           doubled = true
  455.           dealPlayer()
  456.           bet = bet*2
  457.         end
  458.       end
  459.       if x >= 33 and x <= 39 then
  460.         -- Split
  461.         if playerHand[1] == playerHand[2] then
  462.           if #playerHand == 2 then
  463.             splitBet = bet
  464.             splitCard = playerHand[2]
  465.             playerHand[2] = nil
  466.             dealPlayer()
  467.           end
  468.         end
  469.       end
  470.     end
  471.   end
  472.   buttons = false
  473.   dealerShowing = true
  474.   countCard(dealerHand[2])
  475.   if continue then
  476.     for i=1,8 do
  477.       redraw()
  478.       value,soft = getHandValue(dealerHand)
  479.       if value < 17 then
  480.         dealSelf()
  481.         sleep(0.5)
  482.       elseif value == 17 and soft then
  483.         dealSelf()
  484.         sleep(0.5)
  485.       end
  486.     end
  487.   end
  488.   redraw()
  489.   if Blackjack then
  490.     cash = cash + (bet*1.5)
  491.     msg("Blackjack!")
  492.     analysis[#analysis+1] = "Blackjack"
  493.     sleep(2)
  494.     winAnim()
  495.     return
  496.   end
  497.   if playerBust then
  498.     cash = cash - bet
  499.     msg("You Bust!")
  500.     analysis[#analysis+1] = "bust"
  501.     sleep(3)
  502.     return
  503.   end
  504.   if getHandValue(dealerHand) > 21 then
  505.     cash = cash + bet
  506.     msg("Dealer Busts!")
  507.     analysis[#analysis+1] = "dealerbust"
  508.     sleep(2)
  509.     winAnim()
  510.     return
  511.   end
  512.   if getHandValue(dealerHand) > getHandValue(playerHand) then
  513.     cash = cash - bet
  514.     msg("You Lose!")
  515.     analysis[#analysis+1] = "lose"
  516.     sleep(3)
  517.     return
  518.   end
  519.   if getHandValue(dealerHand) == getHandValue(playerHand) then
  520.     msg("You Push!")
  521.     analysis[#analysis+1] = "push"
  522.     sleep(3)
  523.     return
  524.   end
  525.   if getHandValue(playerHand) > getHandValue(dealerHand) then
  526.     cash = cash + bet
  527.     msg("You Win!")
  528.     analysis[#analysis+1] = "win"
  529.     sleep(2)
  530.     winAnim()
  531.     return
  532.   end
  533. end
  534.  
  535. while true do
  536.   playHand()
  537.   if #deck < 12 then
  538.   term.setBackgroundColor(colors.gray)
  539.   term.clear()
  540.   term.setTextColor(colors.red)
  541.   cBlackjack = 0
  542.   cDealerbust = 0
  543.   cBust = 0
  544.   cLose = 0
  545.   cPush = 0
  546.   cWin = 0
  547.   for i,v in pairs(analysis) do
  548.     if v == "Blackjack" then
  549.       cBlackjack = cBlackjack + 1
  550.     elseif v == "dealerbust" then
  551.       cDealerbust = cDealerbust + 1
  552.     elseif v == "bust" then
  553.       cBust = cBust + 1
  554.     elseif v == "lose" then
  555.       cLose = cLose + 1
  556.     elseif v == "push" then
  557.       cPush = cPush + 1
  558.     elseif v == "win" then
  559.       cWin = cWin + 1
  560.     end
  561.   end
  562.   gameCount = cBlackjack + cDealerbust + cBust + cLose + cPush + cWin
  563.   startPoint = 2
  564.   colorz = {
  565.     [6] = colors.purple,
  566.     [4] = colors.lime,
  567.     [1] = colors.red,
  568.     [2] = colors.orange,
  569.     [5] = colors.green,
  570.     [3] = colors.yellow,
  571.   }
  572.   output = {
  573.     [1] = cBust,
  574.     [2] = cLose,
  575.     [3] = cPush,
  576.     [4] = cWin,
  577.     [5] = cDealerbust,
  578.     [6] = cBlackjack,
  579.   }
  580.   for i,v in pairs(output) do
  581.     paintutils.drawLine(startPoint,4,(startPoint+((v/gameCount)*49)-1),4,colorz[i])
  582.     startPoint = startPoint + ((v/gameCount)*49)
  583.   end
  584.   paintutils.drawPixel(1,4,colors.gray)
  585.   paintutils.drawPixel(51,4,colors.gray)
  586.   analysis = {}
  587.   term.setBackgroundColor(colors.gray)
  588.   term.setTextColor(colors.red)
  589.   term.setCursorPos(1,2)
  590.   center("Game Analysis")
  591.   term.setCursorPos(4,6)
  592.   term.setBackgroundColor(colors.gray)
  593.   term.setTextColor(colors.red)
  594.   write("Bust  ")
  595.   term.setTextColor(colors.orange)
  596.   write("Lose  ")
  597.   term.setTextColor(colors.yellow)
  598.   write("Push  ")
  599.   term.setTextColor(colors.lime)
  600.   write("Win  ")
  601.   term.setTextColor(colors.green)
  602.   write("Dealer Bust  ")
  603.   term.setTextColor(colors.purple)
  604.   write("Blackjack")
  605.   term.setTextColor(colors.gray)
  606.   term.setBackgroundColor(colors.lightGray)
  607.   term.setCursorPos(42,18)
  608.   write(" Close ")
  609.   repeat
  610.     e,c,x,y = os.pullEvent("mouse_click")
  611.   until x >= 42 and x <= 50 and y == 18
  612.   end
  613. end
Add Comment
Please, Sign In to add comment