Erlang 行为模式gen_fsm状态机 解析和案例

本文介绍了Erlang中的gen_fsm行为模式,它在处理对象状态变化时的应用。通过一个简单的RPG游戏场景举例,说明如何使用gen_fsm实现有限状态机,如怪物在游荡、追击和死亡状态之间的转换。尽管gen_server也能胜任,但gen_fsm在特定状态转换场景下提供了更好的可读性。
摘要由CSDN通过智能技术生成

有限状态机这名词听起来好像很高大上,其实本质上是对象(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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值