# Lua Programming/A simple card game

A simple card Game.

When I was a lad, I'd copy acres of code from printed books to enter text games I could then play. The BASIC language was an OK start, but I'm struck at how messy it can get with all those GOTO statements. I re-wrote a simple game called ACEY DEUCY in lua trying to avoid the temptation to refactor too brutally.

There are lots of improvements you could make - why not have a try at making it better - or add graphics using Turtle or...

Any way - here 'tis:

```--aceydeucy.lua
--[[
Displays the intro to the game
ACEY DUCEY CARD GAME - Ported from BASIC to Lua
by Jason Wraxall
byteclub.com.au
]]
function showIntro()

print [[
********* ACEY DUCEY CARD GAME
CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY

ACEY-DUCEY IS PLAYED IN THE FOLLOWING MANNER
THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP
YOU HAVE AN OPTION TO BET OR NOT BET DEPENDING
ON WHETHER OR NOT YOU FEEL THE CARD WILL HAVE
A VALUE BETWEEN THE FIRST TWO.
IF YOU DO NOT WANT TO BET, ENTER A \$0 BET
]]

end

--[[
Initialises the global bankBalance and random number generator
]]
function initGame()

bankBalance = 100

math.randomseed( os.time() )
end

--[[
shows the card type
]]
function showCard(val)
local cards={ nil, 2, 3, 4, 5, 6, 7, 8, 9, 10, "JACK", "QUEEN", "KING", "ACE"}
return cards[val]
end

--[[
Displays the current bank balance (global)
]]
function showBalance()

print("YOU NOW HAVE "..bankBalance.." DOLLARS.")
print()
end

--[[
]]
bankBalance = bankBalance + amount
showBalance()
end

--[[
Generates a random card
]]
function dealCard()
local nextCardValue = math.random(2,14)
return nextCardValue
end

--[[
Deals cards returns a collection of two
]]
function dealCards()
print("HERE ARE THE NEXT TWO CARDS:")
local cardValues = {first=dealCard(),second=dealCard()}
print( "First Card:" .. showCard(cardValues.first) )
print( "Second Card:" .. showCard(cardValues.second) )

return cardValues

end

--[[
Inputs a bet value
]]
function getBet()

betOK = false
local betAmount = 0

-- Loop to get a valid bet or a zero bet
repeat
betAmount = tonumber(amount)
if betAmount==0 then
print("CHICKEN!!")
print()
betOK = true
end
if betAmount <= bankBalance then
betOK = true
else
print("SORRY, MY FRIEND, BUT YOU BET TOO MUCH.")
print("YOU HAVE ONLY " .. bankBalance .. " DOLLARS TO BET.")
end
until betOK

return betAmount
end

--[[
Deals another card and compares values
]]
function playRound( cardValues )
local playerCard = dealCard()
local firstCard = cardValues.first
local secondCard = cardValues.second

print( "Dealer Card" .. showCard(playerCard) )

local minValue = math.min( firstCard, secondCard )
local maxValue = math.max( firstCard, secondCard )

if playerCard>=minValue and playerCard <=maxValue then
print("YOU WIN!!!")
return true
end

print("You Lose!!")
return false
end

function endGameReplay()

print[[

]]

io.write("TRY AGAIN (Y/N)")
if repsonse == "Y" then
return true
else
return false
end

end

-- Main Loop - Here's when the action happens

showIntro()

done = false -- when true the game loop ends

initGame()

-- Game Loop
repeat
local cardValues = dealCards()
local betAmount = getBet()

if betAmount == 0 then
done=true -- user said they don't want to play anymore
else
if playRound(cardValues) then
else