前回までの状況はこちら。
最新ソースはこちら(gitHub)
https://github.com/takishita2nd/sudoku
仮置きロジックに必要な処理を実装していきます。
まずは、解析状況のデータの複製を作るところです。
仮置き解析して、矛盾があれば、そのデータを破棄するようにします。
オブジェクトの複製に=演算子を使用してはいけません。
これはオブジェクトの移動です。
C言語的に言えば、ポインタを移しているだけです。
なので、オブジェクトをnewで作成して、同じデータを持たせるように設定しなければなりません。
まずは、Squareクラス。
class Square
{
// 確定した数字
private int _value;
// 確定したかどうか
private bool _confirmed;
public Square()
{
this._value = 0;
this._confirmed = false;
}
public Square(int val)
{
this._value = val;
if(val == 0)
{
this._confirmed = false;
}
else
{
this._confirmed = true;
}
}
中略
public Square Clone()
{
return new Square(_value);
}
}
Clone()で同じデータを持つオブジェクトを作成して返しています。
次に、Sudokuクラス。
class Sudoku
{
private Square[,] _square;
中略
private Square[,] makeClone(Square[,] _square)
{
Square[,] ret = new Square[9, 9];
for(int i = 0; i < 9; i++)
{
for(int j = 0; j < 9; j++)
{
ret[i, j] = _square[i, j].Clone();
}
}
return ret;
}
}
Square[]をnewで作成し、SquareのCloneを設定し、返しています。
これでこの関数の戻り値は、完全なSquare[,]の複製が作成されます。
次回は実際に仮置きをするロジックを考えます。