非専門的シンギュラリティー研究所

無限に動き続けるシステムを表す方法を AI なども使って考えていきます。

証明路開発支援システム(4)

MazeState クラスを書き直します。

MazeState クラス

それまでたどってきた事象をつなげたものをパスと呼びます。画面にはパスが表示されます。

「前進モード」と「選択モード」という状態があり、選択肢の間を移動しているときは「選択モード」になっています。それ以外のときは「前進モード」です。初期値は「前進モード」です。

下位のノードが存在するノードを「分岐ノード」と呼びます。「分岐ノード」の下位のノードは選択肢となります。下位のノードが存在しないノードを「直進ノード」と呼びます。

private bool inBranchMode (= false)

現在選択モードかどうかを表します。

public void MoveBackward()

パスの要素が2個以上のとき、最後の要素を消去します。

public void MoveForeward()

前進モードのとき
  • 分岐ノードのとき
    • 下位の選択可能なノードがあるとき
      • 下位の最初の選択可能なノードをパスに追加
      • 選択モードにする
    • 下位の選択可能なノードがないとき
      • 何もしない
  • 直進ノードのとき
    • 次の兄弟ノードがあるとき
      • 次の兄弟ノードをパスに追加
    • 次の兄弟ノードがないとき
      • 何もしない
選択モードのとき

下位のノードに進むことしかできず、下位のノードに進むと前進モードに戻るとします。

  • 分岐ノードのとき
    • 下位の最初のノードをパスに追加
    • 前進モードにする
  • 直進ノードのとき
    • 何もしない

public void MoveLeft()

前進モードのとき
  • 何もしない
選択モードのとき
  • 前の選択可能な兄弟ノードがあるとき
    • 前の選択可能な兄弟ノードで、パスの最後の要素を置き換える(変更があれば)
  • 最後の選択可能な兄弟ノードがあるとき(現在のノードがあるので必ずある)
    • 最後の選択可能な兄弟ノードで、パスの最後の要素を置き換える(変更があれば)

public void MoveRight()

前進モードのとき
  • 何もしない
選択モードのとき
  • 次の選択可能な兄弟ノードがあるとき
    • 次の選択可能な兄弟ノードで、パスの最後の要素を置き換える(変更があれば)
  • 最初の選択可能な兄弟ノードがあるとき(現在のノードがあるので必ずある)
    • 最初の選択可能な兄弟ノードで、パスの最後の要素を置き換える(変更があれば)