본문 바로가기
개발/기본) 알고리즘

알고리즘) 플러드 필 (Flood Fill)

by 테샤르 2020. 1. 14.

플러드 필 (Flood Fill)

 

플러드 필이라는 알고리즘은 다차원 배열(2차원 이상)에서 화면을 격자(Grid)로 분할하거나 체우는과정에서 사용되는 알고리즘이다.

이번에 필자는 특정 맵을 포인트화하는 과정에서 해당 알고리즘을 사용했다.

타일맵으로 만드는 과정에서 굉장히 많이 사용한다.

반응형

 

구현방법은 다음과 같다.

 

특정 기준이되는 좌표를 정한다.

기준좌표의 방향(4방향 , 8방향)에 대한 확장형 로직을 작성한다.

해당 로직을 재귀처리한다.

재귀처리를 하는과정에서 해당 조건이 맞지 않으면 종료한다. (조건은 맵의 크기 or 갈수없는 영역 등등)

 

작업된 코드는 다음과 같다.

 

  private void GetGridPoint(int _x, int _z){
        
        SceneInGame scene = SceneManager.Instance.GetScene<SceneInGame>();
        Vector3 pos = new Vector3(_x, 0.5f,_z);
        string key = this.GetGridKey(_x,_z);
        if(true == scene.GetGameController().CheckMapPosition(pos, 0.5f)){
            if(false == this.m_DicMap.ContainsKey(key)){
                this.m_DicMap.Add(key, new MapItem(pos));
                this.GetGridPoint( _x + Define.MAP_GRID, _z);
                this.GetGridPoint( _x - Define.MAP_GRID, _z);
                this.GetGridPoint( _x, _z + Define.MAP_GRID);
                this.GetGridPoint( _x, _z - Define.MAP_GRID);
            }
        }
    }

 

Navmesh로 되어있는 영역을 플러드 필로 처리할 경우에는 다음과 같다.

 

★☆

반응형

댓글