7.2 状態遷移図による設計
-
Aさん
-
先生,状態を加えて,床に着くと上に行くようにしてみました.
-
M先生
-
お,すばらしいね.ちょっとプログラムを見せてくれるかな?
-
Aさん
-
このようになりました.
-
M先生
-
少しプログラムがごちゃごちゃしているね.
状態遷移図
を使って整理してみようか.
-
Aさん
-
状態遷移図?
-
M先生
-
状態遷移図っていうのはプログラムを
設計
する記法のことだよ.百聞は一見に如かず.書いてみるよ.一つ目が一般的な形で,二つ目がクレーンゲームの場合の状態遷移図だから.
-
Aさん
-
どのように読むのですか?
-
M先生
-
状態遷移図では,○一つが一つの状態を示している.そして状態の中の「do:」に,その状態のときに繰り返す処理が書かれる.
-
Aさん
-
状態1では,「左に行く」を繰り返すってことですか?
-
M先生
-
その通り.そして,状態を伴うプログラムは何かのきっかけで状態が変わる.状態が変わることを「遷移」といい,状態遷移図では矢印で示す.遷移が起こるきっかけのことを「
イベント
」という.
-
Aさん
-
ええと,状態1で「下向きボタンが押される」というイベントがあったら,状態が2へ遷移するということですね.あと,「リセットボタンが押された」の後の「/座標をリセットする」というのは何ですか?
-
M先生
-
遷移には「イベント」のほかに,遷移が起こるときに1度だけ行う処理を記述することもできる.この処理のことを「
アクション
」という.アクションは「/」の後に記述する.
-
Aさん
-
なるほど.ということは,状態が3から0へ遷移するときに「座標をリセットする」というアクションを行うというように読めばよいのですね.
-
M先生
-
その通り.このように設計段階で整理すると,プログラムもきれいに書き直せるんだよ.例えば,「do:」のプログラムと,状態遷移のプログラムは分けた方が分かりやすくならないかな?
-
Aさん
-
うーむ.
-
M先生
-
基本的に,種類の違うプログラムは,なるべく分けて描いた方がいい.これは,プログラムが複雑になるほど重要になる.じゃあ,アクションと繰り返す処理のプログラムを分けて書いてみてくれる?
-
Aさん
-
分かりました.こんな感じでしょうか?
-
M先生
-
うん.スッキリしたね.こうしてみると,抜けてるところが一目瞭然だね.
-
Aさん
-
何か抜けていますか?
-
M先生
-
状態を遷移させるプログラムは,次の形になっているはず.
-
テスト
-
状態が前の状態?
-
はい
-
遷移する
-
いいえ
-
(なにもしない)
-
Aさん
-
あ,その形式に従っていないスクリプトが2つありますね.
-
M先生
-
でも,直す箇所ははっきりしたでしょ.
-
Aさん
-
状態遷移図を使うまえは,複雑なプログラムで結構頭がごちゃごちゃしていたのですが,図でみると,このプログラムはとてもシンプルだということが分かりました.
-
M先生
-
じゃあ一つ直してみて.
-
Aさん
-
このようになりますかね.
-
M先生
-
よろしい.もう一つは宿題にしよう.
練習問題7.1
もう一つの不完全なスクリプトを直してみよう.
練習問題7.2
クレーンゲームを改良して,スタート地点まで戻るようにしてみよう.ただし,状態遷移図を書いてから始めること.
練習問題7.3
前回のプロジェクトで作ったカーレースゲームのプログラムを,「状態遷移図+変数」を使って作り直してみよう.