Я не знаком с XNA, но дам несколько советов. Во-первых, вы, вероятно, хотите сохранить кусочки в двумерном массиве или аналогичном, а не иметь их в своих переменных (например, wknight1). В противном случае вам придется проверять каждую переменную каждый раз, когда пользователь щелкает.
Я предполагаю, что вам нужна система, в которой пользователь щелкает кусок, чтобы выбрать его, а затем щелкает пустой квадрат, чтобы переместить его туда. Вот некоторый псевдокод для чего-то подобного (я использую нулевое расположение доски для обозначения здесь пустого квадрата):
if(mouse.LeftButton == ButtonState.Pressed
&& board[mouse.x][mouse.y] != null && pieceSelected == null)
{
pieceSelected = board[mouse.x][mouse.y];
selectedX = mouse.x;
selectedY = mouse.y
}
else if (mouse.LeftButton == ButtonState.Pressed
&& board[mouse.x][mouse.y] == null && pieceSelected != null)
{
board[selectedX][selectedY] == null;
board[mouse.x][mouse.y] = pieceSelected;
pieceSelected = null;
}
Вы можете добавить дополнительные условия, такие как isAValidMove (pieceType, startx, starty, finishx, finishy), где вы проверяете, пытается ли игрок переместить свою фигуру и что это законный шахматный ход и т. Д. Возможно, вы можете сделать это более элегантный и ОО (и / или управляемый событиями) тоже (с добавлением щелчков и перетаскиваний и т. д.), но я упрощаю проиллюстрировать основную логику.