Пример #1
0
    public void SwapPieces(Piece piece1, Piece piece2)
    {
        if (piece1.IsMovable() && piece2.IsMovable())
        {
            pieces [piece1.X, piece1.Y] = piece2;
            pieces [piece2.X, piece2.Y] = piece1;

            if (GetMatch(piece1, piece2.X, piece2.Y) != null || GetMatch(piece2, piece1.X, piece1.Y) != null ||
                piece1.Type == PieceType.RAINBOW || piece2.Type == PieceType.RAINBOW)
            {
                int piece1X = piece1.X;
                int piece1Y = piece1.Y;

                piece1.MovableComponent.Move(piece2.X, piece2.Y, fillTime);
                piece2.MovableComponent.Move(piece1X, piece1Y, fillTime);

                if (piece1.Type == PieceType.RAINBOW && piece1.IsClearable() && piece2.IsColored())
                {
                    ClearColorPiece clearColor = piece1.GetComponent <ClearColorPiece> ();

                    if (clearColor)
                    {
                        clearColor.Color = piece2.ColorComponent.Color;
                    }

                    ClearPiece(piece1.X, piece1.Y);
                }

                if (piece2.Type == PieceType.RAINBOW && piece2.IsClearable() && piece1.IsColored())
                {
                    ClearColorPiece clearColor = piece2.GetComponent <ClearColorPiece> ();

                    if (clearColor)
                    {
                        clearColor.Color = piece1.ColorComponent.Color;
                    }

                    ClearPiece(piece2.X, piece2.Y);
                }
                ClearAllValidMatches();

                if (piece1.Type == PieceType.ROW_CLEAR || piece1.Type == PieceType.COLUMN_CLEAR)
                {
                    ClearPiece(piece1.X, piece1.Y);
                }

                if (piece2.Type == PieceType.ROW_CLEAR || piece2.Type == PieceType.COLUMN_CLEAR)
                {
                    ClearPiece(piece2.X, piece2.Y);
                }

                pressedPiece = null;
                enteredPiece = null;

                StartCoroutine(Fill());
            }
            else
            {
                pieces [piece1.X, piece1.Y] = piece1;
                pieces [piece2.X, piece2.Y] = piece2;
            }
        }
    }
Пример #2
0
    //Swap the two pieces if they are adjacent
    public void SwapPieces(GamePiece piece1, GamePiece piece2)
    {
        //assign to each others positions
        if (piece1.IsMovable() && piece2.IsMovable())
        {
            pieces[piece1.X, piece1.Y] = piece2;
            pieces[piece2.X, piece2.Y] = piece1;

            //check if either swapped pieces create a match
            if (GetMatch(piece1, piece2.X, piece2.Y) != null || GetMatch(piece2, piece1.X, piece1.Y) != null || piece1.Type == PieceType.RAINBOW || piece2.Type == PieceType.RAINBOW)
            {
                //move the pieces from one space of the grid to the other
                int piece1X = piece1.X;
                int piece1Y = piece1.Y;

                piece1.MovableComponent.Move(piece2.X, piece2.Y, fillTime);
                piece2.MovableComponent.Move(piece1X, piece1Y, fillTime);

                if (piece1.Type == PieceType.RAINBOW && piece1.IsClearable() && piece2.IsColored())
                {
                    ClearColorPiece clearColor = piece1.GetComponent <ClearColorPiece>();

                    if (clearColor)
                    {
                        clearColor.Color = piece2.ColorComponent.Color;
                    }

                    ClearPiece(piece1.X, piece1.Y);
                }

                if (piece2.Type == PieceType.RAINBOW && piece2.IsClearable() && piece1.IsColored())
                {
                    ClearColorPiece clearColor = piece2.GetComponent <ClearColorPiece>();

                    if (clearColor)
                    {
                        clearColor.Color = piece1.ColorComponent.Color;
                    }

                    ClearPiece(piece2.X, piece2.Y);
                }

                ClearAllValidMatches();

                if (piece1.Type == PieceType.ROW_CLEAR || piece1.Type == PieceType.COLUMN_CLEAR)
                {
                    ClearPiece(piece1.X, piece1.Y);
                }

                if (piece2.Type == PieceType.ROW_CLEAR || piece2.Type == PieceType.COLUMN_CLEAR)
                {
                    ClearPiece(piece2.X, piece2.Y);
                }

                pressedPiece = null;
                enteredPiece = null;

                StartCoroutine(Fill());
            }
            else
            {
                pieces[piece1.X, piece1.Y] = piece1;
                pieces[piece2.X, piece2.Y] = piece2;
            }
        }
    }
Пример #3
0
    public void SwapPieces(GamePiece piece1, GamePiece piece2)
    {
        if (gameOver)
        {
            return;
        }

        if (piece1.IsMovable() && piece2.IsMovable())
        {
            pieces[piece1.X, piece1.Y] = piece2;
            pieces[piece2.X, piece2.Y] = piece1;

            if (GetMatch(piece1, piece2.X, piece2.Y) != null || GetMatch(piece2, piece1.X, piece1.Y) != null ||
                piece1.Type == PieceType.RAINBOW || piece2.Type == PieceType.RAINBOW)
            {
                int piece1X = piece1.X;
                int piece1Y = piece1.Y;

                piece1.MovableComponent.Move(piece2.X, piece2.Y, fillTime);
                piece2.MovableComponent.Move(piece1X, piece1Y, fillTime);

                if (piece1.Type == PieceType.RAINBOW && piece1.IsClearable() && piece2.IsColored())
                {
                    ClearColorPiece clearColor = piece1.GetComponent <ClearColorPiece>();

                    if (clearColor)
                    {
                        clearColor.Color = piece2.ColorComponent.Color;
                    }

                    ClearPiece(piece1.X, piece1.Y);
                }

                if (piece2.Type == PieceType.RAINBOW && piece2.IsClearable() && piece1.IsColored())
                {
                    ClearColorPiece clearColor = piece2.GetComponent <ClearColorPiece>();

                    if (clearColor)
                    {
                        clearColor.Color = piece1.ColorComponent.Color;
                    }

                    ClearPiece(piece2.X, piece2.Y);
                }

                ClearAllValidMatches();

                // special pieces get cleared, event if they are not matched
                if (piece1.Type == PieceType.ROW_CLEAR || piece1.Type == PieceType.COLUMN_CLEAR)
                {
                    ClearPiece(piece1.X, piece1.Y);
                }

                if (piece2.Type == PieceType.ROW_CLEAR || piece2.Type == PieceType.COLUMN_CLEAR)
                {
                    ClearPiece(piece2.X, piece2.Y);
                }

                pressedPiece = null;
                enteredPiece = null;

                StartCoroutine(Fill());

                // TODO consider doing this using delegates
                level.OnMove();
            }
            else
            {
                pieces[piece1.X, piece1.Y] = piece1;
                pieces[piece2.X, piece2.Y] = piece2;
            }
        }
    }
Пример #4
0
    public void SwapPieces(GamePiece piece1, GamePiece piece2)//符合条件后交换两物体位置
    {
        if (gameOver)
        {
            return;
        }
        if (isPause)
        {
            return;
        }
        // print(pieces[piece1.X, piece1.Y].X + " " + pieces[piece1.X, piece1.Y].Y +"/n"+pieces[piece2.X, piece2.Y].X + " " + pieces[piece2.X, piece2.Y].Y);

        if (piece1.IsMovable() && piece2.IsMovable()) //如果两者均可移动
        {
            Pause();                                  //暂时关闭该方法;
            pieces[piece1.X, piece1.Y] = piece2;      //交换两者位置
            pieces[piece2.X, piece2.Y] = piece1;

            if (GetMatch(piece1, piece2.X, piece2.Y) != null || GetMatch(piece2, piece1.X, piece1.Y) != null ||
                piece1.Type == PieceType.Rainbow_Clear || piece2.Type == PieceType.Rainbow_Clear)
            //若没有返回空白,则为匹配,若为Rainbow,则可直接与任意元素匹配
            {
                int piece1X = piece1.X;
                int piece1Y = piece1.Y;                                     //暂存piece1的坐标

                piece1.MovableComponent.Move(piece2.X, piece2.Y, fillTime); //互换时的动作
                piece2.MovableComponent.Move(piece1X, piece1Y, fillTime);

                //若为五连消生成的物体,则执行该操作进行消除
                if (piece1.Type == PieceType.Rainbow_Clear && piece1.IsClearable() && piece2.IsColored())
                {
                    ClearColorPiece clearColor = piece1.GetComponent <ClearColorPiece>();
                    if (clearColor)
                    {
                        piece1.MaxSkill  = piece2.nowColor();//保存和特殊方块一起消除的颜色
                        clearColor.Color = piece2.ColorComponent.Color;
                    }
                    ClearPiece(piece1.X, piece1.Y);
                }
                if (piece2.Type == PieceType.Rainbow_Clear && piece2.IsClearable() && piece1.IsColored())
                {
                    ClearColorPiece clearColor = piece2.GetComponent <ClearColorPiece>();
                    if (clearColor)
                    {
                        piece2.MaxSkill  = piece1.nowColor();//保存和特殊方块一起消除的颜色
                        clearColor.Color = piece1.ColorComponent.Color;
                    }
                    ClearPiece(piece2.X, piece2.Y);
                }
                //检查piece1和piece2的type是否是特殊图标,若是则清除
                if (piece1.Type == PieceType.Rainbow_Clear || piece2.Type == PieceType.Rainbow_Clear)
                {
                    ClearPiece(piece1.X, piece1.Y);
                    ClearPiece(piece2.X, piece2.Y);
                }
                ClearAllValidMatches(); // 调用清除方法

                pressPiece = null;
                enterPiece = null;      //当拖动后清除完,将拖动对象赋为空,在clearall方法中检索,判断是否生成特殊元素

                StartCoroutine(Fill()); //清楚后补充
                level.OnMove();
                //关卡脚本判断人物移动的方法
            }
            else//如果移动后没有匹配的三个,则交换两者
            {
                Debug.Log("移不动");
                Start();
                pieces[piece1.X, piece1.Y] = piece1;//交换两者位置
                pieces[piece2.X, piece2.Y] = piece2;
                //piece1.MovableComponent.Move(piece2.X, piece2.Y, fillTime);//互换时的动作
                //piece2.MovableComponent.Move(piece1X, piece1Y, fillTime);
            }
            //  print(pieces[piece1.X, piece1.Y].X + " " + pieces[piece1.X, piece1.Y].Y + "/n" + pieces[piece2.X, piece2.Y].X + " " + pieces[piece2.X, piece2.Y].Y);
        }
    }
Пример #5
0
    //交换
    public void Change()
    {
        //游戏结束
        if (gameOver)
        {
            return;
        }

        if (isChange())
        {
            int ax = pieceA.X; int ay = pieceA.Y;
            int bx = pieceB.X; int by = pieceB.Y;
            //坐标交换
            gamePieces[ax, ay] = pieceB;
            //gamePieces[ax, ay].X = ax;
            //gamePieces[ax, ay].Y = ay;
            gamePieces[bx, by] = pieceA;
            //gamePieces[bx, by].X = bx;
            //gamePieces[bx, by].Y = by;

            if (GetMatch(pieceA, bx, by) != null || GetMatch(pieceB, ax, ay) != null ||
                pieceA.Type == PieceType.COLOR_CLEAR ||
                pieceB.Type == PieceType.COLOR_CLEAR)   //有连子或者彩虹颜色
            {
                //位置交换
                pieceA.MoveableComponent.move(bx, by);
                pieceB.MoveableComponent.move(ax, ay);
                //彩色交换,需要消除所有同颜色
                if (pieceA.Type == PieceType.COLOR_CLEAR && pieceB.isColor)
                {
                    ClearColorPiece colorPiece = pieceA.GetComponent <ClearColorPiece>();
                    if (colorPiece)
                    {
                        colorPiece.Color = pieceB.ColorComponent.ColorTypeRef;
                    }
                    ClearPiece(pieceA.X, pieceA.Y);
                }
                else if (pieceB.Type == PieceType.COLOR_CLEAR && pieceA.isColor)
                {
                    ClearColorPiece colorPiece = pieceB.GetComponent <ClearColorPiece>();
                    if (colorPiece)
                    {
                        colorPiece.Color = pieceA.ColorComponent.ColorTypeRef;
                    }
                    ClearPiece(pieceB.X, pieceB.Y);
                }
                //清除
                ClearAllMatch();
                //清除完毕后通知
                level.OnMove();
                //填充
                StartCoroutine(Fill());
            }
            else
            {
                //交换不成功,坐标换回来
                gamePieces[ax, ay] = pieceA;
                gamePieces[bx, by] = pieceB;
            }
        }
        //清除
        pieceA = null;
        pieceB = null;
    }