MazeState クラスを書き直します。
MazeState クラス
それまでたどってきた事象をつなげたものをパスと呼びます。画面にはパスが表示されます。
「前進モード」と「選択モード」という状態があり、選択肢の間を移動しているときは「選択モード」になっています。それ以外のときは「前進モード」です。初期値は「前進モード」です。
下位のノードが存在するノードを「分岐ノード」と呼びます。「分岐ノード」の下位のノードは選択肢となります。下位のノードが存在しないノードを「直進ノード」と呼びます。
private bool inBranchMode (= false)
現在選択モードかどうかを表します。
public void MoveBackward()
パスの要素が2個以上のとき、最後の要素を消去します。
public void MoveForeward()
前進モードのとき
- 分岐ノードのとき
- 下位の選択可能なノードがあるとき
- 下位の最初の選択可能なノードをパスに追加
- 選択モードにする
- 下位の選択可能なノードがないとき
- 何もしない
- 下位の選択可能なノードがあるとき
- 直進ノードのとき
- 次の兄弟ノードがあるとき
- 次の兄弟ノードをパスに追加
- 次の兄弟ノードがないとき
- 何もしない
- 次の兄弟ノードがあるとき
選択モードのとき
下位のノードに進むことしかできず、下位のノードに進むと前進モードに戻るとします。
- 分岐ノードのとき
- 下位の最初のノードをパスに追加
- 前進モードにする
- 直進ノードのとき
- 何もしない
public void MoveLeft()
前進モードのとき
- 何もしない
選択モードのとき
- 前の選択可能な兄弟ノードがあるとき
- 前の選択可能な兄弟ノードで、パスの最後の要素を置き換える(変更があれば)
- 最後の選択可能な兄弟ノードがあるとき(現在のノードがあるので必ずある)
- 最後の選択可能な兄弟ノードで、パスの最後の要素を置き換える(変更があれば)
public void MoveRight()
前進モードのとき
- 何もしない
選択モードのとき
- 次の選択可能な兄弟ノードがあるとき
- 次の選択可能な兄弟ノードで、パスの最後の要素を置き換える(変更があれば)
- 最初の選択可能な兄弟ノードがあるとき(現在のノードがあるので必ずある)
- 最初の選択可能な兄弟ノードで、パスの最後の要素を置き換える(変更があれば)












