-1

フリップ ゲームを作成し、プレーヤーに次の動きのヒントを与える方法を作成しようとしています。基本的には、幅優先探索を使用してゲームを解決し、プレイヤーに次の動きを示そうとしています。ただし、アルゴリズムに問題があります。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());
                    }
                }
        }
4

1 に答える 1