私はC#で15パズルゲームを作成しています。これにより、ユーザーは最大10x10パズルまでのカスタムの行と列の値を入力できます。このため、シャッフル方法に問題があります。パズルが常に解けるように作りたいです。最初に勝利のパズルを作成し、次に空のスペースをシャッフルすることによって。問題は、毎回すべてのクリックイベントを呼び出すのは非効率的すぎることです。空のスペースに隣接しているが対角線ではないボタンのクリックイベントを呼び出す方法が必要です。また、空いている場所には非表示の静的ボタンを使用します。PuzzlePieceクラスはButtonから継承します。これを行う方法がよくわかりません。助けていただければ幸いです。
ありがとう
これが私が持っているものです:
private void shuffleBoard()
{
//5 is just for test purposes
for (int i = 0; i < 5; i++)
{
foreach (Control item in this.Controls)
{
if (item is PuzzlePiece)
{
((PuzzlePiece)item).PerformClick();
}
}
}
}
void PuzzlePiece_Click(object sender, EventArgs e)
{
PuzzlePiece piece = (PuzzlePiece)sender;
if (piece.Right == puzzleForm.emptyPiece.Left && piece.Top == puzzleForm.emptyPiece.Top)
{
movePiece(piece);
}
else if (piece.Left == puzzleForm.emptyPiece.Right && piece.Top == puzzleForm.emptyPiece.Top)
{
movePiece(piece);
}
else if (piece.Top == puzzleForm.emptyPiece.Bottom && piece.Left == puzzleForm.emptyPiece.Left)
{
movePiece(piece);
}
else if (piece.Bottom == puzzleForm.emptyPiece.Top && piece.Left == puzzleForm.emptyPiece.Left)
{
movePiece(piece);
}
}