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

使用示例:
创建角色: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}.

   
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值