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); }
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; } } }
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>(); }