Context Control概要

シナリオモデル

文脈制御にはシナリオによるものとユーザーによるものとに分けられます。

前者はノベルゲームも保有している機構で、シナリオの再生中に変数(フラグ)が変更され、変数値によってルートが変更されるものです。

後者はユーザーが選択肢の一つを選び、その選択肢に関連付けられたシナリオを再生するものです。

[[シナリオモデル]]

図のモデルのうち、節に当たる部分が文脈制御を受けない部分、シナリオの共通部分です。腹に当たる部分が文脈制御の影響を受ける部分です。

*文脈はルートとも言い換えることが出来ます。

Eventsに分類される要素はユーザ側での文脈制御を司り、Context Controlに分類される要素はシナリオ側での文脈制御を司ります。

*final要素はシナリオ共通部分へのインターフェイスを表します。(a要素で代替可能)
要素役割
choose(*1) 分岐
if 2肢分岐
a 指定した要素に移動(*2)
variable 変数を宣言
value-of 変数の値を取得
    注:
  1. 個人的には、ユーザ選択(選択肢の表示)はchooseを用いて、文脈の分岐はswitchを使いたい。(C言語の影響)select = switch(vis. Visual Basic)だが、chooseと紛らわしいので。
  2. 分類をCoreからContext Controlに変えました。
*文脈の分岐はlisp的にconditionとする手もあり?(cond-item-#t/笑) 「選択」の同義語
choose
いくつかの候補を提示され、自分の意志で選択する。(choose-when-otherwise)
select
多くの(無数の)候補から選ぶ。(select-case-default)
alternative
2択か3択の選択肢。ユーザ側。(alternative-item-default)
switch
処理を切り替え。(switch-case-default)

階層構造

RPGシナリオでは文脈の制御は欠かすことが出来ない、言い換えれば暗示的に必ず存在する概念です。従って、当言語も文脈制御を表す要素を仕様として含むので、名前空間を用いて当言語と他言語(XSLT)を区別する必要はありません。ただし、実際にはXSLTにおける同名の要素と似た機能を持ちます。

つまり、理由は次のとおり。

choose要素

文脈が式の値によって分岐されることを表します。XSLTのchoose要素と同様の働きです。when要素とotherwise要素を子に持ちます。

##「表す」がrepresentの意味をもつことに注意。

when要素

属性役割
test 条件式

choose要素内で、条件式が真となったときの文脈を表します。XSLTと同様、最初に条件式が真となったwhen要素の文脈だけが有効となります。

otherwise要素

choose要素内で、when要素がすべて無視されたときの文脈を表します。

if要素

属性役割
test 条件式

chooseの特殊形式で、条件式が真になった時だけ文脈が有効となり、偽となったときは無視されます。 いわゆるif-else構文はchoose-when-otherwise要素を用いて記述してください。

a要素

属性役割
href移動先の指定(URI)

指定先のURIへ文脈を移動させ、該当する要素から再生を続けます。 ファイルを越える場合はファイルにバインドされている変数(後述)は消去されます。 ファイル内の識別子によって移動先を指定する場合、現在位置に対してさかのぼるような位置を指定しても構いません。

テキストに対して設定するものではないので、"a"(anchor)という名称は"jump", "next"などに変えた方がいいかもしれません。

variable要素

属性役割
name 変数名
select 変数の値

変数を宣言します。XSLTの同名要素と同様に子要素を変数の値とすることが出来ます。変数値の参照は変数名に$をつけて行います。

value-of要素

属性役割
select値を取得する変数

変数の値を取得します。値が要素を含まないならばテキストとして表示し、要素を含むならば変数値がそのまま展開されます。

*本式のvalue-ofでは値が要素をもつ場合、その内容はテキストに変換される。値をそのまま展開するような要素はない。←template要素を使用?

例:

 <variable name="シナリオ断片">
 	<line actor="警備兵">ここから先に立ち入ってはならん。</line>
 	<dir>主人公は突き返される。</dir>
 </variable>
 
 <scene>
 	<desc>断片を展開。</desc>
 	<value-of select="$シナリオ断片" />
 	<line actor="主人公">ちぇっ。</line>
 </scene>
は次のように展開されます。
 <scene>
 	<desc>断片を展開。</desc>
 	<line actor="警備兵">ここから先に立ち入ってはならん。</line>
 	<dir>主人公は突き返される。</dir>
 	<line actor="主人公">ちぇっ。</line>
 </scene>
generated on Thu Jun 17 15:41:34 JST 2004
Copyright ? 2004 Static All rights reserved.
制作 せはやみ