Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Blackjack
- ----- VARIABLES ------
- disk = peripheral.wrap("bottom")
- cardName = {"Ace of Spades", "Ace of Clubs", "Ace of Hearts", "Ace of Diamonds", "2 of Spades", "2 of Clubs", "2 of Hearts", "2 of Diamonds", "3 of Spades", "3 of Clubs", "3 of Hearts", "3 of Diamonds", "4 of Spades", "4 of Clubs", "4 of Hearts", "4 of Diamonds", "5 of Spades", "5 of Clubs", "5 of Hearts", "5 of Diamonds", "6 of Spades", "6 of Clubs", "6 of Hearts", "6 of Diamonds", "7 of Spades", "7 of Clubs", "7 of Hearts", "7 of Diamonds", "8 of Spades", "8 of Clubs", "8 of Hearts", "8 of Diamonds", "9 of Spades", "9 of Clubs", "9 of Hearts", "9 of Diamonds", "10 of Clubs", "10 of Spades", "10 of Hearts", "10 of Diamonds", "Jack of Clubs", "Jack of Spades", "Jack of Hearts", "Jack of Diamonds", "Queen of Clubs", "Queen of Spades", "Queen of Hearts", "Queen of Diamonds", "King of Clubs", "King of Spades", "King of Hearts", "King of Diamonds"}
- cardValue = {11, 11, 11, 11, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}
- playerCards = {}
- dealerVisibleCards = {}
- dealerHiddenCards = {}
- restricted = {}
- minCards = 1
- maxCards = 52
- stayPlayer = false
- stayDealer = false
- stay = false
- doubleDown = 0
- playerValue = 0
- dealerValue = 0
- dealerTrueValue = 0
- isAce = false
- playerAce = false
- dealerAce = false
- playerAceIsOne = false
- dealerAceIsOne = false
- y = 0
- pot = 0
- deleteTable = table
- clicked = false
- playerPlayedAce = false
- dealerPlayedAce = false
- restrictedNumber = {}
- ----- FUNCTIONS ------
- function activate()
- os.pullEvent("disk")
- end
- function waitClick()
- event, side, x, y = os.pullEvent("mouse_click")
- end
- function mWrite(message, x, y)
- term.setCursorPos(x,y)
- write(message)
- end
- function getCredits()
- if fs.exists("/disk/credits") == false then
- term.clear()
- mWrite("There is no credits on the disk.", 9, 9)
- mWrite("To get credits, go to the check-in counter", 4, 10)
- sleep(10)
- os.reboot()
- end
- f = fs.open("/disk/credits", "r")
- credits = f.readLine()
- f.close()
- f = fs.open("startCredits", "w")
- f.write(credits)
- f.close()
- credits = tonumber(credits)
- end
- function startingCredits()
- f = fs.open("startCredits", "r")
- startCredits = f.readLine()
- f.close()
- startCredits = tonumber(startCredits)
- end
- function drawCard()
- randomNum = math.random(1, #cardName)
- drawnCardName = cardName[randomNum]
- remove = table.remove(cardName, randomNum)
- if drawnCardName == "Ace of Spades" or drawnCardName == "Ace of Clubs" or drawnCardName == "Ace of Hearts" or drawnCardName == "Ace of Diamonds" then
- isAce = true
- end
- if #cardName < 5 then
- cardName = 0
- cardValue = 0
- cardName = {"Ace of Spades", "Ace of Clubs", "Ace of Hearts", "Ace of Diamonds", "2 of Spades", "2 of Clubs", "2 of Hearts", "2 of Diamonds", "3 of Spades", "3 of Clubs", "3 of Hearts", "3 of Diamonds", "4 of Spades", "4 of Clubs", "4 of Hearts", "4 of Diamonds", "5 of Spades", "5 of Clubs", "5 of Hearts", "5 of Diamonds", "6 of Spades", "6 of Clubs", "6 of Hearts", "6 of Diamonds", "7 of Spades", "7 of Clubs", "7 of Hearts", "7 of Diamonds", "8 of Spades", "8 of Clubs", "8 of Hearts", "8 of Diamonds", "9 of Spades", "9 of Clubs", "9 of Hearts", "9 of Diamonds", "10 of Clubs", "10 of Spades", "10 of Hearts", "10 of Diamonds", "Jack of Clubs", "Jack of Spades", "Jack of Hearts", "Jack of Diamonds", "Queen of Clubs", "Queen of Spades", "Queen of Hearts", "Queen of Diamonds", "King of Clubs", "King of Spades", "King of Hearts", "King of Diamonds"}
- cardValue = {11, 11, 11, 11, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}
- end
- return drawnCardName
- end
- function getValue()
- drawnCardValue = table.remove(cardValue, randomNum)
- return drawnCardValue
- end
- function playerCard()
- playerCard1 = drawCard()
- playerValue = playerValue + getValue()
- table.insert(playerCards, playerCard1)
- if isAce == true then
- playerAce = true
- isAce = false
- end
- playerCard2 = drawCard()
- playerValue = playerValue + getValue()
- table.insert(playerCards, playerCard2)
- if isAce == true then
- playerAce = true
- isAce = false
- end
- end
- function dealerCard()
- dealerVisibleCard1 = drawCard()
- dealerValue = dealerValue + getValue()
- table.insert(dealerVisibleCards, dealerVisibleCard1)
- if isAce == true then
- dealerAce = true
- isAce = false
- end
- dealerHiddenCard = drawCard()
- dealerHiddenValue = getValue()
- dealerTrueValue = dealerValue + dealerHiddenValue
- table.insert(dealerHiddenCards, dealerHiddenCard)
- if isAce == true then
- dealerAce = true
- isAce = false
- end
- end
- function hitCard(receiver)
- drawnCard = drawCard()
- table.insert(receiver, drawnCard)
- end
- function hitPlayer()
- hitCard(playerCards)
- playerValue = playerValue + getValue()
- if isAce == true then
- playerAce = true
- playerPlayedAce = false
- playerAceIsOne = false
- isAce = false
- end
- aceValue()
- normalScreen()
- end
- function hitDealer()
- hitCard(dealerVisibleCards)
- dealerValue = dealerValue + getValue()
- dealerTrueValue = dealerValue + dealerHiddenValue
- if isAce == true then
- dealerAce = true
- dealerPlayedAce = false
- dealerAceIsOne = false
- isAce = false
- end
- aceValue()
- normalScreen()
- sleep(0.5)
- end
- function dealerMove()
- if dealerTrueValue == 21 then
- stayDealer = true
- if stayPlayer == true then
- stay = true
- end
- elseif (playerValue > dealerTrueValue) and (dealerTrueValue < 20) then
- hitDealer()
- elseif (playerValue > dealerTrueValue) and (dealerAce == true) then
- hitDealer()
- else
- stayDealer = true
- if stayPlayer == true then
- stay = true
- end
- end
- sleep(0.5)
- end
- function doubleDownMove()
- credits = credits - (math.floor(pot/2))
- pot = pot * 2
- hitPlayer()
- stayPlayer = true
- sleep(0.5)
- end
- function hitOrStay()
- waitClick() -- venter p�83�A5 stay, hit eller double down
- if x >2 and x < 16 and y > 14 and y < 18 then -- hit
- doubleDown = 1
- hitPlayer()
- elseif x >20 and x < 33 and y > 14 and y < 18 and doubleDown == 0 then -- double down
- doubleDownMove()
- while stayDealer == false do
- dealerMove()
- end
- doubleDown = 1
- elseif x >37 and x < 50 and y > 14 and y < 18 then -- stay
- stayPlayer = true
- doubleDown = 1
- while stayDealer == false do
- dealerMove()
- end
- elseif dealerPlayedAce == true then
- dealerMove()
- end
- end
- function aceValue()
- if playerAce == true and playerValue > 21 then
- if playerPlayedAce == false then
- playerValue = playerValue - 10
- playerAceisOne = true
- playerPlayedAce = true
- end
- end
- if dealerAce == true and dealerTrueValue > 21 then
- if dealerPlayedAce == false then
- dealerTrueValue = dealerTrueValue - 10
- dealerAceIsOne = true
- dealerPlayedAce = true
- dealerStay = false
- stay = false
- end
- end
- end
- function checkBust()
- aceValue()
- if playerValue > 21 then
- playerBust()
- elseif dealerTrueValue > 21 and playerValue ~= 21 then
- dealerBust()
- end
- end
- function playerBust()
- isPlayerBust = true
- messageScreen("You busted!", 20, 16)
- dealerWin()
- end
- function dealerBust()
- isDealerBust = true
- messageScreen("Dealer busted!", 20,16)
- playerWin()
- end
- function resolve()
- if isPlayerBust or isDealerBust == true then
- isPlayerBust = false
- isDealerBust = false
- elseif dealerTrueValue == 21 then
- dealerBlackjack()
- elseif dealerTrueValue > playerValue and playerValue ~= 21 then
- dealerWin()
- elseif dealerTrueValue == playerValue then
- draw()
- elseif playerValue == 21 and dealerTrueValue ~= 21 then
- playerBlackjack()
- elseif dealerTrueValue < playerValue then
- playerWin()
- end
- checkBroke()
- end
- function draw()
- credits = credits + (math.floor(pot/2))
- messageScreen("Draw", 23, 16)
- stay = true
- end
- function dealerWin()
- messageScreen("Dealer wins", 20, 16)
- stay = true
- end
- function playerWin()
- credits = credits + pot
- messageScreen("You win!", 21, 16) -- player vinder
- stay = true
- end
- function dealerBlackjack()
- sleep(1)
- messageScreen("Dealer got Blackjack!", 15, 16)
- stay = true
- end
- function playerBlackjack()
- credits = credits + (math.floor(pot * 2))
- messageScreen("You got Blackjack!", 15, 16)
- stay = true
- end
- function checkBroke()
- if credits < 1 then
- broke()
- end
- end
- function broke()
- messageScreen("No more credits", 15, 16)
- writeCredits()
- sleep(10)
- os.reboot()
- end
- function checkCredit()
- if credits < 0 then
- setColor(colors.black, colors.lime)
- mWrite("No credits", 21,16)
- credits = 0
- pot = startCredits
- sleep(2)
- end
- if credits > startCredits then
- setColor(colors.black, colors.lime)
- --mWrite(startCredits, 24,16)
- credits = startCredits
- pot = 0
- end
- setColor(colors.white, colors.black)
- end
- function placeBet()
- pot = 0
- while true do
- waitClick()
- if x >15 and x < 20 and y == 15 then -- +1
- pot = pot +1
- credits = credits - 1
- checkCredit()
- betScreen()
- elseif x >15 and x < 20 and y == 16 then -- +10
- pot = pot +10
- credits = credits - 10
- checkCredit()
- betScreen()
- elseif x >15 and x < 20 and y == 17 then -- +100
- pot = pot +100
- credits = credits - 100
- checkCredit()
- betScreen()
- elseif x >32 and x < 37 and y == 15 then -- -1
- pot = pot -1
- credits = credits + 1
- checkCredit()
- betScreen()
- elseif x >32 and x < 37 and y == 16 then -- -10
- pot = pot -10
- credits = credits + 10
- checkCredit()
- betScreen()
- elseif x >32 and x < 37 and y == 17 then -- -100
- pot = pot -100
- credits = credits + 100
- checkCredit()
- betScreen()
- elseif x >23 and x < 29 and y == 17 then
- pot = pot * 2
- break
- end
- end
- end
- function isAcePlayed()
- if playerPlayedAce == true then
- playerPlayedAce = false
- if playerAceIsOne == false then
- playerValue = playerValue + 10
- end
- end
- end
- if dealerPlayedAce == true then
- dealerPlayedAce = false
- if dealerAceIsOne == false then
- dealerTrueValue = dealerTrueValue + 10
- end
- end
- function deleteLine(table, line)
- deleteTable.remove(table, line)
- end
- function playAgain()
- while clicked == false do
- waitClick()
- if x >6 and x < 20 and y > 6 and y < 12 then -- new game
- newGame()
- clicked = true
- elseif x >32 and x < 46 and y > 6 and y < 12 then -- Cash out
- cashOut()
- clicked = true
- end
- end
- end
- function cashOut()
- writeCredits()
- term.clear()
- mWrite("Writing credits to disk", 8,10)
- sleep(1.5)
- term.clear()
- mWrite("Thank you for playing", 9, 10)
- sleep(10)
- os.reboot()
- end
- function writeCredits()
- file = fs.open("/disk/credits", "w")
- file.write(tostring(credits))
- end
- function newGame()
- stay = false
- stayDealer = false
- satyPlayer = false
- playerCards = 0
- dealerVisibleCards = 0
- dealerHiddenCards = 0
- doubleDown = 0
- playerValue = 0
- dealerValue = 0
- dealerTrueValue = 0
- y = 0
- pot = 0
- isPlayerBust = false
- isDealerBust = false
- startCredits = credits
- isAce = false
- playerAce = false
- dealerAce = false
- playerAceIsOne = false
- dealerAceIsOne = false
- playerPlayedAce = false
- dealerPlayedAce = false
- clicked = false
- end
- function writePlayerHand()
- y = 7
- for i = 1, #playerCards do
- mWrite(playerCards[i], 4,y)
- y = y+1
- end
- end
- function writeDealerHand()
- y = 8
- for i = 1, #dealerVisibleCards do
- mWrite(dealerVisibleCards[i], 29,y)
- y = y+1
- end
- end
- function noCredits()
- if credits == nil or credits <= 0 or credits == "0.0.0" then
- messageScreen("No Credits", 21, 16)
- cashOut()
- end
- end
- ------------ SCREENS -------------
- function setColor(text, background)
- term.setTextColor(text)
- term.setBackgroundColor(background)
- end
- function drawImage(image)
- myImage = paintutils.loadImage(image)
- paintutils.drawImage(myImage, 1, 1)
- end
- function normalScreen()
- term.clear()
- drawImage("normalScreen")
- setColor(colors.black, colors.lightGray)
- mWrite("Your hand", 4,2)
- mWrite("Dealer hand", 39,2)
- mWrite("Credits", 16,2)
- mWrite("Pot", 31,2)
- setColor(colors.black, colors.white)
- mWrite(credits, 17,3)
- mWrite(pot, 30,3)
- mWrite("Hit", 8,16)
- mWrite("DoubleDown", 22,16)
- mWrite("Stay", 42,16)
- setColor(colors.white, colors.gray)
- mWrite(playerValue, 6,4)
- mWrite(dealerValue, 41,4)
- writePlayerHand()
- mWrite("Hidden", 29,7)
- writeDealerHand()
- setColor(colors.white, colors.black)
- end
- function betScreen()
- term.clear()
- drawImage("betScreen")
- setColor(colors.black, colors.green)
- mWrite("Place bet", 22,15)
- mWrite("place", 24,17)
- setColor(colors.black, colors.lime)
- mWrite(pot, 25,16)
- setColor(colors.black, colors.lightGray)
- mWrite("+1", 16,15)
- mWrite("+10", 16,16)
- mWrite("+100", 16,17)
- mWrite("-1", 33,15)
- mWrite("-10", 33,16)
- mWrite("-100", 33,17)
- mWrite("Credits", 16,2)
- setColor(colors.black, colors.white)
- mWrite(credits, 17,3)
- setColor(colors.white, colors.black)
- end
- function messageScreen(message, x, y)
- term.clear()
- drawImage("messageScreen")
- setColor(colors.black, colors.white)
- mWrite(message, x, y)
- setColor(colors.black, colors.lightGray)
- mWrite("Your hand", 4,2)
- mWrite("Dealer hand", 39,2)
- mWrite("Credits", 16,2)
- mWrite("Pot", 31,2)
- setColor(colors.black, colors.white)
- mWrite(credits, 17,3)
- mWrite(pot, 30,3)
- setColor(colors.white, colors.gray)
- mWrite(playerValue, 6,4)
- mWrite(dealerTrueValue, 41,4)
- mWrite(dealerHiddenCards[1], 29,7)
- writePlayerHand()
- writeDealerHand()
- setColor(colors.white, colors.black)
- sleep(3)
- end
- function newGameScreen()
- term.clear()
- drawImage("newGameScreen")
- setColor(colors.white, colors.black)
- mWrite("New game?", 22,9)
- setColor(colors.black, colors.white)
- mWrite("New game", 9,9)
- mWrite("Cash out", 35,9)
- setColor(colors.white, colors.black)
- end
- function startScreen()
- term.clear()
- startScreen = paintutils.loadImage("startScreenBlack")
- paintutils.drawImage(startScreen, 4, 2)
- setColor(colors.white, colors.black)
- mWrite("Insert Credit Disk to play", 13, 19)
- end
- --################Loop##############
- while true do
- startScreen()
- activate()
- getCredits()
- --noCredits()
- startingCredits()
- while true do
- newGame()
- playerCards = {}
- dealerVisibleCards = {}
- dealerHiddenCards = {}
- betScreen()
- placeBet()
- normalScreen()
- sleep(0.5)
- playerCard()
- sleep(0.5)
- dealerCard()
- sleep(0.5)
- normalScreen()
- while stay == false do
- hitOrStay()
- checkBust()
- end
- resolve()
- writeCredits()
- newGameScreen()
- playAgain()
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement