Как я могу перемещать изображения внутри сетки?
У меня есть сетка 8x8, которую я заполняю объектами BoxView.
var tap = new TapGestureRecognizer();
tap.Tapped += (s, e) =>
{
Xamarin.Forms.BoxView b = s as Xamarin.Forms.BoxView;
if (tapped == false)
{
xp = Convert.ToInt32(b.StyleId.Last());
yp = Convert.ToInt32(b.StyleId.First());
tapped = true;
}
else
{
int xd = Convert.ToInt32(b.StyleId.Last());
int yd = Convert.ToInt32(b.StyleId.First());
movePiece(chessboard.Board[xp, yp], xp, yp, xd, yd);
tapped = false;
}
};
for (int i = 0; i < 8; i++) // row
{
for(int j = 0; j < 8; j++) // column
{
if(((i % 2 == 0) && (j % 2 == 0)) || ((i % 2 != 0) && (j % 2 != 0)))
{
Xamarin.Forms.BoxView box = new Xamarin.Forms.BoxView { Color = Color.AntiqueWhite, StyleId = i.ToString() + j.ToString()};
board.Children.Add(box, i, j);
box.GestureRecognizers.Add(tap);
}
else
{
Xamarin.Forms.BoxView box = new Xamarin.Forms.BoxView { Color = Color.IndianRed, StyleId = i.ToString() + j.ToString()};
board.Children.Add(box, i, j);
box.GestureRecognizers.Add(tap);
}
}
}
return board;
}
Я пытался использовать TapGestureRecognizer на плитках, но он не реагировал, или я получил исключение IndexOutOfBound из этого: movePiece(chessboard.Board[xp, yp], xp, yp, xd, yd);
Изменить:
Код для movePiece ():
private static void movePiece(Piece piece, int x_prev, int y_prev, int x_dest, int y_dest)
{
loadPieces(piece, x_dest, y_dest);
}
Я еще не реализовал logi c в функции. На данный момент все, что ему нужно сделать, это загрузить похожий кусок на плитку назначения.
Код для loadPieces ()
private static void loadPieces(Piece piece, int x, int y)
{
Image image = new Image();
switch (piece.Name)
{
case "pawn" when piece.White == true:
image.Source = "Assets/Pieces/WhitePawn.png";
break;
case "rook" when piece.White == true:
image.Source = "Assets/Pieces/WhiteRook.png";
break;
case "knight" when piece.White == true:
image.Source = "Assets/Pieces/WhiteKnight.png";
break;
case "bishop" when piece.White == true:
image.Source = "Assets/Pieces/WhiteBishop.png";
break;
case "king" when piece.White == true:
image.Source = "Assets/Pieces/WhiteKing.png";
break;
case "queen" when piece.White == true:
image.Source = "Assets/Pieces/WhiteQueen.png";
break;
case "pawn" when piece.White == false:
image.Source = "Assets/Pieces/BlackPawn.png";
break;
case "rook" when piece.White == false:
image.Source = "Assets/Pieces/BlackRook.png";
break;
case "knight" when piece.White == false:
image.Source = "Assets/Pieces/BlackKnight.png";
break;
case "bishop" when piece.White == false:
image.Source = "Assets/Pieces/BlackBishop.png";
break;
case "king" when piece.White == false:
image.Source = "Assets/Pieces/BlackKing.png";
break;
case "queen" when piece.White == false:
image.Source = "Assets/Pieces/BlackQueen.png";
break;
}
Grid.SetRow(image, x);
Grid.SetColumn(image, y);
board.Children.Add(image);