使用示例:
创建角色:Pid = player:login(Id).
角色加血:Pid ! {add_hp, 100}.
角色加魔:Pid ! {add_mp, 100}.
查看角色:Pid ! show.
创建角色:Pid = player:login(Id).
角色加血:Pid ! {add_hp, 100}.
角色加魔:Pid ! {add_mp, 100}.
查看角色:Pid ! show.
%% @author Rolong
%%
%% 使用示例:
%% 创建角色:Pid = player:login(Id).
%% 角色加血:Pid ! {add_hp, 100}.
%% 角色加魔:Pid ! {add_mp, 100}.
%% 查看角色:Pid ! show.
-module(player).
-compile(export_all).
-define(I(F), io:format(F++"~n", [])).
-define(I(F, A), io:format(F++"~n", A)).
-record(state, {
id = 0
,hp = 0
,mp = 0
}).
login(Id) ->
State = #state{id = Id, hp = 1, mp = 1},
create(State).
create(State)->
spawn(?MODULE, player, [State]).
player(State) ->
receive
Msg ->
{ok, State1} = ?MODULE:handle(Msg, State),
player(State1)
end.
handle({add_hp, AddHp}, #state{hp = Hp} = State) ->
NewHp = Hp + AddHp,
State1 = State#state{
hp = NewHp
},
?I("Add HP: ~w + ~w = ~w", [Hp, AddHp, NewHp]),
{ok, State1};
handle({add_mp, AddMp}, #state{mp = Mp} = State) ->
NewMp = Mp + AddMp,
State1 = State#state{
mp = NewMp
},
?I("Add MP: ~w + ~w = ~w", [Mp, AddMp, NewMp]),
{ok, State1};
handle(show, #state{id = Id, hp = Hp, mp = Mp} = State) ->
?I("ID: ~w, HP:~w, MP:~w", [Id, Hp, Mp]),
{ok, State};
handle(logout, _State) ->
?I("logout ..."),
%% TODO: Save to database ...
exit(normal);
handle(Msg, State) ->
?I("received undefined message:~p", [Msg]),
{ok, State}.