いろいろ試した結果、mermaidというフォーマットでやってみることにした
文法制約を実際の処理に即して考えた
左側にIndex[Feeの反応文]、右側にそのあとのJump先Indexを書く
s000([Start]) --> s001
s001[あ、いらっしゃいませ!] --> s002
s000,s001はインデックスであり、文字列ならOK
入力が必要な場合は、下記の">key in]"を追加する
s001[あ、いらっしゃいませ!] --> s002
s002[初めてのご来店ですか?] --> s004>Key in]
Key inという文章自体は何でもいいことにする
処理は">(任意)]"が存在すれば、入力が必要としてkey in待ちとし、ないときは0.5秒後に次の文にjumpする
分岐は分岐先を並列に並べる
s002[初めてのご来店ですか?] --> s004>Key in]
s004 --> |Yes_No_Other::Yes|x000[初めまして…ですね。それでは…] --> s005
s004 --> |Yes_No_Other::No|x001[失礼しました。それでは…] --> s006
s004 --> |Yes_No_Other::Other|x002[えっと、もう一度お願いします] --> s002
入力が必要ということは、その入力でなんらかの処理が必要と考えられる
上記は分岐処理の様子を書いている
Key in後にYes/No/Otherの3種類に分岐するので、3つの文を書く
”| |” で ”|(処理)::(戻り値と比較する文字)|” を示している
その後ろのx000などはダミー(これがないとGUIで正しく表示されないため)なので、重複がなければOK
例えば
s004 --> |Yes_No_Other::Yes|x000[初めまして…ですね。それでは…] --> s005
は、s004つまりキー入力の結果をYes_No_Otherという処理をした結果の戻り値が"Yes"ならば、「初めまして…ですね」という文を出力して、s005というインデックスに移行する
戻る場合のIndexは左側のIndexを注目する
s002[初めてのご来店ですか?] --> s004>Key in]
s004 --> |Yes_No_Other::Other|x002[えっと、もう一度お願いします] --> s002
「もう一度お願い」するのは再度Key inをお願いするので、s002に戻ることになる
処理が連続する場合には、最後に((pass))を付けてUIを見やすくする
s022 --> |Yes_No_Other::Yes |x009[ありがとうございます。重複がないか確認しますね] --> s023((pass))
s023 --> |Check_ID::ID_exist|x012[IDが重複していました。申し訳ありませんが、他のIDでもう一度お願いします] --> s020
このように完成した
Comments