// 자신을 포함해서 이어져있는 같은 타입 블록이 4개 이상이고 // 모든 블록이 인접한 같은 블록의 수가 2개 이상인 경우 void Check4Block(HexaBlock block) { List <HexaBlock> sameTypeBlocks = block.GetAdjacentBlocks(block.blockType); foreach (HexaBlock b in sameTypeBlocks) { List <HexaBlock> checkList = new List <HexaBlock>(); checkList.Add(block); checkList.Add(b); Check4Block(b, checkList); // 체크리스트 안에 4개 이상이 들어가있으면 매칭완료 if (checkList.Count >= 4) { if (!matchedBlockList.Contains(block)) { matchedBlockList.Add(block); } foreach (HexaBlock checkBlock in checkList) { if (!matchedBlockList.Contains(checkBlock)) { matchedBlockList.Add(checkBlock); } } } } }
void Check4Block(HexaBlock block, List <HexaBlock> checkList) { List <HexaBlock> sameTypeBlocks = block.GetAdjacentBlocks(block.blockType); foreach (HexaBlock b in sameTypeBlocks) { int checkCnt = 0; // 체크리스트에 있으면 패스 if (checkList.Contains(b)) { continue; } // 새로운 블록의 주변 블록중에 체크리스트 블록이 2개 이상이면 추가 foreach (HexaBlock adjacentBlock in b.GetAdjacentBlocks(block.blockType)) { if (checkList.Contains(adjacentBlock)) { checkCnt++; } } if (checkCnt >= 2) { checkList.Add(b); Check4Block(b, checkList); } } }