Ejemplo n.º 1
0
    // 자신을 포함해서 이어져있는 같은 타입 블록이 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);
                    }
                }
            }
        }
    }
Ejemplo n.º 2
0
    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);
            }
        }
    }