math.randomseed( os.time() ) user_score = 0 comp_score = 0 lookup = {} lookup["rock"] = {} lookup["rock"]["rock"] = "draw" lookup["rock"]["paper"] = "lose" lookup["rock"]["scissors"] = "win" lookup["paper"] = {} lookup["paper"]["rock"] = "win" lookup["paper"]["paper"] = "draw" lookup["paper"]["scissors"] = "lose" lookup["scissors"] = {} lookup["scissors"]["rock"] = "lose" lookup["scissors"]["paper"] = "win" lookup["scissors"]["scissors"] = "draw" function GetAIMove() local int_to_name = {"scissors","rock","paper"} return int_to_name[math.random(3)] end function EvaluateTheGuesses( user_guess, comp_guess ) print( "user_guess="..user_guess.." computer guess="..comp_guess) if ( lookup[user_guess][comp_guess] == "win" ) then print( "you win the round!" ) user_score = user_score + 1 elseif ( lookup[user_guess][comp_guess] == "lose" ) then print( "computer wins the round!" ) comp_score = comp_score + 1 else print( "draw!" ) end end --main game loop loop = true while loop == true do print ( "scores: user="..user_score.." computer="..comp_score ) print( "instructions: enter 'r' for rock, 's' for scissors, 'p' for paper, 'q' to quit the game." ) print( "your move> " ) user_guess = io.stdin:read "*l" local letter_to_string = {s="scissors", r="rock", p="paper"} if user_guess == "q" then loop = false elseif ( user_guess == "r" ) or ( user_guess == "p" ) or ( user_guess == "s" ) then comp_guess = GetAIMove() EvaluateTheGuesses( letter_to_string[user_guess], comp_guess ) else print( "invalid input. try again." ) end end