61 lines
1.9 KiB
Lua
61 lines
1.9 KiB
Lua
function cpuMove()
|
|
local totalChance = record.R + record.P + record.S
|
|
if totalChance == 0 then -- First game, unweighted random
|
|
local choice = math.random(1, 3)
|
|
if choice == 1 then return "R" end
|
|
if choice == 2 then return "P" end
|
|
if choice == 3 then return "S" end
|
|
end
|
|
local choice = math.random(1, totalChance) -- Weighted random bit
|
|
if choice <= record.R then return "P" end
|
|
if choice <= record.R + record.P then return "S" end
|
|
return "R"
|
|
end
|
|
|
|
function playerMove() -- Get user input for choice of 'weapon'
|
|
local choice
|
|
repeat
|
|
os.execute("cls") -- Windows specific command, change per OS
|
|
print("\nRock, Paper, Scissors")
|
|
print("=====================\n")
|
|
print("Scores -\tPlayer:", score.player)
|
|
print("\t\tCPU:", score.cpu .. "\n\t\tDraws:", score.draws)
|
|
io.write("\nChoose [R]ock [P]aper or [S]cissors: ")
|
|
choice = io.read():upper():sub(1, 1)
|
|
until choice == "R" or choice == "P" or choice == "S"
|
|
return choice
|
|
end
|
|
|
|
-- Decide who won, increment scores
|
|
function checkWinner (c, p)
|
|
io.write("I chose ")
|
|
if c == "R" then print("rock...") end
|
|
if c == "P" then print("paper...") end
|
|
if c == "S" then print("scissors...") end
|
|
if c == p then
|
|
print("\nDraw!")
|
|
score.draws = score.draws + 1
|
|
elseif (c == "R" and p == "P") or
|
|
(c == "P" and p == "S") or
|
|
(c == "S" and p == "R") then
|
|
print("\nYou win!")
|
|
score.player = score.player + 1
|
|
else
|
|
print("\nYou lose!")
|
|
score.cpu = score.cpu + 1
|
|
end
|
|
end
|
|
|
|
-- Main procedure
|
|
math.randomseed(os.time())
|
|
score = {player = 0, cpu = 0, draws = 0}
|
|
record = {R = 0, P = 0, S = 0}
|
|
local playerChoice, cpuChoice
|
|
repeat
|
|
cpuChoice = cpuMove()
|
|
playerChoice = playerMove()
|
|
record[playerChoice] = record[playerChoice] + 1
|
|
checkWinner(cpuChoice, playerChoice)
|
|
io.write("\nPress ENTER to continue or enter 'Q' to quit . . . ")
|
|
until io.read():upper():sub(1, 1) == "Q"
|