我一直在用 C# 编写一个 Windows 应用程序国际象棋游戏作为磨练我的技能的练习,也因为它很有趣。我已经包含了允许玩家选择选项以突出显示一个棋子在被点击时可以合法移动到的方格的功能。CustomControl 处理棋盘的呈现,它还突出显示正方形。
这一切都按计划进行,直到玩家开始将棋子拖到新的方块上。鼠标一移动,高光就消失了。我怀疑引发了 Paint 事件并且板重新绘制自身。而且由于高光不是初始电路板布局的一部分,因此它们不会被绘制。
我想要做的是让方块保持突出显示,直到将棋子放在其目标方块上。有可能做到这一点吗?任何建议将不胜感激。
伪代码:
void piece_MouseDown(object sender, MouseEventArgs e)
{
Piece piece = (Piece)sender;
legalSquares = CalculateLegalSquares(piece.CurrentSquare);
if (legalSquares.Count > 0 && this.showLegalMoves)
{
chessBoard1.HighlightSquares(legalSquares);
}
// I believe a Paint event gets raised either here...
piece.DoDragDrop(piece, DragDropEffects.Move);
}
void piece_DragEnter(object sender, DragEventArgs e)
{
// ...or here, that removes the highlights.
if (e.Data.GetDataPresent("Chess.Piece"))
{
e.Effect = DragDropEffects.Move;
}
else
{
e.Effect = DragDropEffects.None;
}
}
void piece_DragDrop(object sender, DragEventArgs e)
{
Piece piece = (Piece)e.Data.GetData("Chess.Piece");
if (piece.CurrentSquare != dropSquare)
{
if (legalSquares.Contains(dropSquare))
{
// This is where I’d like the highlights to stop
// DoStuff()
}
}
}