1

因此,我使用 XNA 库创建了一个 2D 国际象棋游戏板,上面包含所有棋子。但是,如果我单击它们,我不知道如何使它们移动。这就是我对其中一件骑士作品的逻辑所拥有的。

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

我如何选择这件作品然后让它移动?

4

1 回答 1

3

我对 XNA 并不特别熟悉,但我会给出一些建议。一方面,您可能希望将片段保存在 2D 数组或类似数组中,而不是将它们放在自己的变量中(如 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) 在其中检查玩家是否正在尝试移动自己的棋子并且这是合法的国际象棋移动等。您可能会使这更优雅和 OO (和/或事件驱动)也是(并添加点击和拖动等),但我保持简单来说明基本逻辑。

于 2009-12-01T22:39:48.250 回答