Шахматная логика в XNA - PullRequest
       10

Шахматная логика в XNA

1 голос
/ 02 декабря 2009

Итак, я создал двухмерную шахматную доску со всеми ее фигурами, используя библиотеку XNA и все такое. Однако я не знаю, как заставить части двигаться, если я нажму на них. Это то, что у меня есть для логики одной из фигур рыцаря.

if(mouse.LeftButton == ButtonState.Pressed 
      && mouse.X == wknight1.position.X 
      && mouse.Y == wknight1.position.Y)
{
}

Как мне выбрать кусок, а затем позволить ему двигаться?

1 Ответ

3 голосов
/ 02 декабря 2009

Я не знаком с 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), где вы проверяете, пытается ли игрок переместить свою фигуру и что это законный шахматный ход и т. Д. Возможно, вы можете сделать это более элегантный и ОО (и / или управляемый событиями) тоже (с добавлением щелчков и перетаскиваний и т. д.), но я упрощаю проиллюстрировать основную логику.

...