所以我使用XNA库创建了一个2D棋盘游戏板,上面有所有棋子。但是,如果我点击它们,我不知道如何移动碎片。这就是我对其中一个骑士作品的逻辑所具有的。
if(mouse.LeftButton == ButtonState.Pressed
&& mouse.X == wknight1.position.X
&& mouse.Y == wknight1.position.Y)
{
}
如何选择该片然后让它移动?
答案 0 :(得分: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(和/或事件驱动)(并添加点击和拖动等)但我保持简单来说明基本逻辑。