Packages
islands_engine
0.2.59
0.2.65
0.2.64
0.2.63
0.2.62
0.2.61
0.2.60
0.2.59
0.2.58
0.2.56
0.2.55
0.2.54
0.2.53
0.2.52
0.2.51
0.2.50
0.2.49
0.2.48
0.2.47
0.2.46
0.2.45
0.2.44
0.2.43
0.2.42
0.2.41
0.2.40
0.2.39
0.2.38
0.2.37
0.2.36
0.2.35
0.2.34
0.2.33
0.2.32
0.2.31
0.2.30
0.2.29
0.2.28
0.2.27
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.13
0.2.12
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.81
0.1.80
0.1.79
0.1.78
0.1.77
0.1.76
0.1.75
0.1.73
0.1.72
0.1.71
0.1.70
0.1.69
0.1.68
0.1.67
0.1.66
0.1.65
0.1.64
0.1.63
0.1.62
0.1.61
0.1.60
0.1.59
0.1.58
0.1.57
0.1.56
0.1.55
0.1.54
0.1.53
0.1.52
0.1.51
0.1.50
0.1.49
0.1.48
0.1.47
0.1.46
0.1.45
0.1.44
0.1.43
0.1.42
0.1.41
0.1.40
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.0
Models the Game of Islands.
Current section
Files
Jump to
Current section
Files
lib/islands/engine/game_server/reply_tuple.ex
defmodule Islands.Engine.GameServer.ReplyTuple do
alias Islands.Engine.GameServer
alias Islands.{Game, PlayerID, Request, Tally}
@player_turns [:player1_turn, :player2_turn]
@position_actions [:position_island, :position_all_islands]
@timeout :timer.minutes(30)
@typedoc "Action like :add_player or reason like :duplicate_player_name"
@type action_or_reason :: atom
@type t :: {:reply, Tally.t(), Game.t(), timeout}
@spec new(Game.t(), PlayerID.t()) :: t
def new(game, player_id),
do: {:reply, Tally.new(game, player_id), game, @timeout}
@spec new(action_or_reason, Game.t(), Request.t(), PlayerID.t()) :: t
def new(:add_player = _action, game, request, player_id) do
reason =
case game.state.game_state do
:initialized -> :unexpected
:players_set -> :player2_already_added
game_state when game_state in @player_turns -> :player2_already_added
:game_over -> :game_over
end
new(reason, game, request, player_id)
end
def new(action, game, request, player_id) when action in @position_actions do
reason =
case game.state.game_state do
:initialized -> :player2_not_added
:players_set -> :islands_already_set
game_state when game_state in @player_turns -> :islands_already_set
:game_over -> :game_over
end
new(reason, game, request, player_id)
end
def new(:set_islands = _action, game, request, player_id) do
reason =
case game.state.game_state do
:initialized -> :player2_not_added
:players_set -> :unexpected
game_state when game_state in @player_turns -> :both_players_islands_set
:game_over -> :game_over
end
new(reason, game, request, player_id)
end
def new(:guess_coord = _action, game, request, player_id) do
reason =
case game.state.game_state do
:initialized -> :player2_not_added
:players_set -> :not_both_players_islands_set
game_state when game_state in @player_turns -> :not_player_turn
:game_over -> :game_over
end
new(reason, game, request, player_id)
end
def new(:stop = _action, game, request, player_id) do
reason =
case game.state.game_state do
:initialized -> :player2_not_added
:players_set -> :not_both_players_islands_set
game_state when game_state in @player_turns -> :not_player_turn
:game_over -> :game_over
end
new(reason, game, request, player_id)
end
def new(reason, game, request, player_id) do
game
|> Game.update_request(request)
|> Game.update_response({:error, reason})
|> GameServer.save()
|> new(player_id)
end
end