mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-24 20:10:15 -08:00
99 lines
2.6 KiB
Lua
99 lines
2.6 KiB
Lua
-- rockscissors.lua
|
|
-- Ported by Brian Wilkins (BrianWilkinsFL)
|
|
-- Utilized has_key again and choice. A lot of these basic programs
|
|
-- follow a similar choice structure so I think I'll use these functions alot.
|
|
|
|
function getInput(prompt)
|
|
io.write(prompt)
|
|
io.flush()
|
|
local input = io.read("l")
|
|
if not input then --- test for EOF
|
|
print("GOODBYE")
|
|
os.exit(0)
|
|
end
|
|
return input
|
|
end
|
|
|
|
function has_key(table, key)
|
|
return table[key]~=nil
|
|
end
|
|
|
|
function choice(prompt, table)
|
|
resp = getInput(prompt)
|
|
while not has_key(table, resp) do
|
|
print("INVALID.")
|
|
resp = getInput(prompt)
|
|
end
|
|
return resp
|
|
end
|
|
|
|
function playGame(n)
|
|
local computerWins = 0
|
|
local humanWins = 0
|
|
itemChoices = {
|
|
["1"] = "PAPER",
|
|
["2"] = "SCISSORS",
|
|
["3"] = "ROCK",
|
|
}
|
|
print("GAME NUMBER " .. n)
|
|
|
|
math.randomseed(os.time())
|
|
computerChoice = math.random(1,3)
|
|
|
|
humanChoice = choice("3=ROCK...2=SCISSORS...1=PAPER\n1...2...3...WHAT'S YOUR CHOICE? ", itemChoices)
|
|
humanChoice = tonumber(humanChoice)
|
|
print("THIS IS MY CHOICE...")
|
|
|
|
print("... " .. itemChoices[tostring(computerChoice)])
|
|
|
|
-- Working around a Lua thing where I can't seem to interact
|
|
-- with function values outside of the function itself
|
|
-- So the total wins are calculated outside of this function
|
|
-- and summarized.
|
|
if computerChoice == humanChoice then
|
|
print("TIE GAME. NO WINNER.")
|
|
elseif computerChoice > humanChoice then
|
|
if humanChoice ~=1 or computerChoice ~= 3 then
|
|
computerWins = 1
|
|
print("WOW! I WIN!!!")
|
|
else
|
|
humanWins = 1
|
|
print("YOU WIN!!!")
|
|
end
|
|
elseif computerChoice == 1 then
|
|
if humanChoice ~= 3 then
|
|
humanWins = 1
|
|
print("YOU WIN!!!")
|
|
else
|
|
computerWins = 1
|
|
print("WOW! I WIN!!!")
|
|
end
|
|
end
|
|
return computerWins, humanWins
|
|
end
|
|
|
|
local games = 0
|
|
while games == 0 or games >= 11 do
|
|
resp = getInput("HOW MANY GAMES? ")
|
|
|
|
assert(tonumber(resp))
|
|
games = tonumber(resp)
|
|
if games < 11 then break end
|
|
|
|
print("SORRY, BUT WE AREN'T ALLOWED TO PLAY THAT MANY.")
|
|
end
|
|
|
|
totalComputerWins = 0
|
|
totalHumanWins = 0
|
|
|
|
for n=1, games, 1 do
|
|
computerWins, humanWins = playGame(n)
|
|
totalComputerWins = totalComputerWins + computerWins
|
|
totalHumanWins = totalHumanWins + humanWins
|
|
end
|
|
|
|
print("HERE IS THE FINAL GAME SCORE:")
|
|
print("I HAVE WON " .. totalComputerWins .. " GAME(S).")
|
|
print("YOU HAVE WON " .. totalHumanWins .." GAME(S).")
|
|
print("AND " .. games-(totalComputerWins+totalHumanWins) .. " GAME(S) ENDED IN A TIE.")
|
|
print("THANKS FOR PLAYING!!") |