分岐
状況によって、セリフや処理などを変える方法を記述します。
大雑把に2つの方法がありますが、好きなものを選ぶと良いでしょう。
ゴースト起動時の分岐を作ってみることにします。
「*起動」が呼ばれる時に、以下の動作をするようにします。
ジャンプでの分岐は、テンプレートRポストと狛犬でも使われている方法です。
*起動 >深夜トーク【タブ】(現在時)<=3||(現在時)>=23 :まだ(現在時)時かあ……。 $起動した時間【タブ】昼 >起動しめトーク *深夜トーク :(現在時)時……そろそろ夜食の時間だね。 $起動した時間【タブ】深夜 >起動しめトーク *起動しめトーク :とりあえず冷蔵庫あさってこよう。
ジャンプで作ることの利点は、とにかく分かりやすいことです。
処理の流れが、里々に慣れていなくてもだいたい分かります。
さらに、$や>などでは改行が出ないため、改行を意識する必要がありません。
その代わり、ジャンプであちこちに処理自体が飛んで行くので、
「*起動」がどんな動作をしているか、全てのジャンプ先を確認しなければ分かりません。
後々に確認した時に動作を把握するのが大変です。
条件分岐関数を使った分岐のサンプルです。
*起動 (when 、(現在時)<=3||(現在時)>=23 、(深夜トーク)(set、起動した時間、深夜) 、(昼トーク)(set、起動した時間、昼) )φ (起動しめトーク) *深夜トーク :(現在時)時……そろそろ夜食の時間だね。 *昼トーク :まだ(現在時)時かあ……。 *起動しめトーク :とりあえず冷蔵庫あさってこよう。
条件分岐関数で作ることの利点は、処理の流れが分かりやすいことです。
上記のサンプルでは、「*起動」にすべての分岐が書かれており、これ以外はトークのみが書かれています。
「*起動」を見ればどんな処理か、何を呼び出しているのかがすぐに分かります。
その代わり、処理が複雑で、パッと見ただけでは理解しづらいです。
括弧は1行として扱われるため、不自然な改行が出てしまい、φなどで改行の制御を意識する必要があります。
whenだと2つにしか分岐しませんが、3つ以上の場合、whenlistを使う方法があります。
(whenの中にwhenを入れればいくらでも分岐可能ですが、さらに見づらくなります)
*起動 (whenlist 、(nop、)#左辺 、(現在時)<=3||(現在時)>=23#右辺1 、(深夜トーク)(set、起動した時間、深夜)#結果1 、(現在時)>=18&&(現在時)<=22#右辺2 、(夜トーク)(set、起動した時間、夜)#結果2 、(通常トーク)(set、起動した時間、昼)#どこにも一致しない場合の結果 )φ (起動しめトーク)
ジャンプでの分岐も、条件分岐関数での分岐も、結局は好みの問題になると思います。 使い分けるのもありです。
*起動 >(現在月)月(現在日)日 >通常起動 *通常起動 (when...
上記のように、ざっくりと処理を分類する時はジャンプを使い、
個々のジャンプ先では処理を追いやすいように条件分岐関数を使うなど。
条件分岐関数で制御した場合は、バグが出た時の対処や機能追加が楽であることが多いです。
そのため、マウス反応だとか、好感度加算とか、コアとなる処理だけ条件分岐関数で書いておくなどもありです。
里々のランダムトークの処理ですが、これも条件分岐関数で書き換えることが出来ます。
*OnTalk >(R1)【タブ】(R0) ()
↓
*OnTalk (when 、(R0) 、((R1)) 、() )
上記は、ジャンプで書いた場合$次のトークがある場合はジャンプしてしまうのでそれ以降の処理が行われませんが、
条件分岐関数で書くと必ず処理を通すことが出来ます。
*OnTalk (when 、(R0) 、((R1)) 、() )φ (ランダムトーク後の処理) *メニュー _何か話して *何か話して ()φ (ランダムトーク後の処理) *ランダムトーク後の処理 $トーク回数=(トーク回数)+1 >100回記念の追加トーク【タブ】(トーク回数)==100