我正在实施使用 gen_fsm 来表示每个机器人的策略的robo-soccer。
我已经为攻击者制定了策略。现在,我想使用相同的策略来运行多个攻击者,比如5个攻击者。为此,我必须在5个不同的模块中复制相同的gen_fsm代码(200行),从而产生总共1000行代码。
有没有办法在多个模块中编写gen_fsm和重用它?
-module(planner).
-behaviour(gen_fsm).
start() ->
start_link().
start_link() ->
gen_fsm:start_link({local, ?SERVER}, ?MODULE, [], []).
init([]) ->
{ok, state1, ets:new(test,[public])}.
state1({test},State) ->
case ets:lookup(State,ball) of
[] ->
action!{turn,80},
{next_state,state1,State};
Data ->
% some code % %,
{next_state,state2,State}
end;
state2({test},State) ->
% --- some code ---%
答案 0 :(得分:5)
您应该在没有全局注册名称的情况下启动gen_fsm
进程。尝试:
start_link() ->
gen_fsm:start_link(?MODULE, [], []).
请记住使用gen_fsm:start_link/3
返回的流程ID跟踪您的流程。
答案 1 :(得分:0)
为什么不为每个攻击者生成5个进程,运行相同的代码?