Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2011/03/06 (日)

分岐先へジャンプするよ!

| 20:35 | 分岐先へジャンプするよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 分岐先へジャンプするよ! - 雪乃☆雫のなでしこ日和 分岐先へジャンプするよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

【でし】

 今日言う今日は、選んだ選択肢のストーリーに飛んでいくことができるんでしょうね?

【せんせい】

 はいぃ。タイトルにうったているとおりです。

 までは、上から順に一行づつ読んでるだけでしたが、そうも行かないので困ったな、というお話しです;

 クリックした選択肢に応じて、条件分岐を使って処理を振り分けるのはクイズでもやりましたが、クイズのように、単に当たりか外れを判定していた場合と違い、選んだ選択肢に応じてストーリーが変化する。つまり、シナリオファイルの任意の行へ処理を移すということは、どこへジャンプするかを示す、ラベルのようなものが必要になります。

 して、ラベルを検索しての行(正確にはの次の行)から再びシナリオ解析を始める、ということでよいでしょう。


 まず、シナリオの選択肢のコマンドをこんな感じに変えてみます。

メッセージ,ちょっと話を聞いてみましょう。
改ページ,
選択肢,2
名前聞く,ちょっと名前を聞いてみる
写見せる,ガイシャの写を見せる

ラベル,名前聞く
メッセージ,このおじょうさーん。
メッセージ,ちょっと名前を教えてください~♪


ラベル,写見せる
メッセージ,この人物に見覚えありませんかねー?

 選択肢の後ろの「2」は、選択肢の数を表します。

 前まで、選択肢数はプログラムの中で2で決め打ちしていましたが、三択にしたい場合もあるだろうからです。

 して、の次の行から実際の選択肢で「ラベル,選択肢として表示するメッセージ」という書式になっています。

 書式変更に伴って、シナリオ解析はこうなりました。

    違えばもし、コマンドが「選択肢」ならば
    	行数=0
    	選択肢数=シナリオ¥番号,1
    	(選択肢数)
    	  番号=番号+1
    	  ラベル一覧¥(回数-1)=シナリオ¥番号,0
        シナリオ¥番号,1を「選択肢」の文字高さ取得行数へ選択肢表示。
        行数行数+1

      選択肢をボタン化。
      選択待機オン

 ラベル一覧と言う配列に、ラベル部分を格納しており、クリックすると「ラベル一覧¥(前選択ボタン-1)」で得られます。


表画面のマウス押した時は~ 選択待機ONの時のイベントを以下のようにします。

  違えばもし、選択待機オンならば
    もし、前選択ボタン=0でなければ
      シナリオの1でラベル一覧¥(前選択ボタン-1)を0から表検索。
      ジャンプ先はそれ。
      もし、ジャンプ先=-1ならば
        「ラベルがありません」と言う。
        終了。
      違えば
        番号=ジャンプ先+1
        テキストウィンドウクリア。
        シナリオ解析。

 表検索で得られた行がラベルなので、の下からシナリオ解析を再スタートさせるだけです。

 一応、ラベルがなかった場合の処理も加えます。


 また、次のラベルに到達したら、の先は読んではいないので、とりあえずシナリオの最後まで読み込んだ場合と同様に、終了させることにします。

 シナリオ解析に以下追加

    違えばもし、コマンドが「ラベルならば
      「おわり」と言う。
      終了

【でし】

 ぱちぱちぱち~。

 ちゃんと、ジャンプしましたね!

【せんせい】

 でも、まだ完全とはいないんですよ。

 分岐して、このままそれぞれのエンディングを迎えることもあるでしょうが、会話やイベントのバリエーションを経て、元のルートに戻ってくるということも少なくありません。

 選択肢を経ずに、ラベルへジャンプさせられるコマンドも必要です。

 あと・・・最大の問題としては、現在は検索するラベル文字列が、シナリオの配列上、1の列に入っていますが、ここってメッセージでは、実際に表示する色々なメッセージが入る列なんで、何かの弾みでラベルとかぶってしまうことも普通にありえます。

 やっぱり、この仕様はよろしくありません。

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20110306