フリップ ゲームを作成し、プレーヤーに次の動きのヒントを与える方法を作成しようとしています。基本的には、幅優先探索を使用してゲームを解決し、プレイヤーに次の動きを示そうとしています。ただし、アルゴリズムに問題があります。s は、Exit()
デバッグを支援するためのものです。isWhite
いずれにせよ、アルゴリズムは現在のゲーム状態 をに正常に追加し、gameStates
それが解であるかどうかを確認します。キューに追加しようとすると問題が発生します。私のコードは 2 番目に到達せず、そのExit()
理由がわかりません。どんな助けでも大歓迎です。ありがとう。
編集:問題が修正されました。解決策が見つかったら、それをどうするかを考えなければなりません...
private void hint()
{
Queue<bool[,]> statesToCheck = new Queue<bool[,]>();
List<bool[,]> closedStates = new List<bool[,]>();
bool[,] rootState = new bool[4, 4];
rootState = (bool[,])isWhite.Clone();
statesToCheck.Enqueue((bool[,])rootState.Clone());
//closedStates.Add((bool[,])rootState.Clone());
while (statesToCheck.Count() > 0)
{
bool solved = true;
//checks for solution state
rootState = statesToCheck.Dequeue();
for (int row = 0; row < GAME_SIZE; row++)
for (int col = 0; col < GAME_SIZE; col++)
{
if (!rootState[row, col])
solved = false;
}
if (solved)
{
//add something to do
System.Diagnostics.Debug.Write("It worked");
return;
}
else
{
closedStates.Add((bool[,])rootState.Clone());
}
//simulates clicking each space and adds each one to statesToCheck
for (int row = 0; row < GAME_SIZE; row++)
for (int col = 0; col < GAME_SIZE; col++)
{
bool[,] stateToChange = new bool[4, 4];
stateToChange = (bool[,])rootState.Clone();
flip(stateToChange, row, col);//gets next gameState (next node in a typical breadth-first search)
if (!closedStates.Contains(stateToChange))
{
//closedStates.Add((bool[,])rootState.Clone());
statesToCheck.Enqueue((bool[,])stateToChange.Clone());
}
}
}