2006 年 5 月 18 日 20 時 38 分

PuzzleSolver #3: オブジェクト構築


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


今日は PuzzleSolver のコンストラクタを作る。

行や列、解答を独立したオブジェクトとして管理するので、
PuzzleSolver はそれらを構築するだけだ。
コンストラクタを作る。今回も一般的なエラー処理は省く。

    Public Sub Construct(ByVal Loader As IPuzzleLoader)
        Dim x As Long
        Dim y As Long

        ' 解答状況クラスを構築
        Set m_oAnswer = New PuzzleAnswer
        Call m_oAnswer.Construct(Loader)

        ' 行オブジェクトを構築する
        ReDim m_oRows(0 To Loader.Height - 1)
        For y = 0 To Loader.Height - 1
            Set m_oRows(y) = New PuzzleLine
            Call m_oRows(y).Construct(m_oAnswer, Loader.RowHints(y), False, y)
        Next

        ' 列オブジェクトを構築する
        ReDim m_oColumns(0 To Loader.Width - 1)
        For x = 0 To Loader.Width - 1
            Set m_oColumns(x) = New PuzzleLine
            Call m_oColumns(x).Construct(m_oAnswer, Loader.ColumnHints(x), True, x)
        Next

    End Sub

オブジェクトの階層構造はここで構築される。

PuzzleSolver は最上位で、
PuzzleAnswer や PuzzleLine が、その下につく形となる。
PuzzleLine はそれぞれ PuzzleHintCollection を持つ。
役割分担によって階層化されているのだ。

呼び出し側が利用するのは、PuzzleSolver と PuzzleAnswer。
PuzzleAnswer は解答状態なので、
ユーザが解答に変更を加えても対応できるように、
呼び出し元に Answer プロパティとして公開している。

それ以外にユーザが操作するのは、
PuzzleSolver の Solve メソッドだけだ。

PuzzleSolver の起動窓口である、Solve メソッドでは、
このオブジェクト階層をたどりながら、
問題を解いていくことになるのだが、
実装のためには、アルゴリズムについて考える必要がある。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.