Erlang入门:服务进程实例操作与练习2
2015-01-13 12:33
375 查看
使用示例:
创建角色: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}.
相关文章推荐
- Erlang入门:服务进程实例操作与练习1
- Erlang入门:服务进程实例操作与练习3
- Erlang入门:进程实例操作与练习2
- Erlang入门:进程实例操作与练习1
- Erlang入门:进程实例操作与练习3(选修)
- Erlang入门:gen_server实例操作与练习1
- Erlang入门:gen_server实例操作与练习2
- Erlang入门:构建application练习4(进程link的作用)
- WCF热门问题编程示例(2)多个实例调用一个WCF服务操作,需要等待服务响应吗
- [原创]Zenoss配置入门-监控Linux的进程和IP服务
- [sed与Awk教程入门与实例练习]
- Windows server 2012 新功能试用---- powershell 3.0 进程和服务的操作 推荐
- WCF热门问题编程示例(2)多个实例调用一个WCF服务操作,需要等待服务响应吗
- COM/DCOM开发练习之进程内组件实例
- c#操作进程、服务、注册表(源码测试通过)
- COM/DCOM开发练习之进程外组件实例
- COM/DCOM开发练习之远程进程外组件实例
- javascript JSON操作入门实例
- sed与Awk教程入门与实例练习(ZZ)
- WCF热门问题编程示例(2)多个实例调用一个WCF服务操作,需要等待服务响应吗