Пример #1
0
    public static void Construct(BlownUpStatus[,] blownUpStatus)
    {
        int row = blownUpStatus.GetLength(0);
        int col = blownUpStatus.GetLength(1);

        for (int i = 0; i < row; i++)
        {
            for (int j = 0; j < col; j++)
            {
                blownUpStatus[i, j] = new BlownUpStatus();
            }
        }
    }
Пример #2
0
    // Use this for initialization
    private void Start()
    {
        int        i, j;
        GameObject tileObject = Resources.Load("InGame/Tile", typeof(GameObject)) as GameObject;

        for (i = 0; i < MAX_ROW_COUNT; i++)
        {
            for (j = 0; j < MAX_COL_COUNT; j++)
            {
                GameObject tileObjectClone = (GameObject)Instantiate(tileObject);
                tileObjectClone.name = "Tile(" + i + "," + j + ")";
                TileScript tileScript = tileObjectClone.GetComponent <TileScript>();
                tileScript.Init(i, j, new TileStatus());

                mTiles[i, j] = tileScript;
            }
        }

        BlownUpStatus[,] blownUpStatusTemp = new BlownUpStatus[MAX_ROW_COUNT, MAX_COL_COUNT];
        BlownUpStatus.Construct(blownUpStatusTemp);

        while (CheckBlowUpTiles(blownUpStatusTemp))
        {
            for (i = 0; i < MAX_ROW_COUNT; i++)
            {
                for (j = 0; j < MAX_COL_COUNT; j++)
                {
                    mTiles[i, j].SetTile(new TileStatus());
                }
            }
        }

        mClickedTile       = null;
        mIsSwapEnable      = false;
        mIsReSwapNeeded    = false;
        mIsEnemyActionDone = false;
        mIsBlownThisTurn   = false;
        mTurn           = 0;
        mBlownTileCount = 0;
        mBaseMP         = 0;

        InGameUIManager.Instance.UpdateHP(UserManager.Instance.HP);
        InGameUIManager.Instance.UpdateMP(UserManager.Instance.MP);
        InGameUIManager.Instance.UpdateTurn(mTurn);
    }
Пример #3
0
    private bool BlowUpTiles()
    {
        int i, j;

        BlownUpStatus[,] blownUpStatus = new BlownUpStatus[MAX_ROW_COUNT, MAX_COL_COUNT];
        BlownUpStatus.Construct(blownUpStatus);

        mCheckToDestroyed = new bool[MAX_ROW_COUNT, MAX_COL_COUNT];
        mTilesDestroyed   = new bool[MAX_ROW_COUNT, MAX_COL_COUNT];
        if (!CheckBlowUpTiles(blownUpStatus))
        {
            return(false);
        }
        // delete
        for (i = 0; i < MAX_ROW_COUNT; i++)
        {
            for (j = 0; j < MAX_COL_COUNT; j++)
            {
                // add
                if (!mCheckToDestroyed[i, j] && blownUpStatus[i, j].IsBlownUp())
                {
                    mCheckToDestroyed[i, j] = true;

                    if (blownUpStatus[i, j].mShape == BlownUpStatus.EffectShape.NONE)
                    {
                        mTiles[i, j].Status.CountToDestroy--;
                        if (mTiles[i, j].Status.CountToDestroy <= 0)
                        {
                            //Tile Destroyed :: give exp, money and special effects
                            mTilesDestroyed[i, j] = true;
                        }
                    }
                    else
                    {
                        int[] notDestroyedTilePath = SearchSameShape(blownUpStatus, i, j);
                        if (notDestroyedTilePath[0] != -1 && notDestroyedTilePath[1] != -1)
                        {
                            TileStatus nowStatus = mTiles[notDestroyedTilePath[0], notDestroyedTilePath[1]].Status;
                            TileTypeManager.TileType madeSpecialType = TileTypeManager.TileType.NORMAL;
                            mTilesDestroyed[notDestroyedTilePath[0], notDestroyedTilePath[1]] = false;
                            mBlownTileCount++;

                            if (blownUpStatus[i, j].mShape == BlownUpStatus.EffectShape.FOUR)
                            {
                                madeSpecialType = TileTypeManager.TileType.HEAL;
                            }
                            else if (blownUpStatus[i, j].mShape == BlownUpStatus.EffectShape.L)
                            {
                                madeSpecialType = TileTypeManager.TileType.CROSS;
                            }
                            else if (blownUpStatus[i, j].mShape == BlownUpStatus.EffectShape.FIVE)
                            {
                                madeSpecialType = TileTypeManager.TileType.SPECIAL;
                            }
                            mTiles[notDestroyedTilePath[0], notDestroyedTilePath[1]].SetTile(new TileStatus(madeSpecialType, nowStatus.Color));
                        }
                    }
                }
            }
        }

        //Cross & heal & sepcial Effect.
        bool[,] isAlreadyBomb = new bool[MAX_ROW_COUNT, MAX_COL_COUNT];
        bool isStop = false;

        while (!isStop)
        {
            isStop = true;
            for (i = 0; i < MAX_ROW_COUNT; i++)
            {
                for (j = 0; j < MAX_COL_COUNT; j++)
                {
                    if (!isAlreadyBomb[i, j] && mTilesDestroyed[i, j])
                    {
                        isAlreadyBomb[i, j] = true;
                        if (mTiles[i, j].mStatus.Type == TileTypeManager.TileType.HEAL)
                        {
                            // Add Heal.
                            UserManager.Instance.decreaseHP(-3);
                            InGameUIManager.Instance.UpdateHP(UserManager.Instance.HP);
                        }
                        else if (mTiles[i, j].mStatus.Type == TileTypeManager.TileType.CROSS)
                        {
                            int k;
                            for (k = 0; k < MAX_COL_COUNT; k++)
                            {
                                if (mTiles[i, k].IsBlowable)
                                {
                                    mTilesDestroyed[i, k] = true;
                                }
                            }
                            for (k = 0; k < MAX_ROW_COUNT; k++)
                            {
                                if (mTiles[k, j].IsBlowable)
                                {
                                    mTilesDestroyed[k, j] = true;
                                }
                            }
                        }
                        else if (mTiles[i, j].mStatus.Type == TileTypeManager.TileType.SPECIAL)
                        {
                            // Special Effect.
                        }
                        isStop = false;
                    }
                }
            }
        }

        //Real delete
        int row;

        for (j = 0; j < MAX_COL_COUNT; j++)
        {
            Queue <int> q = new Queue <int>();
            for (i = MAX_ROW_COUNT - 1; i >= 0; i--)
            {
                if (mTilesDestroyed[i, j])
                {
                    q.Enqueue(i);
                    mBlownTileCount++;
                }
                else
                {
                    if (q.Count > 0)
                    {
                        row = q.Dequeue();
                        mTiles[row, j].IsBlowable = false;
                        mTiles[row, j].SetPosition(mTiles[i, j].gameObject.transform.localPosition);
                        mTiles[row, j].SetTile(mTiles[i, j].Status);
                        StartCoroutine(InGameAnimationManager.Instance.TileMoveToOriginalPositionStart(mTiles[row, j]));
                        q.Enqueue(i);
                    }
                }
            }

            while (q.Count > 0)
            {
                row = q.Dequeue();
                mTiles[row, j].IsBlowable = false;

                Vector3 topTilePosition = TileScript.GetTileVectorWithRowCol(0, j);
                if (q.Count + 1 < MAX_ROW_COUNT)
                {
                    Vector3 lastFellingTilePosition = mTiles[q.Count + 1, j].gameObject.transform.localPosition;
                    if (lastFellingTilePosition.y <= topTilePosition.y)
                    {
                        mTiles[row, j].SetPosition(new Vector3(topTilePosition.x, topTilePosition.y + TileScript.tileSize, 0));
                    }
                    else
                    {
                        mTiles[row, j].SetPosition(new Vector3(lastFellingTilePosition.x, lastFellingTilePosition.y + TileScript.tileSize, 0));
                    }
                }
                else
                {
                    mTiles[row, j].SetPosition(new Vector3(topTilePosition.x, topTilePosition.y + TileScript.tileSize, 0));
                }
                mTiles[row, j].SetTile(new TileStatus());
                StartCoroutine(InGameAnimationManager.Instance.TileMoveToOriginalPositionStart(mTiles[row, j]));
            }
        }
        UserManager.Instance.setMP(mBaseMP + MP_INCREASING_CONSTANT * mBlownTileCount);
        InGameUIManager.Instance.UpdateMP(UserManager.Instance.MP);
        return(true);
    }
Пример #4
0
    private bool CheckBlowUpTiles(BlownUpStatus [,] blownUpStatus)
    {
        int  i, j, k;
        bool isBlown     = false;
        int  serialCount = 0;

        TileTypeManager.TileColor startColor = mTiles[0, 0].Status.Color;

        //Right
        for (i = 0; i < MAX_ROW_COUNT; i++)
        {
            serialCount = 0;
            for (j = 0; j < MAX_COL_COUNT; j++)
            {
                if (!mTiles[i, j].IsBlowable)
                {
                    serialCount = 0;
                    continue;
                }
                if (serialCount == 0 || startColor != mTiles[i, j].Status.Color)
                {
                    startColor  = mTiles[i, j].Status.Color;
                    serialCount = 1;
                }
                else
                {
                    serialCount++;
                }
                if (serialCount == BLOW_MINIMUM_COUNT)
                {
                    for (k = 1; k < BLOW_MINIMUM_COUNT; k++)
                    {
                        blownUpStatus[i, j - k].mHorizontal = true;
                        blownUpStatus[i, j - k].mShape      = BlownUpStatus.EffectShape.NONE;
                    }
                    isBlown = true;
                }
                if (serialCount >= BLOW_MINIMUM_COUNT)
                {
                    blownUpStatus[i, j].mHorizontal = true;
                    blownUpStatus[i, j].mShape      = BlownUpStatus.EffectShape.NONE;
                }
            }
        }
        //Down
        for (j = 0; j < MAX_COL_COUNT; j++)
        {
            serialCount = 0;
            for (i = 0; i < MAX_ROW_COUNT; i++)
            {
                if (!mTiles[i, j].IsBlowable)
                {
                    serialCount = 0;
                    continue;
                }
                if (serialCount == 0 || startColor != mTiles[i, j].Status.Color)
                {
                    startColor  = mTiles[i, j].Status.Color;
                    serialCount = 1;
                }
                else
                {
                    serialCount++;
                }
                if (serialCount == BLOW_MINIMUM_COUNT)
                {
                    for (k = 1; k < BLOW_MINIMUM_COUNT; k++)
                    {
                        blownUpStatus[i - k, j].mVertical = true;
                        blownUpStatus[i - k, j].mShape    = BlownUpStatus.EffectShape.NONE;
                    }
                    isBlown = true;
                }
                if (serialCount >= BLOW_MINIMUM_COUNT)
                {
                    blownUpStatus[i, j].mVertical = true;
                    blownUpStatus[i, j].mShape    = BlownUpStatus.EffectShape.NONE;
                }
            }
        }

        int[,] fiveRightIndex = new int[5, 2] {
            { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }
        };
        int[,] fiveDownIndex = new int[5, 2] {
            { 0, 0 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }
        };

        //five
        for (i = 0; i < MAX_ROW_COUNT; i++)
        {
            for (j = 0; j < MAX_COL_COUNT; j++)
            {
                // Horizontal
                if (TileScript.HasSameColor(mTiles, i, j, fiveRightIndex))
                {
                    BlownUpStatus.SetShape(blownUpStatus, i, j, fiveRightIndex, BlownUpStatus.EffectShape.FIVE);
                }
                // Vertical
                if (TileScript.HasSameColor(mTiles, i, j, fiveDownIndex))
                {
                    BlownUpStatus.SetShape(blownUpStatus, i, j, fiveDownIndex, BlownUpStatus.EffectShape.FIVE);
                }
            }
        }

        int[,] L1Index = new int[5, 2] {
            { 0, 0 }, { 0, -1 }, { 0, -2 }, { 1, 0 }, { 2, 0 }
        };
        int[,] L2Index = new int[5, 2] {
            { 0, 0 }, { 0, -1 }, { 0, -2 }, { -1, 0 }, { -2, 0 }
        };
        int[,] L3Index = new int[5, 2] {
            { 0, 0 }, { 0, 1 }, { 0, 2 }, { -1, 0 }, { -2, 0 }
        };
        int[,] L4Index = new int[5, 2] {
            { 0, 0 }, { 0, 1 }, { 0, 2 }, { 1, 0 }, { 2, 0 }
        };

        int[,] T1Index = new int[5, 2] {
            { 0, 0 }, { 0, 1 }, { 0, -1 }, { 1, 0 }, { 2, 0 }
        };
        int[,] T2Index = new int[5, 2] {
            { 0, 0 }, { 0, 1 }, { 0, -1 }, { -1, 0 }, { -2, 0 }
        };
        int[,] T3Index = new int[5, 2] {
            { 0, 0 }, { 0, -1 }, { 0, -2 }, { -1, 0 }, { 1, 0 }
        };
        int[,] T4Index = new int[5, 2] {
            { 0, 0 }, { 0, 1 }, { 0, 2 }, { -1, 0 }, { 1, 0 }
        };

        int[,] plusIndex = new int[5, 2] {
            { 0, 0 }, { 0, 1 }, { 0, -1 }, { -1, 0 }, { 1, 0 }
        };
        //Giyeok
        for (i = 0; i < MAX_ROW_COUNT; i++)
        {
            for (j = 0; j < MAX_COL_COUNT; j++)
            {
                // Giyeok and right rotation
                //first Giyeok
                if (TileScript.HasSameColor(mTiles, i, j, L1Index))
                {
                    BlownUpStatus.SetShape(blownUpStatus, i, j, L1Index, BlownUpStatus.EffectShape.L);
                }
                //second Giyeok
                if (TileScript.HasSameColor(mTiles, i, j, L2Index))
                {
                    BlownUpStatus.SetShape(blownUpStatus, i, j, L2Index, BlownUpStatus.EffectShape.L);
                }
                // third Giyeok
                if (TileScript.HasSameColor(mTiles, i, j, L3Index))
                {
                    BlownUpStatus.SetShape(blownUpStatus, i, j, L3Index, BlownUpStatus.EffectShape.L);
                }
                //fourth Giyeok
                if (TileScript.HasSameColor(mTiles, i, j, L4Index))
                {
                    BlownUpStatus.SetShape(blownUpStatus, i, j, L4Index, BlownUpStatus.EffectShape.L);
                }

                //first T-shape
                if (TileScript.HasSameColor(mTiles, i, j, T1Index))
                {
                    BlownUpStatus.SetShape(blownUpStatus, i, j, T1Index, BlownUpStatus.EffectShape.L);
                }
                //second T-shape
                if (TileScript.HasSameColor(mTiles, i, j, T2Index))
                {
                    BlownUpStatus.SetShape(blownUpStatus, i, j, T2Index, BlownUpStatus.EffectShape.L);
                }
                //third T-shape
                if (TileScript.HasSameColor(mTiles, i, j, T3Index))
                {
                    BlownUpStatus.SetShape(blownUpStatus, i, j, T3Index, BlownUpStatus.EffectShape.L);
                }
                //fourth T-shape
                if (TileScript.HasSameColor(mTiles, i, j, T4Index))
                {
                    BlownUpStatus.SetShape(blownUpStatus, i, j, T4Index, BlownUpStatus.EffectShape.L);
                }

                //plus-shpae
                if (TileScript.HasSameColor(mTiles, i, j, plusIndex))
                {
                    BlownUpStatus.SetShape(blownUpStatus, i, j, plusIndex, BlownUpStatus.EffectShape.L);
                }
            }
        }

        int[,] fourRightIndex = new int[4, 2] {
            { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 }
        };
        int[,] fourDownIndex = new int[4, 2] {
            { 0, 0 }, { 1, 0 }, { 2, 0 }, { 3, 0 }
        };

        //Four
        for (i = 0; i < MAX_ROW_COUNT; i++)
        {
            for (j = 0; j < MAX_COL_COUNT; j++)
            {
                // Vertical
                if (TileScript.HasSameColor(mTiles, i, j, fourDownIndex))
                {
                    BlownUpStatus.SetShape(blownUpStatus, i, j, fourDownIndex, BlownUpStatus.EffectShape.FOUR);
                }
                // Horizontal
                if (TileScript.HasSameColor(mTiles, i, j, fourRightIndex))
                {
                    BlownUpStatus.SetShape(blownUpStatus, i, j, fourRightIndex, BlownUpStatus.EffectShape.FOUR);
                }
            }
        }

        //None
        return(isBlown);
    }