示例#1
0
 public void SetChangeSweet(SweetInfo sweet)
 {
     if (!isGameOver && sweet.CanClear())
     {
         changeSweet = sweet;
     }
 }
示例#2
0
    public void ClearColor(SweetsColorType type, SweetInfo boom1 = null, SweetInfo boom2 = null)
    {
        List <SweetInfo> list = new List <SweetInfo>();
        SweetInfo        item;

        for (int x = 0; x < xColumn; x++)
        {
            for (int y = 0; y < yColumn; y++)
            {
                item = sweetsArray[x, y];
                if (item.CanChangeColor() &&
                    (item.ColorComponent.SweetColorType == type ||
                     type == SweetsColorType.Any))
                {
                    list.Add(item);
                }
            }
        }
        if (boom1 != null)
        {
            list.Add(boom1);
        }
        if (boom2 != null)
        {
            list.Add(boom2);
        }
        ClearSweets(list, true);
    }
示例#3
0
    public bool ClearBiscuit(SweetInfo item)
    {
        bool haveClear = false;

        for (int friendX = item.X - 1; friendX <= item.X + 1; friendX++)
        {
            if (friendX == item.X || friendX < 0 || friendX >= xColumn)
            {
                continue;
            }
            var newItem = sweetsArray[friendX, item.Y];
            if (newItem.SweetType == SweetsType.Barrier && newItem.CanClear())
            {
                sweetsArray[friendX, item.Y] = CreateNewSweet(SweetsType.Empty, friendX, item.Y);
                newItem.ClearComponent.Clear();
                haveClear = true;
            }
        }

        for (int friendY = item.Y - 1; friendY <= item.Y + 1; friendY++)
        {
            if (friendY == item.Y || friendY < 0 || friendY >= yColumn)
            {
                continue;
            }
            var newItem = sweetsArray[item.X, friendY];
            if (newItem.SweetType == SweetsType.Barrier && newItem.CanClear())
            {
                sweetsArray[item.X, friendY] = CreateNewSweet(SweetsType.Empty, item.X, friendY);
                newItem.ClearComponent.Clear();
                haveClear = true;
            }
        }
        return(haveClear);
    }
示例#4
0
 public void SetBaseSweet(SweetInfo sweet)
 {
     if (!isGameOver && sweet.CanClear())
     {
         baseSweet = sweet;
     }
 }
示例#5
0
 public void ReleaseSweet()
 {
     if (baseSweet && changeSweet)
     {
         baseSweet.ExchangeSweets(changeSweet);
     }
     baseSweet = changeSweet = null;
 }
示例#6
0
 public bool CheckSwap(SweetInfo info)
 {
     if (info.CanSwap())
     {
         return(IsAdjacent(info));
     }
     return(false);
 }
示例#7
0
 public bool ExchangeSweets(SweetInfo info)
 {
     if (CanSwap())
     {
         return(SwapComponent.ExchangeSweets(info));
     }
     return(false);
 }
示例#8
0
 public bool ExchangeSweets(SweetInfo changeInfo)
 {
     if (SweetInfo.CanMove() && changeInfo.CanMove() && CheckSwap(changeInfo) &&
         ((SweetInfo.SweetType == SweetsType.Rainbowcandy || changeInfo.SweetType == SweetsType.Rainbowcandy) ||
          changeInfo.ColorComponent.SweetColorType != SweetInfo.ColorComponent.SweetColorType))
     {
         MainGameManager.Instance.ExchangeSweets(SweetInfo, changeInfo);
         return(true);
     }
     return(false);
 }
示例#9
0
 private void TimeOver()
 {
     gameTime   = 0;
     isGameOver = true;
     baseSweet  = changeSweet = null;
     if (MainUIManager)
     {
         MainUIManager.RefreshTime(gameTime);
         MainUIManager.TimeOver(score);
     }
 }
示例#10
0
 public bool ClearSweet(SweetInfo item)
 {
     if (item.CanClear() && !item.ClearComponent.IsClear)
     {
         sweetsArray[item.X, item.Y] = CreateNewSweet(SweetsType.Empty, item.X, item.Y);
         ClearBiscuit(item);
         item.ClearComponent.Clear();
         return(true);
     }
     return(false);
 }
示例#11
0
    public bool ExchangeSweets(SweetInfo info1, SweetInfo info2)
    {
        sweetsArray[info1.X, info1.Y] = info2;
        sweetsArray[info2.X, info2.Y] = info1;
        if (info1.SweetType != SweetsType.Rainbowcandy &&
            info2.SweetType != SweetsType.Rainbowcandy)
        {
            var list1 = MatchSweets(info1, info2.X, info2.Y);
            var list2 = MatchSweets(info2, info1.X, info1.Y);
            if (list1 != null || list2 != null)
            {
                int tempX = info1.X, tempY = info1.Y;
                info1.Move(info2.X, info2.Y, fillTime);
                info2.Move(tempX, tempY, fillTime);
                ClearSweets(list1);
                ClearSweets(list2);

                return(true);
            }
            else
            {
                sweetsArray[info1.X, info1.Y] = info1;
                sweetsArray[info2.X, info2.Y] = info2;
                return(false);
            }
        }
        else if (info1 != info2)
        {
            if (info1.SweetType == SweetsType.Rainbowcandy &&
                info2.SweetType == SweetsType.Rainbowcandy)
            {
                ClearColor(SweetsColorType.Any, info1, info2);
                return(true);
            }
            else if (info1.SweetType == SweetsType.Rainbowcandy &&
                     info2.SweetType != SweetsType.Empty)
            {
                ClearColor(info2.ColorComponent.SweetColorType, info1);
                return(true);
            }
            else if (info2.SweetType == SweetsType.Rainbowcandy &&
                     info1.SweetType != SweetsType.Empty)
            {
                ClearColor(info1.ColorComponent.SweetColorType, info2);
                return(true);
            }
        }
        return(false);
    }
示例#12
0
    public SweetInfo CreateSpecialSweet(int count, SweetsColorType color, int _x, int _y)
    {
        SweetInfo info = null;

        if (count == 4)
        {
            Destroy(sweetsArray[_x, _y].gameObject);
            var type = UnityEngine.Random.Range(0, 1f) < 0.5f ? SweetsType.Row_Clear : SweetsType.Column_Clear;
            info = sweetsArray[_x, _y] = CreateNewSweet(type, _x, _y);
            info.SetColor(color);
        }
        else if (count >= 5)
        {
            Destroy(sweetsArray[_x, _y].gameObject);
            sweetsArray[_x, _y] = CreateNewSweet(SweetsType.Rainbowcandy, _x, _y);
        }

        return(info);
    }
 private void Awake()
 {
     info = GetComponent <SweetInfo>();
 }
示例#14
0
 public void Init(SweetInfo _sweetInfo)
 {
     SweetInfo = _sweetInfo;
 }
示例#15
0
 private bool IsAdjacent(SweetInfo info)
 {
     return((SweetInfo.X == info.X && Mathf.Abs(SweetInfo.Y - info.Y) == 1) ||
            (SweetInfo.Y == info.Y && Mathf.Abs(SweetInfo.X - info.X) == 1));
 }
示例#16
0
    public List <SweetInfo> MatchSweets(SweetInfo sweet, int newX, int newY)
    {
        if (sweet.CanChangeColor())
        {
            SweetsColorType  color              = sweet.ColorComponent.SweetColorType;
            List <SweetInfo> matchRowSweets     = new List <SweetInfo>();
            List <SweetInfo> matchLineSweets    = new List <SweetInfo>();
            List <SweetInfo> finisedMatchSweets = new List <SweetInfo>();

            for (int xDir = -1; xDir <= 1; xDir++)
            {
                if (xDir == 0)
                {
                    continue;
                }
                for (int xDistance = 1; xDistance < xColumn; xDistance++)
                {
                    int posX = newX + (xDir * xDistance);
                    if (posX < 0 || posX >= xColumn)
                    {
                        break;
                    }
                    if (sweetsArray[posX, newY].CanChangeColor() && sweetsArray[posX, newY].ColorComponent.SweetColorType == color)
                    {
                        matchRowSweets.Add(sweetsArray[posX, newY]);
                    }
                    else
                    {
                        break;
                    }
                }
            }
            for (int yDir = -1; yDir <= 1; yDir++)
            {
                if (yDir == 0)
                {
                    continue;
                }
                for (int yDistance = 1; yDistance < yColumn; yDistance++)
                {
                    int posY = newY + (yDir * yDistance);
                    if (posY < 0 || posY >= yColumn)
                    {
                        break;
                    }
                    if (sweetsArray[newX, posY].CanChangeColor() && sweetsArray[newX, posY].ColorComponent.SweetColorType == color)
                    {
                        matchLineSweets.Add(sweetsArray[newX, posY]);
                    }
                    else
                    {
                        break;
                    }
                }
            }

            if (matchRowSweets.Count >= 2)
            {
                finisedMatchSweets.AddRange(matchRowSweets);
            }

            if (matchLineSweets.Count >= 2)
            {
                finisedMatchSweets.AddRange(matchLineSweets);
            }

            finisedMatchSweets.Add(sweet);

            if (finisedMatchSweets.Count >= 3)
            {
                return(finisedMatchSweets);
            }
        }
        return(null);
    }
示例#17
0
    /// <summary>
    /// 部分填充的办法
    /// </summary>
    public bool Fill()
    {
        bool filledNotFinished = false;//判断本次填充是否完成

        for (int y = yColumn - 2; y >= 0; y--)
        {
            for (int x = 0; x < xColumn; x++)
            {
                var sweet = sweetsArray[x, y]; //得到当前元素位置

                if (sweet.CanMove())           //如果无法移动则无法往下填充
                {
                    var sweetDown = sweetsArray[x, y + 1];

                    if (sweetDown.SweetType == SweetsType.Empty)//垂直填充
                    {
                        Destroy(sweetDown.gameObject);
                        sweet.Move(x, y + 1, fillTime);
                        sweetsArray[x, y + 1] = sweet;
                        sweetsArray[x, y]     = CreateNewSweet(SweetsType.Empty, x, y);
                        filledNotFinished     = true;
                    }
                    else//斜向填充
                    {
                        for (int _downX = -1; _downX <= 1; _downX++)
                        {
                            if (_downX != 0)
                            {
                                int downX = x + _downX;
                                if (downX >= 0 && downX < xColumn)
                                {
                                    SweetInfo downSweet = sweetsArray[downX, y + 1];
                                    if (downSweet.SweetType == SweetsType.Empty)
                                    {
                                        bool canfill = true;//用来判断垂直填充是否可以满足填充要求
                                        for (int aboveY = y; aboveY >= 0; aboveY--)
                                        {
                                            SweetInfo sweetAbove = sweetsArray[downX, aboveY];
                                            if (sweetAbove.CanMove())
                                            {
                                                break;
                                            }
                                            else if (sweetAbove.SweetType != SweetsType.Empty)
                                            {
                                                canfill = false;
                                                break;
                                            }
                                        }
                                        if (!canfill)
                                        {
                                            Destroy(downSweet.gameObject);
                                            sweet.Move(downX, y + 1, fillTime);
                                            sweetsArray[downX, y + 1] = sweet;
                                            sweetsArray[x, y]         = CreateNewSweet(SweetsType.Empty, x, y);
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        for (int x = 0; x < xColumn; x++)
        {
            var sweet = sweetsArray[x, 0];//得到当前元素位置

            if (sweet.SweetType == SweetsType.Empty)
            {
                Destroy(sweet.gameObject);
                sweetsArray[x, 0] = CreateNewSweet(SweetsType.Normal, x, 0, SweetsSpawnPos.Up);
                filledNotFinished = true;
            }
        }

        //filledNotFinished = !filledNotFinished? CheckAll():true;

        return(filledNotFinished);
    }