Exemple #1
0
    private bool MatchColumnSweet(Vector2Int position)
    {
        int bottomY = position.y - 1;

        if (position.y > 0)
        {
            while (true)
            {
                BaseSweet bottomBaseSweet = allSweet[position.x, bottomY].GetComponent <BaseSweet>();
                if (bottomBaseSweet.SweetType == SweetCreator.SweetType.EMPTY)
                {
                    break;
                }
                NormalSweet bottomSweet = allSweet[position.x, bottomY].GetComponent <NormalSweet>();
                if (currentSweet.SweetType != bottomSweet.SweetType)
                {
                    break;
                }
                if (--bottomY == -1)
                {
                    break;
                }
            }
        }

        int topY = position.y + 1;

        if (position.y < row - 1)
        {
            while (true)
            {
                BaseSweet topBaseSweet = allSweet[position.x, topY].GetComponent <BaseSweet>();
                if (topBaseSweet.SweetType == SweetCreator.SweetType.EMPTY)
                {
                    break;
                }
                NormalSweet topSweet = allSweet[position.x, topY].GetComponent <NormalSweet>();
                if (currentSweet.SweetType != topSweet.SweetType)
                {
                    break;
                }
                if (++topY == row)
                {
                    break;
                }
            }
        }
        if (topY - bottomY > 3)
        {
            // 消除列
            for (int i = bottomY + 1; i < topY; i++)
            {
                GameObject.Destroy(allSweet[position.x, i]);
                allSweet[position.x, i] = SweetCreator.Instance.CreateEmptySweet(new Vector3(position.x, i, 0));
            }
            return(true);
        }
        return(false);
    }
Exemple #2
0
    public GameObject CreateEmptySweet(Vector3 position)
    {
        GameObject sweet     = Instantiate(sweetPrefabDict[SweetType.EMPTY], position, Quaternion.identity);
        BaseSweet  baseSweet = sweet.GetComponent <BaseSweet>();

        baseSweet.SweetType = SweetType.EMPTY;
        return(sweet);
    }
Exemple #3
0
 private void FillAllEmptySweet()
 {
     for (int x = 0; x < column; x++)
     {
         for (int y = 0; y < row; y++)
         {
             BaseSweet baseSweet = allSweet[x, y].GetComponent <BaseSweet>();
             if (baseSweet.SweetType == SweetCreator.SweetType.EMPTY)
             {
                 FillEmptySweet(x, y);
             }
         }
     }
 }
Exemple #4
0
 public GameObject CreateRandomSweet(Vector3 position)
 {
     //int type = Random.Range(0, 6);
     //if (type == 1)
     {
         GameObject sweet     = Instantiate(sweetPrefabDict[SweetType.NORMAL], position, Quaternion.identity);
         BaseSweet  baseSweet = sweet.GetComponent <BaseSweet>();
         baseSweet.SweetType = SweetType.NORMAL;
         NormalSweet normalSweet = sweet.GetComponent <NormalSweet>();
         normalSweet.SetRandomSweetSprite();
         return(sweet);
     }
     //else
     //{
     //    return Instantiate(sweetPrefabDict[SweetType.NORMAL], position, Quaternion.identity);
     //}
 }
Exemple #5
0
 private void FillEmptySweet(int currentX, int currentY)
 {
     for (int y = currentY + 1; y < row; y++)
     {
         BaseSweet baseSweet = allSweet[currentX, y].GetComponent <BaseSweet>();
         if (baseSweet.SweetType != SweetCreator.SweetType.EMPTY)
         {
             Debug.Log("Not Empty: " + baseSweet.SweetType);
             Vector2Int current = Vector2Int.zero;
             current.Set(currentX, currentY);
             Vector2Int notEmpty = Vector2Int.zero;
             notEmpty.Set(currentX, y);
             SwapSweet(current, notEmpty);
             break;
         }
     }
 }
Exemple #6
0
 private void MatchAllSweet()
 {
     for (int x = 0; x < column; x++)
     {
         for (int y = 0; y < row; y++)
         {
             BaseSweet baseSweet = allSweet[x, y].GetComponent <BaseSweet>();
             if (baseSweet.SweetType != SweetCreator.SweetType.EMPTY)
             {
                 Vector2Int position = Vector2Int.zero;
                 position.Set(x, y);
                 MatchRowSweet(position);
                 MatchColumnSweet(position);
             }
         }
     }
     //FillAllEmptySweet();
 }
Exemple #7
0
    private bool MatchRowSweet(Vector2Int position)
    {
        currentSweet = allSweet[position.x, position.y].GetComponent <NormalSweet>();
        int leftX = position.x - 1;

        if (position.x > 0)
        {
            while (true)
            {
                BaseSweet leftBaseSweet = allSweet[leftX, position.y].GetComponent <BaseSweet>();
                if (leftBaseSweet.SweetType == SweetCreator.SweetType.EMPTY)
                {
                    break;
                }
                NormalSweet leftSweet = allSweet[leftX, position.y].GetComponent <NormalSweet>();
                if (currentSweet.SweetType != leftSweet.SweetType)
                {
                    break;
                }
                if (--leftX == -1)
                {
                    break;
                }
            }
        }

        int rightX = position.x + 1;

        if (position.x < column - 1)
        {
            while (true)
            {
                BaseSweet rightBaseSweet = allSweet[rightX, position.y].GetComponent <BaseSweet>();
                if (rightBaseSweet.SweetType == SweetCreator.SweetType.EMPTY)
                {
                    break;
                }
                NormalSweet rightSweet = allSweet[rightX, position.y].GetComponent <NormalSweet>();
                if (currentSweet.SweetType != rightSweet.SweetType)
                {
                    break;
                }
                if (++rightX == column)
                {
                    break;
                }
            }
        }
        if (rightX - leftX > 3)
        {
            // 消除行
            Debug.Log("消除行");
            for (int i = leftX + 1; i < rightX; i++)
            {
                GameObject.Destroy(allSweet[i, position.y]);
                allSweet[i, position.y] = SweetCreator.Instance.CreateEmptySweet(new Vector3(i, position.y, 0));
            }
            return(true);
        }
        return(false);
    }