有限状态机这名词听起来好像很高大上,其实本质上是对象(actor)在不同状态下收到信息有不同的行为(处理方式)和状态转换,有点类似设计模式中的状态模式。
以一个简单的游戏场景为案例,在rpg游戏地图中常常会出现一些怪物,怪物站在地图里的初始状态是游荡状态,如果玩家出现在他的实现范围内,那么他的状态就会变成追击状态,离开怪物视野后又变为游荡状态,当人物打死怪物就会变成死亡,类似这种其状态会因为触发事件而导致的状态转换就有限状态机。
代码如下所示
%%%-------------------------------------------------------------------
%%% @author zzh
%%% @copyright (C) 2019, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 21. 十一月 2019 20:38
%%%-------------------------------------------------------------------
-module(monster_fsm).
-author("zzh").
-behaviour(gen_fsm).
%% gen_fsm callbacks
-export([init/1,handle_event/3, handle_sync_event/4, handle_info/3, terminate/3, code_change/4,
wander/2,follow/2]).
%% API
-export([create/1,player_join/1,player_leave/1,defeat_mon/1]).
-record(state, {
monster_i