Ejemplo n.º 1
0
    public MatchInfo.kMatchState MatchCheckBottomForReservation(int iCol)
    {
        if (eType_ == kBlockType.Lock)
        {
            return(MatchInfo.kMatchState.Break);
        }

        if (pBottom_ && pBottom_.pBottom_ &&
            eType_ == pBottom_.eType_ &&
            eType_ == pBottom_.pBottom_.eType_)
        {
            if ((pMyGroup_.eState_ == Group.kGroupState.Landing ||
                 pMyGroup_.eState_ == Group.kGroupState.Stop) &&
                (pBottom_.pMyGroup_.eState_ == Group.kGroupState.Landing ||
                 pBottom_.pMyGroup_.eState_ == Group.kGroupState.Stop) &&
                (pBottom_.pBottom_.pMyGroup_.eState_ == Group.kGroupState.Landing ||
                 pBottom_.pBottom_.pMyGroup_.eState_ == Group.kGroupState.Stop))
            {
                Group pGroup = pMyGroup_;
                pGroup.AddColumn(iCol, pBottom_.pBottom_);
                pGroup.RiseReservation();
                pGroup.LockBlock(this);
                pGroup.LockBlock(pBottom_);
                pGroup.LockBlock(pBottom_.pBottom_);
                return(MatchInfo.kMatchState.Explosion);
            }

            return(MatchInfo.kMatchState.Keep);
        }

        return(MatchInfo.kMatchState.Break);
    }
Ejemplo n.º 2
0
    public MatchInfo.kMatchState MatchCheckSideForReservation(int iCol)
    {
        if (eType_ == kBlockType.Lock)
        {
            return(MatchInfo.kMatchState.Break);
        }

        int   iExpCountForReservation = 1;
        int   iExpCount   = 1;
        int   iStartIdx   = iCol;
        Block pStartBlock = this;

        MatchInfo.kMatchState eResult;
        Group pOgGroup = null;

        if (GameManager.pShared.pMainGroup_ != pMyGroup_)
        {
            pOgGroup = pMyGroup_;
        }

        // Check Point Block's Left & Left.Left
        if (pLeft_ != null && pLeft_.eType_ == eType_)
        {
            ++iExpCountForReservation;
            if (pLeft_.pMyGroup_.eState_ == Group.kGroupState.Landing || pLeft_.pMyGroup_.eState_ == Group.kGroupState.Stop)
            {
                pStartBlock = pLeft_;
                --iStartIdx;
                ++iExpCount;
                if (pOgGroup == null && GameManager.pShared.pMainGroup_ != pLeft_.pMyGroup_)
                {
                    pOgGroup = pLeft_.pMyGroup_;
                }
                if (pStartBlock.pLeft_ != null && pStartBlock.pLeft_.eType_ == eType_)
                {
                    ++iExpCountForReservation;
                    if (pStartBlock.pLeft_.pMyGroup_.eState_ == Group.kGroupState.Landing || pStartBlock.pLeft_.pMyGroup_.eState_ == Group.kGroupState.Stop)
                    {
                        pStartBlock = pStartBlock.pLeft_;
                        --iStartIdx;
                        ++iExpCount;
                        if (pOgGroup == null && GameManager.pShared.pMainGroup_ != pStartBlock.pMyGroup_)
                        {
                            pOgGroup = pStartBlock.pMyGroup_;
                        }
                    }
                }
            }
            else
            {
                if (pLeft_.pLeft_ != null && pLeft_.pLeft_.eType_ == eType_)
                {
                    ++iExpCountForReservation;
                }
            }
        }
        // Check Point Block's Right & Right.Right
        if (pRight_ != null && pRight_.eType_ == eType_)
        {
            ++iExpCountForReservation;
            if (pRight_.pMyGroup_.eState_ == Group.kGroupState.Landing || pRight_.pMyGroup_.eState_ == Group.kGroupState.Stop)
            {
                ++iExpCount;
                if (pOgGroup == null && GameManager.pShared.pMainGroup_ != pRight_.pMyGroup_)
                {
                    pOgGroup = pRight_.pMyGroup_;
                }
                if (pRight_.pRight_ != null && pRight_.pRight_.eType_ == eType_)
                {
                    ++iExpCountForReservation;
                    if (pRight_.pRight_.pMyGroup_.eState_ == Group.kGroupState.Landing || pRight_.pRight_.pMyGroup_.eState_ == Group.kGroupState.Stop)
                    {
                        ++iExpCount;
                        if (pOgGroup == null && GameManager.pShared.pMainGroup_ != pRight_.pRight_.pMyGroup_)
                        {
                            pOgGroup = pRight_.pRight_.pMyGroup_;
                        }
                    }
                }
            }
            else
            {
                if (pRight_.pRight_ != null && pRight_.pRight_.eType_ == eType_)
                {
                    ++iExpCountForReservation;
                }
            }
        }
        // Check Result - Explosion ? Keep ? Break ?
        if (iExpCount >= 3 && pOgGroup != null && (pMyGroup_.eState_ == Group.kGroupState.Landing || pMyGroup_.eState_ == Group.kGroupState.Stop))
        {
            eResult = MatchInfo.kMatchState.Explosion;
            Block pBlock = pStartBlock;
            for (int i = 0; i < iExpCount; ++i)
            {
                if (pBlock.pMyGroup_ != pOgGroup)
                {
                    if (pBlock.pMyGroup_ == GameManager.pShared.pMainGroup_)
                    {
                        pOgGroup.AddColumn(iStartIdx + i, pBlock);
                    }
                    else
                    {
                        // Merge
                        pOgGroup.Merge(pBlock.pMyGroup_);
                    }
                }
                pBlock.pMyGroup_.LockBlock(pBlock);
                pBlock = pBlock.pRight_;
            }
            pOgGroup.RiseReservation();
        }
        else if (iExpCountForReservation >= 3)
        {
            eResult = MatchInfo.kMatchState.Keep;
        }
        else
        {
            eResult = MatchInfo.kMatchState.Break;
        }

        return(eResult);
    }