Esempio n. 1
0
    int GetNeigborCount(bool[][] _prevary, int _xIndex, int _yIndex)
    {
        int neigborCount = 0;

        for (int i = 0; i < m_tileDirOffSet.Length; i++)
        {
            Coord2DSt coord = m_tileDirOffSet[i];
            int       x     = _xIndex + coord.m_x;
            int       y     = _yIndex + coord.m_y;

            if (IsValidIndex(x, y))
            {
                if (_prevary[x][y])
                {
                    neigborCount++;
                }
            }
            else
            {
                neigborCount++;
            }
        }

        return(neigborCount);
    }
Esempio n. 2
0
    void DetectingRoomsInTileDatas()
    {
        RandomMapGenerateData startData = GetStartData();
        // 시작하는 놈 찾아옴. 그놈을 확장시킨다.

        Queue <RandomMapGenerateData> queue = new Queue <RandomMapGenerateData>();

        while (true)
        {
            Room room = new Room(m_roomList.Count);

            room.AddGenData(startData);
            queue.Enqueue(startData);

            while (queue.Count != 0)
            {
                RandomMapGenerateData data = queue.Dequeue();
                // 가져와서 검사한 다음 큐에 집어넣기

                for (int i = 0; i < m_tileDirOffSet.Length; i++)
                {
                    Coord2DSt coord = m_tileDirOffSet[i];

                    TileDir dir = (TileDir)i;

                    if (dir == TileDir.NE || dir == TileDir.NW || dir == TileDir.SE || dir == TileDir.SW)
                    {
                        continue;
                    }


                    int x = data.m_xIndex + coord.m_x;
                    int y = data.m_yIndex + coord.m_y;

                    if (!IsValidIndex(x, y))
                    {
                        continue;
                    }

                    RandomMapGenerateData genData = m_genData[x][y];

                    if (genData.m_isDetected == true)
                    {
                        continue;
                    }

                    genData.m_isDetected = true;

                    if (!genData.m_isWall)
                    {
                        room.AddGenData(genData);
                        queue.Enqueue(genData);
                    }
                }
            }

            startData = GetStartData();
            m_roomList.Add(room);
            queue.Clear();

            if (startData == null)
            {
                break;
            }
        }
    }
Esempio n. 3
0
    void InitVariables()
    {
        m_mapWidth  = 128;
        m_mapHeight = 72;
        // 맵 사이즈

        m_fillRate = 60;
        // 맵을 얼마나 채울 것인가?

        m_numOfSmooth = 5;
        // 맵을 몇 번이나 부드럽게 할 것인가?

        m_deletRoomSize = 50;
        // 너무 작은 방은 삭제하는데 그 사이즈는?

        m_roomList = new List <Room>();
        // 룸 리스트 초기화

        m_genData = new RandomMapGenerateData[m_mapWidth][];

        for (int i = 0; i < m_mapWidth; i++)
        {
            m_genData[i] = new RandomMapGenerateData[m_mapHeight];
        }

        for (int y = 0; y < m_mapHeight; y++)
        {
            for (int x = 0; x < m_mapWidth; x++)
            {
                m_genData[x][y] = new RandomMapGenerateData(x, y);
            }
        }
        // 맵 생성시 사용하는 RandomMapGenrateData 초기화

        m_tileDataAry = new TileData[m_mapWidth][];

        for (int i = 0; i < m_mapWidth; i++)
        {
            m_tileDataAry[i] = new TileData[m_mapHeight];
        }
        // 실제로 사용될 예정인 타일데이터 초기화

        int numOfDir = System.Enum.GetNames(typeof(TileDir)).Length;

        m_tileDirOffSet = new Coord2DSt[numOfDir];

        for (int i = 0; i < numOfDir; i++)
        {
            switch (((TileDir)i))
            {
            case TileDir.E:
                m_tileDirOffSet[i] = new Coord2DSt(1, 0);
                break;

            case TileDir.SE:
                m_tileDirOffSet[i] = new Coord2DSt(1, -1);
                break;

            case TileDir.S:
                m_tileDirOffSet[i] = new Coord2DSt(0, -1);
                break;

            case TileDir.SW:
                m_tileDirOffSet[i] = new Coord2DSt(-1, -1);
                break;

            case TileDir.W:
                m_tileDirOffSet[i] = new Coord2DSt(-1, 0);
                break;

            case TileDir.NW:
                m_tileDirOffSet[i] = new Coord2DSt(-1, 1);
                break;

            case TileDir.N:
                m_tileDirOffSet[i] = new Coord2DSt(0, 1);
                break;

            case TileDir.NE:
                m_tileDirOffSet[i] = new Coord2DSt(1, 1);
                break;
            }
        }
        // 방향에 대해서 사용할 것 만들어 놨음..

        m_passageList = new List <Passage>();
    }