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; } } }
//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; } } }
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; } } }
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); } }
//交换 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; }