前回までの状況はこちら。
最新ソースはこちら(gitHub)
https://github.com/takishita2nd/sudokuGUI
今回でパレット処理を完成させます。
パレットの数字をクリックしたら、そのパレットマスの数字を取得して、パレットを消去し、マスに数字を入力します。
まずは、パレットのどのマスがクリックされたかを確認します。
これはSquareObjectに実装します。
public bool isClick(asd.Vector2DF pos)
{
if (pos.X > _x && pos.X < _x + width
&& pos.Y > _y && pos.Y < _y + height)
{
return true;
}
else
{
return false;
}
}
やっていることはupdateTexture()と同じで、マウスカーソルがマスの中にあるかどうかを判定して、true/falseを返します。
そしてもう一つ。
public int getValue()
{
return _value;
}
こっちは特に説明は入らないですよね。
これをPaletteクラスに実装します。
public int getClickValue(asd.Vector2DF pos)
{
for (int row = 0; row < 3; row++)
{
for (int col = 0; col < 3; col++)
{
if(paletteSquareObjects[row, col].isClick(pos) == true)
{
return paletteSquareObjects[row, col].getValue();
}
}
}
if (PaletteBatsuSquareObject.isClick(pos))
{
return 0;
}
return 0;
}
isClick()でマウスカーソルがマスの中にあるかを確認して、その中にあればgetValue()で値を取得します。
これを×にも実装し、こちらは空白を意味する0を返します。
これをsudokuUIに実装します。
// 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);
if(squareObjects[row, col].isClick(pos) == true)
{
clickedSquareObject = squareObjects[row, col];
}
}
}
}
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
{
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];
}
}
}
}
}
mouseHold==true(パレット表示中)で、パレットがクリックされた場合、先ほど実装したgetClickValue()を使用して、数値を取得します。
9×9のどこをクリックしたかを覚えておかなければならないため、パレットを表示する際に、どのマスをクリックされたかを覚えておきます。
この覚えたマスに対して、パレットから取得した数値を設定します。
ちなみに、palette.updateTexture(pos)をコメント化しているのは、パレットにもマウスカーソルでテクスチャを適用しようとすると、パレットを消したときにテクスチャが残ってしまうからです。
多分、エンジンのバグ。
なので、パレットにはマウスカーソルでテクスチャ適用は諦めました。
実行結果はこんな感じです。
だいぶ形になってきました。
完成まであと少しです。
「【C#】【ALTSEED】【数独】パレットから数字を入力する」への1件のフィードバック