aboutsummaryrefslogtreecommitdiff
path: root/tictactoe-2/apps/ttt_server/src/game.erl
diff options
context:
space:
mode:
Diffstat (limited to 'tictactoe-2/apps/ttt_server/src/game.erl')
-rw-r--r--tictactoe-2/apps/ttt_server/src/game.erl36
1 files changed, 36 insertions, 0 deletions
diff --git a/tictactoe-2/apps/ttt_server/src/game.erl b/tictactoe-2/apps/ttt_server/src/game.erl
new file mode 100644
index 0000000..8c6550a
--- /dev/null
+++ b/tictactoe-2/apps/ttt_server/src/game.erl
@@ -0,0 +1,36 @@
+-module(game).
+-author("trygvis").
+
+-export([
+ game_loop/2]).
+
+-import(ttt, [empty_board/0]).
+
+-record(state, {
+ id,
+ board = ttt:empty_board(),
+ player1,
+ player2}).
+
+game_loop(Id, Player1) -> loop(#state{
+ id = Id,
+ player1 = Player1}).
+
+loop(State) ->
+ Id = State#state.id,
+ receive
+ {From, join} when not is_pid(State#state.player2) ->
+ io:format("game ~p: player joined: ~p~n", [Id, From]),
+ From ! {joined, State#state.id},
+ loop(#state{player2 = From});
+ {From, join} ->
+ io:format("game ~p: busy: ~p~n", [Id, From]),
+ From ! {busy},
+ loop(State);
+ {From, show} ->
+ Str = ttt:format(State#state.board),
+ io:format("game ~p: current state:~n~p~n", [Id, Str]),
+ From ! Str,
+ loop(State)
+ end,
+ State.