示例#1
0
    void GenerateBlock()
    {
        // 블럭 생성은 한 Column 당 최대 한개씩 떨어지도록 하는 것을 원칙으로 한다.
        if (iFallingBlockCount_ >= GameSetting.BLOCK_COL)
        {
            return;
        }

        Block pNewBlock = pStckBlockPool_.Pop();
        int   iCol      = Random.Range(0, GameSetting.BLOCK_COL);

        while (pArrFallingBlock_[iCol] != null)
        {
            ++iCol;
            if (iCol >= GameSetting.BLOCK_COL)
            {
                iCol = 0;
            }
        }

        pArrFallingBlock_[iCol] = pNewBlock;
        Block.kBlockType eType = GetGenBlockType(iCol);
        pNewBlock.SetBlock(eType, iCol);

        ++iFallingBlockCount_;
    }
示例#2
0
    public Block.kBlockType GetGenBlockType(Block pBlock)
    {
        // Block 의 Lock 이 풀렸을 때 Block Type 을 결정하기 위하여 사용되는 함수이다.
        Block pBottom = pBlock.pBottom_;
        Block pLeft   = pBlock.pLeft_;
        Block pRight  = pBlock.pRight_;
        Block pTop    = pBlock.pTop_;

        if (pBottom != null)
        {
            if (pBottom.eType_ == Block.kBlockType.Lock)
            {
                pBottom = null;
            }
            else
            {
                pListBlockType_.Remove(pBottom.eType_);
            }
        }
        if (pLeft != null)
        {
            if (pLeft.eType_ == Block.kBlockType.Lock)
            {
                pLeft = null;
            }
            else
            {
                pListBlockType_.Remove(pLeft.eType_);
            }
        }
        if (pRight != null)
        {
            if (pRight.eType_ == Block.kBlockType.Lock)
            {
                pRight = null;
            }
            else
            {
                pListBlockType_.Remove(pRight.eType_);
            }
        }
        if (pTop != null)
        {
            if (pTop.eType_ == Block.kBlockType.Lock)
            {
                pTop = null;
            }
            else
            {
                pListBlockType_.Remove(pTop.eType_);
            }
        }

        int iIdx = Random.Range(0, pListBlockType_.Count);

        Block.kBlockType eResult = pListBlockType_[iIdx];

        if (pBottom != null)
        {
            pListBlockType_.Add(pBottom.eType_);
        }
        if (pLeft != null && !pListBlockType_.Contains(pLeft.eType_))
        {
            pListBlockType_.Add(pLeft.eType_);
        }
        if (pRight != null && !pListBlockType_.Contains(pRight.eType_))
        {
            pListBlockType_.Add(pRight.eType_);
        }
        if (pTop != null && !pListBlockType_.Contains(pTop.eType_))
        {
            pListBlockType_.Add(pTop.eType_);
        }

        return(eResult);
    }
示例#3
0
    Block.kBlockType GetGenBlockType(int iCol)
    {
        // Block Type 결정은 Block 이 착지했을 때 주변에 같은 Type 의 Block 이 없도록 한다.
        Block pBottom = pArrTopBlock_[iCol];
        Block pLeft   = pBottom != null?pBottom.GetMyLeftTop() :
                            (iCol != 0 ? pArrTopBlock_[iCol - 1] : null);

        Block pRight = pBottom != null?pBottom.GetMyRightTop() :
                           (iCol != GameSetting.BLOCK_COL - 1 ? pArrTopBlock_[iCol + 1] : null);

        if (pLeft == null)
        {
            pLeft = iCol != 0 ? pArrFallingBlock_[iCol - 1] : null;
        }
        if (pRight == null)
        {
            pRight = iCol != GameSetting.BLOCK_COL - 1 ? pArrFallingBlock_[iCol + 1] : null;
        }

        if (pBottom != null)
        {
            if (pBottom.eType_ == Block.kBlockType.Lock)
            {
                pBottom = null;
            }
            else
            {
                pListBlockType_.Remove(pBottom.eType_);
            }
        }
        if (pLeft != null)
        {
            if (pLeft.eType_ == Block.kBlockType.Lock)
            {
                pLeft = null;
            }
            else
            {
                pListBlockType_.Remove(pLeft.eType_);
            }
        }
        if (pRight != null)
        {
            if (pRight.eType_ == Block.kBlockType.Lock)
            {
                pRight = null;
            }
            else
            {
                pListBlockType_.Remove(pRight.eType_);
            }
        }

        int iIdx = Random.Range(0, pListBlockType_.Count);

        Block.kBlockType eResult = pListBlockType_[iIdx];

        if (pBottom != null)
        {
            pListBlockType_.Add(pBottom.eType_);
        }
        if (pLeft != null && !pListBlockType_.Contains(pLeft.eType_))
        {
            pListBlockType_.Add(pLeft.eType_);
        }
        if (pRight != null && !pListBlockType_.Contains(pRight.eType_))
        {
            pListBlockType_.Add(pRight.eType_);
        }

        return(eResult);
    }