您的位置:首页 > 其它

Erlang入门:服务进程实例操作与练习2

2015-01-13 12:33 375 查看
使用示例:

创建角色: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}.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Erlang 入门教程 实例