私は自分のスキルを磨くための演習として、またそれが楽しいという理由から、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()
}
}
}