Current section
Files
Jump to
Current section
Files
src/rock_paper_scissors.erl
-module(rock_paper_scissors).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([play/2]).
-export_type([move/0, game_result/0]).
-type move() :: rock | paper | scissors.
-type game_result() :: {player1_wins, move(), move()} |
{player2_wins, move(), move()} |
{draw, move()}.
-file("/Users/bradleymehder/Developer/Frameworks/Gleam/playground/src/rock_paper_scissors.gleam", 26).
-spec move_to_string(move()) -> binary().
move_to_string(Move) ->
case Move of
rock ->
<<"Rock"/utf8>>;
paper ->
<<"Paper"/utf8>>;
scissors ->
<<"Scissors"/utf8>>
end.
-file("/Users/bradleymehder/Developer/Frameworks/Gleam/playground/src/rock_paper_scissors.gleam", 34).
-spec game_result_to_string(game_result()) -> binary().
game_result_to_string(Result) ->
case Result of
{player1_wins, Threw, Beat} ->
<<<<<<"Player 1 won - "/utf8, (move_to_string(Threw))/binary>>/binary,
" beats "/utf8>>/binary,
(move_to_string(Beat))/binary>>;
{player2_wins, Threw@1, Beat@1} ->
<<<<<<"Player 2 won - "/utf8, (move_to_string(Threw@1))/binary>>/binary,
" beats "/utf8>>/binary,
(move_to_string(Beat@1))/binary>>;
{draw, Move} ->
<<<<"Draw! Both players chose "/utf8,
(move_to_string(Move))/binary>>/binary,
"s"/utf8>>
end.
-file("/Users/bradleymehder/Developer/Frameworks/Gleam/playground/src/rock_paper_scissors.gleam", 13).
-spec play(move(), move()) -> binary().
play(Player_1_move, Player_2_move) ->
_pipe = case {Player_1_move, Player_2_move} of
{rock, scissors} ->
{player1_wins, rock, scissors};
{rock, paper} ->
{player2_wins, paper, rock};
{paper, rock} ->
{player1_wins, rock, paper};
{paper, scissors} ->
{player2_wins, scissors, paper};
{scissors, rock} ->
{player2_wins, rock, scissors};
{scissors, paper} ->
{player1_wins, scissors, paper};
{_, _} ->
{draw, Player_1_move}
end,
game_result_to_string(_pipe).