Exemple #1
0
        // 이미 매치된 타일에 대한 처리 과정
        private void mergeMachedInfo(MatchInfo findinfo, Tile tile)
        {
            // 해당 매치를 찾아, 이전 데이터와 합치기
            var matchedInfo = findMatchInfo(tile.row, tile.col);

            if (matchedInfo == null)
            {
                return;
            }

            Debug.LogFormat("교차점[{0},{1}] 발견", tile.row, tile.col);

            if (matchedInfo.isLinearMatch) // 교차되면서 매치를 하나로 합치기
            {
                findinfo.direction |= matchedInfo.direction;
                findinfo.AddTilePosition(matchedInfo);
                matchInfos.Remove(matchedInfo);
                findinfo.creationPos = tile.GetLocation();
            }
            // 타일 위치의 중복을 허용하면서 현재는 이에 대한 검증이 안되어 있음.
            else if (matchedInfo.matchType == MatchType.Butterfly)
            {
                Debug.LogFormat("나비 발견.");
                if (findinfo.isCreationTile && findinfo.matchType != MatchType.Butterfly)
                {
                    resetMatchedInfo(matchedInfo);
                    findinfo.AddTilePosition(tile.GetLocation());
                    matchInfos.Remove(matchedInfo);
                }
            }
            else
            {
                findinfo.AddTilePosition(tile.GetLocation());
            }
        }
Exemple #2
0
 // useMatchinfo: true일 때 테스트 용도로 사용
 public bool IsMatch2by2(int row, int col, bool useMatchinfo)
 {
     if (useMatchinfo)
     {
         findinfo.AddTilePosition(row, col);
     }
     return(IsMatch2by2Simple(row, col, useMatchinfo ? findinfo : null));
 }
Exemple #3
0
        // 발견된 매치 타일로 새로운 매치 정보 만들기
        private void makeMatch(MatchInfo findinfo, FindDirection dir, List <Tile> matchCandidates)
        {
            findinfo.isMatch = true;

            if (dir == FindDirection.Horizon)
            {
                findinfo.direction |= MatchDir.Horizon;
            }
            else
            {
                findinfo.direction |= MatchDir.Vertical;
            }

            foreach (var tile in matchCandidates)
            {
                if (tile.IsMatched == false)
                {
                    findinfo.AddTilePosition(tile.GetLocation());
                    tile.MarkFound();
                }
                else
                {
                    mergeMachedInfo(findinfo, tile);
                }
            }

            // 이 부분을 함수 바깥으로 뺄 수 있나?
            CheckRemover(findinfo);
        }
Exemple #4
0
        // 1. swap 가능 확인 용
        // 2. 매치 정보 기록 유무 필요
        private bool IsMatch2by2Simple(int row, int col, MatchInfo matchinfo)
        {
            var curtile = _gamepanel.tiles[row, col];

            if (curtile == null)
            {
                return(false);
            }

            bool isFound = false;
            var  pattern = Square22Pattern.Instance; // 추후 패턴 일반화

            for (int p = 0; p < pattern.Length; p++)
            {
                int nblock = pattern.GetPatternLength(p);
                int i      = 0;
                for (; i < nblock; i++)
                {
                    var tilepos = pattern.GetPatternPos(p, i, row, col);

                    if (_gamepanel.Isbound(tilepos) == false)
                    {
                        break;
                    }

                    var tile = _gamepanel.tiles[tilepos.row, tilepos.col];
                    if (tile == null || tile.Type != curtile.Type)
                    {
                        break;
                    }

                    if (matchinfo != null)
                    {
                        matchinfo.AddTilePosition(tilepos); // 패턴이 모두 맞아야 추가가 가능함...
                    }
                }

                isFound = (i == nblock);
                if (isFound)
                {
                    if (matchinfo != null)
                    {
                        // todo : 일반화를 위해서는 함수로 빼야함.
                        //matchinfo.AddTilePosition(curtile.GetLocation());
                        matchinfo.matchType = MatchType.Butterfly;
                        matchinfo.isMatch   = true;
                        // 생성위치도 필요
                        matchInfos.Add(new MatchInfo(matchinfo));
                    }
                    return(true);
                }
            }
            return(false);
        }