Exemple #1
0
    //创建一个甜品
    private GameSweet CreateNewSweet(int x, int y, SweetsType type)
    {
        GameObject newObj = Instantiate(sweetPrefabDict[type], CorrectPosition(x, y), Quaternion.identity);

        newObj.transform.SetParent(transform);

        GameSweet gameSweet = newObj.GetComponent <GameSweet>();

        gameSweet.Init(x, y, this, type);

        //如果是普通类型就创建一个随机的颜色的甜品
        if (type == SweetsType.NORMAL)
        {
            gameSweet.ColorComponent.SetColor((ColorSweet.ColorType)Random.Range(0, gameSweet.ColorComponent.numColors));
        }
        //数组赋值
        sweets[x, y] = gameSweet;

        return(gameSweet);
    }
Exemple #2
0
    //分步填充
    private bool Fill()
    {
        bool filledNotFinished = false;//这个部分布尔值是用来判断本次填充是否完成。

        for (int y = yRow - 2; y >= 0; y--)
        {
            for (int x = 0; x < xColumn; x++)
            {
                GameSweet sweet = sweets[x, y];
                if (sweet.CanMove())//如果无法移动,则无法往下填充
                {
                    GameSweet sweetBelow = sweets[x, y + 1];
                    //垂直填充
                    if (sweetBelow.Type == SweetsType.EMPTY)
                    {
                        sweet.MovedComponent.Move(x, y + 1, fillTime);
                        sweets[x, y + 1] = sweet;
                        Destroy(sweetBelow.gameObject);
                        //填充上面哪行
                        CreateNewSweet(x, y, SweetsType.EMPTY);

                        filledNotFinished = true;
                    }
                    else
                    {
                        //斜方向填充
                        //如果不可以移动,就查看坐下和右下是否可以移动
                        for (int i = -1; i <= 1; i++)
                        {
                            int downX = x + i;

                            if (i != 0)
                            {
                                if (downX >= 0 && downX < xColumn)
                                {
                                    GameSweet downSweet = sweets[downX, y + 1];
                                    if (downSweet.Type == SweetsType.EMPTY)
                                    {
                                        bool canFill = true;
                                        for (int aboveY = y; aboveY >= 0; aboveY--)
                                        {
                                            GameSweet sweetAbove = sweets[downX, aboveY];
                                            if (sweetAbove.CanMove())
                                            {
                                                break;
                                            }
                                            else if (!sweetAbove.CanMove() && sweetAbove.Type != SweetsType.EMPTY)
                                            {
                                                canFill = false;
                                                break;
                                            }
                                        }

                                        if (!canFill)
                                        {
                                            Destroy(downSweet.gameObject);
                                            sweet.MovedComponent.Move(downX, y + 1, fillTime);
                                            sweets[downX, y + 1] = sweet;
                                            CreateNewSweet(x, y, SweetsType.EMPTY);
                                            filledNotFinished = true;
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                if (y == 0 && sweet.Type == SweetsType.EMPTY)
                {
                    GameObject newSweetObject = Instantiate(sweetPrefabDict[SweetsType.NORMAL], CorrectPosition(x, y - 1), Quaternion.identity);
                    newSweetObject.transform.SetParent(transform);

                    GameSweet sweetComponent = newSweetObject.GetComponent <GameSweet>();
                    sweetComponent.Init(x, y - 1, this, SweetsType.NORMAL);

                    sweetComponent.MovedComponent.Move(x, y, fillTime);
                    sweetComponent.ColorComponent.SetColor((ColorSweet.ColorType)Random.Range(0, sweetComponent.ColorComponent.numColors));

                    sweets[x, y] = sweetComponent;

                    //销毁空物体
                    Destroy(sweet.gameObject);

                    filledNotFinished = true;
                }
            }
        }

        return(filledNotFinished);
    }