コード例 #1
0
        /// <summary>
        /// 分布填充
        /// </summary>
        /// <returns></returns>
        public bool Fill()
        {
            // 判断本次填充是否完成
            bool isFiledNotFinished = false;

            for (int y = PlayerInfo.Instance.yRow - 2; y >= 0; y--)
            {
                for (int x = 0; x < PlayerInfo.Instance.xColumn; x++)
                {
                    GameSweet sweet = _sweets[x, y];
                    if (sweet.IsMove)
                    {
                        GameSweet sweetBelow = _sweets[x, y + 1];
                        if (sweetBelow.Type == SweetsType.EMPTY) // 垂直填充
                        {
                            sweetBelow.Hide();
                            sweet.Move(x, y + 1, fillTime);
                            _sweets[x, y + 1] = sweet;
                            _sweets[x, y]     = PoolsManager.Instance.GetSweetObj();
                            _sweets[x, y].SetXY(x, y);
                            isFiledNotFinished = true;
                        }
                        //else //斜向填充
                        //{
                        //    for (int down = -1; down <= 1; down++)
                        //    {
                        //        if (down != 0)
                        //        {
                        //            if (down != 0)
                        //            {
                        //                int downX = x + down;
                        //                if (downX >= 0 && downX < PlayerInfo.xColumn)
                        //                {
                        //                    GameSweet downSweet = _sweets[downX, y - 1];
                        //                    if (downSweet.Type == SweetsType.EMPTY)
                        //                    {
                        //                        bool canfill = true;  // 用来判断垂直填充是否满足填充需求

                        //                        for (int belowY = y; belowY <= PlayerInfo.yRow; belowY++)
                        //                        {
                        //                            GameSweet sweetUnder = _sweets[downX, belowY];

                        //                            if (sweetUnder.IsMove)
                        //                            {
                        //                                break;
                        //                            }
                        //                            else if (sweet.IsMove == false && sweet.Type != SweetsType.EMPTY)
                        //                            {
                        //                                canfill = false;
                        //                                break;
                        //                            }
                        //                        }

                        //                        if (!canfill)
                        //                        {
                        //                            sweetBelow.Hide();
                        //                            sweet.Move(downX, y + 1, fillTime);
                        //                            _sweets[downX, y + 1] = sweet;
                        //                            _sweets[downX, y] = PoolsManager.Instance.GetSweetObj();
                        //                            isFiledNotFinished = true;
                        //                        }
                        //                    }
                        //                }
                        //            }
                        //        }
                        //    }
                        //}
                    }
                }
            }
            //最上排的特殊情况
            for (int x = 0; x < PlayerInfo.Instance.xColumn; x++)
            {
                GameSweet sweet = _sweets[x, 0];
                if (sweet.Type == SweetsType.EMPTY)
                {
                    sweet.SetSweetsType(SweetsType.NORMAL);
                    sweet.SetXY(x, -1);
                    sweet.Move(x, 0, fillTime);
                    isFiledNotFinished = true;
                }
            }
            return(isFiledNotFinished);
        }