Last active
October 25, 2017 01:33
-
-
Save acabreragnz/99fc788e36f78ace00241fee04f681c2 to your computer and use it in GitHub Desktop.
Rock Scissors Paper game in Elixir! (remember to wrap this inside a module)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@weapons ~w(rock scissors paper)a | |
def rps(user_choice) when is_binary(user_choice), do: is_valid_choice(String.to_atom(user_choice)) | |
def rps(user_choice) when is_atom(user_choice), do: is_valid_choice(user_choice) | |
def rps(user_choice), do: {:lost, "Invalid type!"} | |
defp is_valid_choice(user_choice) when user_choice in @weapons, do: time_to_play(user_choice) | |
defp is_valid_choice(user_choice), do: {:lost, "Invalid choice!"} | |
defp time_to_play(user_choice) do | |
weapons = @weapons | |
computer_choice = Enum.random(weapons) | |
computer_choice_index = find_weapon_index(weapons, computer_choice) | |
user_choice_index = find_weapon_index(weapons, user_choice) | |
game_result = cond do | |
user_choice_index == computer_choice_index -> :draft | |
rem(user_choice_index + 1, 3) == computer_choice_index -> :win | |
true -> :lost | |
end | |
format_result_with_message(%{game_result: game_result, user_choice: user_choice, computer_choice: computer_choice}) | |
end | |
defp find_weapon_index(weapons, choice) do | |
Enum.find_index(weapons, & &1 == choice) | |
end | |
defp format_result_with_message(%{game_result: game_result, user_choice: user_choice, computer_choice: computer_choice}) do | |
{game_result, result_message(user_choice, computer_choice)} | |
end | |
defp result_message(user_choice, computer_choice) do | |
"You: #{user_choice}, Computer: #{computer_choice}" | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment