選択肢。選択肢関連の技とか。

----
#contents
----
~

*里々の書式 [#o854c5fa]

バルーンに選択肢を表示してユーザーに選択させたい場合等に使用します。~
里々の書式の選択肢では表現に制限があるのでより細かく指定したい場合は後述のさくらスクリプトによる選択肢を参照して下さい。

 *
 :選択して下さい。
 
 _選択肢1
 _選択肢2
 
 *選択肢1
 :選択肢1が選ばれました。
 
 *選択肢2
 :選択肢2を選んだみたい。
 
 *選択肢2
 :選択肢2を選んだんだよ。

_は行頭に書く必要があります。選択肢のジャンプ先が複数ある場合はランダムで選ばれます。~
この書式では選択肢の表示とジャンプ先のトーク名が同じになるので[はい]/[いいえ]の様な選択がいくつもある場合ではジャンプ先が同じになってしまうのでジャンプ先の名前を変えたい場合は次の様に書きます。

 _選択ラベル1【タブ】選択ID1

この場合『*選択ID1』にジャンプします。~

また選択肢トークを実行した後は次の変数に値が保持されます。
 (選択ID)
 (選択ラベル)
 (選択番号)

*さくらスクリプトの書式 [#pc4f2ab3]
選択肢をさくらスクリプトタグで直接記入する事も出来ます。 この辺は里々の範疇じゃありませんが参考程度で、ベースウェアに依存するかもです。
 *
 :選択して下さい。
 
 \q[選択ラベル1,選択ID1]
 \q[選択ラベル2,選択ID2]

¥![*]で段落点を書くことができる。選択肢の頭に付ければちょっとかっこよくなるかもしれない。~

 *
 :選択して下さい。
 
 \![*]\q[選択ラベル1,選択ID1]
 \![*]\q[選択ラベル2,選択ID2]

表示する選択肢の文字列内に半角角括弧("[","]")を入れたい場合は次の書式で("_"アンダーバーは二個) 

 \__q[選択ID1]選択ラベル[1]\__q

選択後にジャンプするトーク(関数)に引数を渡したい場合、選択IDの先頭をOnで書き始めると引数が書けます、選択後トークで引数はR0,R1…のリファレンスで使用 

 \q[選択ラベル,On選択ID,引数1,引数2]
 
 \__q[On選択ID,引数1,引数2]選択ラベル\__q
 
 *On選択ID
 :引数1は(R0)です、引数2は(R1)です。

*選択肢の並びをランダムにする [#m6a3b9c8]
デフォルトの設定では、1回のトーク中で複数回同名単語群を呼び出しても、単語は重複して選択されない。



 *クイズ開始
 :さて、ここで問題です。
 デスパコーワとは何の薬でしょう。
 
 _(回答肢)
 _(回答肢)
 _(回答肢)
 
 @回答肢
 口内炎
 頭痛
 歯痛
 
 *口内炎
 :正解!
 
 *頭痛
 :ハズレ!
 
 *歯痛
 :ハズレ!

*2段組メニュー [#dc10653c]
里々では、今のところ2段組のメニューは作成できない。~
実装する場合は、さくらスクリプトを使用して、次のようにする。 

 \q[選択ラベル1,選択ID1] \q[選択肢ラベル4,選択ID4]
 \q[選択ラベル2,選択ID2] \q[選択肢ラベル5,選択ID5]
 \q[選択ラベル3,選択ID3]

またはカーソル移動の ¥_l タグを利用して
 \q[選択ラベル1,選択ID1] 
 \q[選択ラベル2,選択ID2] 
 \q[選択ラベル3,選択ID3]
 \_l[,@-70]
 \_l[160,]\q[選択ラベル4,選択ID4]
 \_l[160,]\q[選択ラベル5,選択ID5]
¥_l[,@-70]の-70の数値は、戻りたい行数×14で計算

*選択肢の自動化 [#f3536a8e]
丸投げ→[[駄でべ sissy/選択肢の自動選択>http://emily.shillest.net/specwiki/index.php?sissy%2F%E9%81%B8%E6%8A%9E%E8%82%A2%E3%81%AE%E8%87%AA%E5%8B%95%E9%81%B8%E6%8A%9E]]

-SSP専用になっても良いなら、さくらスクリプトの timerraise コマンドを使うと楽チン。
-指定された制限時間を過ぎると自動的に特定のラベルを選択したという事にして強制的にジャンプさせられる。

 # パラメータは \![timerraise,制限時間(ms),1(固定),ジャンプしたいラベル]
 
 *おやつ裁判
 :(7)被告に一週間お犬様の世話を命ずる。
 _異議あり!
 _異議ありません
 \![timerraise,5000,1,異議ありません]



*選択肢の表示条件 [#p6e938c2]
回りくどい気もします。

 #「選択肢」は、重複回避のためだけなので、つけなくても変えても構いません。
 
 *見たものリスト
 :今まで見たものだよー
 \q[(見たもの1フラグ),選択肢(見たもの1フラグ)]\_q
 \q[(見たもの2フラグ),選択肢(見たもの2フラグ)]\_q
 ・
 ・
 ・
 
 *選択肢見たもの1
 :こんなのあったねー。
 
 #「見たもの1フラグ」という文字は、選択肢に表示する文字に置き換えて下さい。
 #他も同様です。
 
 *見たもの1フラグ立て
 $見たもの1フラグ【タブ】見たもの1
 :見たものリストに追加しておくねー

*頁切替式選択メニュー [#mc4d2464]
不特定数の選択肢を次頁・前頁で行き来出来る選択メニューです。~
例はインストールゴーストをリスト表示して選択出来ます。~

installedghostname通知でゴースト名を配列変数_aryGhostNameに入れて置く
 *installedghostname
 (for,0,(Rの数)-1,(set,_aryGhostName(C0),(R(C0))))
 _aryGhostName(Rの数)【タブ】

メニュー本体
 #頁最大行数と表示開始頁数設定
 *GhostMenu
 $_PMax【タブ】22
 $_Page【タブ】0
 >GhostMenu.2
 
 #ヘッダー処理
 *GhostMenu.2
 $_i【タブ】1
 $スクリプトの一番頭【タブ】\C
 \0\_q\c\b[2]■ゴースト選択メニュー\n[50]
 >GhostMenu.loop
 
 #ループ処理(選択肢表示)
 *GhostMenu.loop
 $_j【タブ】(calc,(_i)+(_Page)*(_PMax)-1)
 $_f【タブ】(変数「_aryGhostName(_j)」の存在)
 >GhostMenu.loopend【タブ】(_i)>(_PMax)||(_f)==0
 \0\__q[OnGhostMenuSelect,(_j)](_aryGhostName(_j))\__q
 $_i【タブ】(calc,(_i)+1)
 >GhostMenu.loop
 
 #フッター処理
 *GhostMenu.loopend
 \0(when,(_i)==1,(set,_i,2)\0...登録はありません\n)φ
 (when,(_i)<=(_PMax),(times,(calc、(_PMax)-(_i)+1), \n))φ
 \n[half]\![*]\q[閉じる,GhostMenu.close] φ
 (if、(_Page)>0||(_i)>(_PMax)&&(_f)==1、\![*](if、(_Page)>0、\q[前頁,GhostMenu.prior]、前頁/)φ
 (if、(_Page)>0&&(_i)>(_PMax)&&(_f)==1、/)φ
 (if、(_i)>(_PMax)&&(_f)==1、\q[次頁,GhostMenu.next]))
 
 #閉じる
 *GhostMenu.close
 
 #前頁
 *GhostMenu.prior
 $_Page【タブ】(calc,(_Page)-1)
 >GhostMenu.2
 
 #次頁
 *GhostMenu.next
 $_Page【タブ】(calc,(_Page)+1)
 >GhostMenu.2
 
 #選択時  
 *OnGhostMenuSelect
 \![call,ghost,(_aryGhostName(R0))]

解説~
-変更して使用する時は、ループ処理の表示部分と選択時処理を触るだけで良いです。(文のラベル名とか配列変数名とかは除く)
-installedghostnameの最後に_aryGhostName(Rの数)へ空白を代入してるのは配列の最後+1を確実に存在させない為です、ループ処理で配列の終わりを存在しないかどうかで判定している為。~
(ヌルで終わる文字列的な、配列の数を変数で管理しなくて良いので)
-ヘッダー処理で「$スクリプトの一番頭」で「&yen;C」を使ってるのは高速表示のためです、無いと頁移動時の表示が少し遅い。多分「&yen;C」の想定外の使い方、何時か使用できなくなるかも。
-使用している変数名の頭の_は、yaya as saoriサンプルの[[ワーク変数自動削除>SAORI/YAYA#pd38cb7b]]対応変数名です、自動削除サンプル入れて無くてもこの頁切替式選択メニューサンプルの動作には問題ないです。(セーブデータには一杯ゴミが残りますが…)

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS