【C#】【ALTSEED】【数独】解析処理を実行

前回までの状況はこちら。

最新ソースはこちら(gitHub)

https://github.com/takishita2nd/sudokuGUI

解析処理を実行する処理を作成します。

作り方は前回のクリアボタンと同じです。

Buttonクラスを継承して、AnalyzeButtonクラスを作成します。

    class AnalyzeButton : Button
    {
        public AnalyzeButton() : base(600, 570, "解析開始")
        {

        }

        public override void onClick(SquareObject[,] squareObjects)
        {
            Square[,] squares = new Square[9, 9];
            for (int row = 0; row < 9; row++)
            {
                for (int col = 0; col < 9; col++)
                {
                    squares[row, col] = new Square(squareObjects[row, col].getValue(), row, col);
                }
            }
            Sudoku sudoku = new Sudoku(squares, null);
            sudoku.run();
            for (int row = 0; row < 9; row++)
            {
                for (int col = 0; col < 9; col++)
                {
                    squareObjects[row, col].setValue(squareObjects[row, col].getValue());
                }
            }
        }
    }

これを実装します。

            // ボタン
            List<Button> buttons = new List<Button>();
            Button clear = new ClearButton();
            asd.Engine.AddObject2D(clear.getBackTexture());
            asd.Engine.AddObject2D(clear.getTextObject());
            buttons.Add(clear);

            Button start = new AnalyzeButton();
            asd.Engine.AddObject2D(start.getBackTexture());
            asd.Engine.AddObject2D(start.getTextObject());
            buttons.Add(start);

            // パレット
            palette = new Palette();
            palette.setEngine();




            // Altseedが進行可能かチェックする。
            while (asd.Engine.DoEvents())
            {
                asd.Vector2DF pos = asd.Engine.Mouse.Position;
                if (!mouseHold)
                {
                    for (int row = 0; row < 9; row++)
                    {
                        for (int col = 0; col < 9; col++)
                        {
                            squareObjects[row, col].updateTexture(pos);
                        }
                    }
                    foreach(Button button in buttons)
                    {
                        button.updateTexture(pos);
                    }
                }
                else
                {
                    palette.updateTexture(pos);
                }

                if (asd.Engine.Mouse.LeftButton.ButtonState == asd.ButtonState.Push)
                {
                    if (mouseHold)
                    {
                        if (!palette.isClick(pos))
                        {
                            palette.hide();
                            mouseHold = false;
                        }
                        else
                        {
                            int value = palette.getClickValue(pos);
                            if(clickedSquareObject != null)
                            {
                                clickedSquareObject.setValue(value);
                                palette.hide();
                                mouseHold = false;
                            }
                        }
                    }
                    else
                    {
                        bool isButtonClisk = false;
                        foreach (Button button in buttons)
                        {
                            if (button.isClick(pos))
                            {
                                button.onClick(squareObjects);
                                isButtonClisk = true;
                            }
                        }

                        if (isButtonClisk == false)
                        {
                            mouseHold = true;
                            palette.show(pos);
                            for (int row = 0; row < 9; row++)
                            {
                                for (int col = 0; col < 9; col++)
                                {
                                    if (squareObjects[row, col].isClick(pos) == true)
                                    {
                                        clickedSquareObject = squareObjects[row, col];
                                    }
                                }
                            }
                        }
                    }
                }

                // Altseedを更新する。
                asd.Engine.Update();
            }

各種ボタン系はButtonリストでまとめておき、updateTexture()、isClick()、onClick()処理をforeachでまとめて処理できるように修正しています。

これで解析までできるはず。

ん?

あああ!

今の解析処理、解析結果をテキストに吐き出す処理のままだった!

これは解析処理にも修正をいれなくては。。。

ここまで来たので、修正しました。

あああ、この瞬間がたまらない!

これこそがプログラマーの喜び!