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_; }
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); }
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); }