前回までの状況はこちら。
最新ソースはこちら(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でまとめて処理できるように修正しています。
これで解析までできるはず。
ん?
あああ!
今の解析処理、解析結果をテキストに吐き出す処理のままだった!
これは解析処理にも修正をいれなくては。。。
ここまで来たので、修正しました。
あああ、この瞬間がたまらない!
これこそがプログラマーの喜び!