%%%------------------------------------------------------------------- %%% @author DY %%% @copyright (C) 2020, %%% @doc %%% 收集巡逻路径 %%% 返回:SUCCESS %%% @end %%% Created : 07. 10月 2020 15:13 %%%------------------------------------------------------------------- -module(action_collect_path). -include("behavior3.hrl"). -include("example.hrl"). %% API -export([tick/2, get_grid_path/1]). tick(_BTree, #{cur_grid := CurGrid} = State) -> State1 = State#{grid_list := get_grid_path(CurGrid)}, {?BT_SUCCESS, State1}. get_grid_path(CurGrid) -> List = [{1, 0}, {-1, 0}, {0, 1}, {0, -1}], Max = length(List), List1 = [E || {_, E} <- lists:sort([{?RAND(1, Max), E} || E <- List])], case get_grid_path_1(List1, CurGrid, []) of [] -> get_grid_path(CurGrid); Result -> Result end. get_grid_path_1([{X, Y} | T], {CurX, CurY}, Result) -> X1 = CurX + X, Y1 = CurY + Y, Grid = {X1, Y1}, case X1 >= 0 andalso X1 =< ?MAX_X andalso Y1 >= 0 andalso Y1 =< ?MAX_Y of true -> get_grid_path_1(T, Grid, [Grid | Result]); false -> [] end; get_grid_path_1([], _, Result) -> Result.