-module(game). -author("trygvis"). -export([ game_loop/2, loop/1]). -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~s~n", [Id, Str]), From ! Str, loop(State); code_changed -> io:format("game ~p: code changed~n", [Id]), ?MODULE:loop(State); X -> io:format("unexpected message: ~p~n", [X]), loop(State) end.