トップページへ戻る


文字変数とウインドウ
 
「きょーわ何やんのかなー?」

「前回、一休みの前に仕上げたゲームのタイトル画面があるだろ? あれの続きだ」

「具体的にわ何やんのかなー?」

「質問するだけなら誰にでもできるぞ。それじゃこっちから聞くが、ゲームを始めようとするプレイヤーが『最初から始める』を選ぶと、どんな画面になる?」

「んーと、オープニングデモ」

「それはシナリオに依存することだからここでは無視する。で、その次は?」

「名前入力」

「そう。今日はその、名前入力画面を作ってみようと思うわけだ」

「んでも、難しそーだなー」

「それじゃまずは、前回の復習をしておこう」

「タイトル画面のスクリプトは、こんな感じだよ」

[title name="タイトル"]\
[wc time=20]\
*start|スタート
[playbgm storage="title"]\
[layopt layer=message0 page=fore visible=false]\
[image storage="title" page=back layer=base]\
[backlay layer=message0]\
[trans time=2000 rule="trans1" vague=100]\
[wt]\
[ct]\
[backlay]\
[layopt layer=message0 page=back visible=true]\
[trans time=2000 rule="trans1" vague=100]\
[wt]\
[locate y=300]\
[delay speed=nowait]\
[style align=center]\
[link target=*opening]  ゲームをはじめる  [endlink]
[link target=*dataload]セーブデータをロードする[endlink]
[link target=*option]    オプション    [endlink]
[link target=*end]  ゲームを終了する  [endlink]\
[style align=default]\
[delay speed=user]\
[s]
;--------------------------------------------
*opening
[ct]\
はじまりはじまり−。
[s]
;--------------------------------------------
*dataload
[ct]\
でーたをろーどすんだもん。
[s]
;--------------------------------------------
*option
[ct]\
おぷしょんぺーじだもん。
[s]
;--------------------------------------------
*end
[ct]\
おしまい。
[s]

「今日、追加していくのは、メインメニューから分岐してきたラベル『*opening』の部分になる。全部を引用するのは長すぎるから、その部分以外は省略して、こんな感じから始めることにしよう」

*opening
[ct]\
はじまりはじまり−。
[s]

「はじまりはじまりー、だもん!」

「メニュー画面から飛んできた場合、まずはどうすればいいと思う?」

「んと、文字を全部消して、画像をトランジションで入れ替えて、文字を書いて、名前を入力させて……」

「ちょっと待て。いっぺんにやるんじゃなくて、とりあえず名前入力の手前までを作ってみることにしよう。画像を読み込んで文字を書く所まで」

「もー簡単だもん」

*opening
[ct]\
[layopt layer=message0 page=back visible=false]\
[image storage="ほてる.jpg" layer=base page=back]\
[trans time=2000 rule="trans1" vague=100]\
[wt]\
[ct]\
[backlay]\
[layopt layer=message0 page=back visible=true]\
[trans time=2000 rule="trans1" vague=100]\
[wt]\
はじまりはじまり−。
[s]\

「これを実行すんとー……」

「ちゃーんとトランジションも効いてんもん」

「よし、いい調子だ。それじゃ、『はじまりはじまりー』の部分を、プレイヤーに名前入力を促す文章に変えてみよう」

「もー考えてあんもん」

*opening
[ct]\
[layopt layer=message0 page=back visible=false]\
[image storage="ほてる.jpg" layer=base page=back]\
[trans time=2000 rule="trans1" vague=100]\
[wt]\
[ct]\
[backlay]\
[layopt layer=message0 page=back visible=true]\
[trans time=2000 rule="trans1" vague=100]\
[wt]\
謹啓[l]

チャーチホテル ChristmasEve へお越しいただきまして、真にありがとうございます。[l]

それでは、まずはお客様とお連れ様のサーネーム(姓)およびファーストネーム(名)を、こちらの宿泊カードにご記入ください。[l]
[s]\

「これを実行すんと……」

「んー、ちょっと字が大きすぎるかなー。あと、明朝体ぢゃなくてゴシックのがいーかなー。それから、文字のスピードももっと速くしたいなー」

「それについては、また後で config.tjs を直せばいいよ。今は名前入力ウインドウを先に作ろう」

「うん」

「ウインドウを作る前に、まずは名前の入力に必要な文字変数を準備する」

「文字変数?」

「そう。数学の関数の授業で χ や y なんかを使って式を立てたことがあるだろ? あれと似てるものだ」

「んでも、変数と関数の違いってなんなんだろーねー」

「変数は任意に変化する数、関数は二つ以上が関連性を持って変化する数だが、同じものとして考えて構わない」

「すきゃんてぃ違いがわっかんないもんねー! んきゃー!」

「たとえば、2χ=y という式がある。 χ が1の時、y はいくつだ?」

「んーんーんー(思考中)」

「何でそこで考えるんだよう……(TT)」

「0.5!」

「間違ってる……(TT)」

「2!」

「そう、それじゃ、χ が2の時は?」

「4!」

「この場合の χ と y は関数と呼ばれる。じゃあ、こういうのはどうだ?」

「どーゆーの?」

「 『あいらびゅーん! ○○さん!』 という文章の○○に、好きな名前を入れなさい」

「んーんーんー(思考中)」

「真面目に考えるなよぅ……(TT)」

「立花!」

「その場合は、さっきの文章は 『あいらびゅーん! 立花さん!』 となる。人によっては 『あいらびゅーん! ダンプ松本さん!』 や 『あいらびゅーん! 広末涼子さん!』 など、いろいろ変わる」

「えー? ダンプ松本も入んのかなー?」

「そういう突っ込みはやめろってば。ダンプ松本は、本当は可愛い女なんだぞ。ひょっとしたら誰かが入れるかもしれないぞ」

「そーかなー」

「ま、それはどうでもいい。とにかく、この○○に当たるのが、文字変数なんだ」

「なるほどー」

「KAGで文字変数を使う場合は、まず変数の名前を決める。ユーザーが名前の入力をした時、それをゲーム内で扱えるように記憶させておく入れ物として」

「わかったー。それじゃ、○○をKAGの中に書けばいーんだねー?」

「いや、何でも自分勝手に名前をつけていいわけじゃない。文字や数値の変数の名前にはちょっとしたルールがある。W.Dee氏の正規マニュアルにある、変数についての以下の但し書きを見てくれ」

ルール1)変数にはゲーム変数とシステム変数があります。

ルール2)変数名には半角英数と全角文字のみを使うことができます。

ルール3)記号は _ (アンダーバー) をのぞき利用できません。

ルール4)ゲーム変数は f. で始まる必要があります。

ルール5)システム変数は sf. で始まる必要があります。

ルール6)変数本体の名前の先頭に数字がくることは許されません。

ルール7)一部、使用不可能な変数名があります。

count assign save load finalize invalidate instanceof continue function debugger property default extends finally isvalid typeof delete return export import switch global setter getter break false super catch class while throw const enum this void true null with else case for new var try in if do

以上の単語は使うことができません。たとえば f.count や sf.assign という変数名などは使えないので注意してください。

「ゲーム変数とシステム変数って何なのかなー?」

「それはもう少し変数をかじったら説明するよ。今はとにかくゲーム変数のみを使う気でいればいい」

「それぢゃー、名前を記憶する文字変数は f.name にするもんねー!」

「ちょっと待て。もう一度スクリプトを見直してみるぞ」

*opening
[ct]\
[layopt layer=message0 page=back visible=false]\
[image storage="ほてる.jpg" layer=base page=back]\
[trans time=2000 rule="trans1" vague=100]\
[wt]\
[ct]\
[backlay]\
[layopt layer=message0 page=back visible=true]\
[trans time=2000 rule="trans1" vague=100]\
[wt]\
謹啓[l]

チャーチホテル ChristmasEve へお越しいただきまして、真にありがとうございます。[l]

それでは、まずはお客様とお連れ様のサーネーム(姓)およびファーストネーム(名)を、こちらの宿泊カードにご記入ください。[l]
[s]\

「ほら、お前のこのスクリプトだと、お客様とお連れ様二人の苗字と名前がそれぞれ別々に入力されるようになっているじゃんか」

「だってそーだもん。苗字と名前は分けておかないと、名前を呼ぶ時に絶対変だもん! 女が 『どうするの!?山田太郎』 って叫ぶと、男が 『とにかくここを出よう!鈴木花子!』 ……これぢゃーすごい変だもん!」

「そうだな。そうすると文字変数はいくつ用意しておけばいい?」

「二人の苗字と名前だから、四こ」

「それじゃ、それぞれの変数に名前をつけてごらん」

「わかりやすいよーにしてみたもん」

名前 男性の苗字 男性の名前 女性の苗字 女性の名前
変数名 f.sname1 f.name1 f.sname2 f.name2

「基本は f.name だけど、男の場合はお尻に1が、女の場合は2がつくもん。名前はそのままで、苗字の場合は頭に小文字のSがつくもん」

「なるほど。サーネームのSをつけたわけか。上出来だ。これならわかりやすいな」

「んで、これをどーすんのかな?」

「まずは画面に入力ウインドウを出して、プレイヤーに名前を入力してもらわなくちゃいけない。ここで使うのは、[input] タグだ」

「早く書きたいもん! 早く教えなさいよねもー!」

「わかったわかった。[input] タグには三つの属性があって、標準の書式はこんなふうになる。 [input name=f.sname1 prompt="苗字を入れてね" title="名前の入力"]

「それでー?」

「上のスクリプトを実行すると、こんなウインドウが出てくる」

「ふーん。そーすんと、[input] の属性の name には変数名を入れて、prompt と title には好きな文章を入れていーのかなー?」

「そういうことだ。ここでたとえば、ユーザーが 『すきゃんてぃ』 という名前を入れたら、変数はどうなる?」

「んーと、f.sname1=すきゃんてぃ

「ユーザーが 『PIA少尉』 という名前を入れたら?」

f.sname1=寅次郎!」

「……し、シバくぞ、お前……」

f.sname1=PIA少尉 だもんねー」

「そうだ。そうやって、同じ f.sname1 という変数でも、ゲームをプレイするユーザーによって内容が変化する、だから文字変数って言うんだ」

「そこまではわかったもん。じゃー、実際にどーするの?」

「まずはスクリプトに [input] タグを書き入れよう」

「んーと……」

(前略)

謹啓[l]

チャーチホテル ChristmasEve へお越しいただきまして、真にありがとうございます。[l]

それでは、まずはお客様とお連れ様のサーネーム(姓)およびファーストネーム(名)を、こちらの宿泊カードにご記入ください。[l]
[input name=f.sname1 prompt="あなた(男性)の苗字をご記帳下さい" title="名前の入力"]\
[input name=f.name1 prompt="あなた(男性)の名前をご記帳下さい" title="名前の入力"]\
[input name=f.sname2 prompt="お連れ様(女性)の苗字をご記帳下さい" title="名前の入力"]\
[input name=f.name2 prompt="お連れ様(女性)の名前をご記帳下さい" title="名前の入力"]\
[input name=f.carname prompt="キーをお預かりしますが、お車の型は?" title="名前の入力"]\
[s]\

「車の名前まで入れちゃうもんねー!」

「うん。それでいい。そうしたら、次はどうする?」

「ゲームが始まんだもん! ストーリーが始まんだもん!」

「待て待て。その前に、まずは入力した名前をそこに表示して、これでいいかどうかの確認をさせた方が親切じゃないか?」

「そーいえば、そーだねー!」

「入力してもらった変数を表示さ せるには、[emb] タグを使う。たとえば、この場合、f.sname1 という文字変数を表示するには [emb exp=f.sname1] というスクリプトを、文章中に書けばいいんだ」

「 exp って何なのかなー?」

「これはTJSに関係する難しい属性だから知らなくていい。とにかく変数を文字として文章中に表示する時は、[emb exp=変数名] って書くことを覚えておけばいいよ」

「んぢゃ、書いてみよーっと」

(前略)

謹啓[l]

チャーチホテル ChristmasEve へお越しいただきまして、真にありがとうございます。[l]

それでは、まずはお客様とお連れ様のサーネーム(姓)およびファーストネーム(名)を、こちらの宿泊カードにご記入ください。[l]
[input name=f.sname1 prompt="あなた(男性)の姓をご記帳下さい" title="名前の入力"]\
[input name=f.name1 prompt="あなた(男性)の名をご記帳下さい" title="名前の入力"]\
[input name=f.sname2 prompt="お連れ様(女性)の姓をご記帳下さい" title="名前の入力"]\
[input name=f.name2 prompt="お連れ様(女性)の名をご記帳下さい" title="名前の入力"]\
[input name=f.carname prompt="キーをお預かりしますが、お車の型は?" title="名前の入力"]\
お客様のお名前は[emb exp=f.sname1][emb exp=f.name1]様、
お連れ様のお名前は[emb exp=f.sname2][emb exp=f.name2]様、
お車は[emb exp=f.carname]でよろしいですか?
[s]\

「こんな感じでいーかなー?」

「うん。ただ、それだとまだ不親切だ」

「なんでー?」

「そういう場合、最初にサンプルの名前が入っている方が好ましい。もし何も入れずにエンターキーを押し続けたら、変数が空のままゲームが始まることになる」

「どーすればいーのよもー!」

「入力ウインドウを出す前に、スクリプト内部でサンプルの名前を文字変数に定義してやればいいんだよ。こんなふうに」

(前略)
謹啓[l]

チャーチホテル ChristmasEve へお越しいただきまして、真にありがとうございます。[l]

それでは、まずはお客様とお連れ様のサーネーム(姓)およびファーストネーム(名)を、こちらの宿泊カードにご記入ください。[l]
[eval exp="f.sname1='山田'"][eval exp="f.name1='太郎'"]\
[input name=f.sname1 prompt="あなた(男性)の姓をご記帳下さい" title="名前の入力"]\
[input name=f.name1 prompt="あなた(男性)の名をご記帳下さい" title="名前の入力"]\
[eval exp="f.sname2='鈴木'"][eval exp="f.name2='花子'"]\
[input name=f.sname2 prompt="お連れ様(女性)の姓をご記帳下さい" title="名前の入力"]\
[input name=f.name2 prompt="お連れ様(女性)の名をご記帳下さい" title="名前の入力"]\
[eval exp="f.carname='ワーゲン'"]\
[input name=f.carname prompt="キーをお預かりしますが、お車の型は?" title="名前の入力"]\
お客様のお名前は[emb exp=f.sname1][emb exp=f.name1]様、
お連れ様のお名前は[emb exp=f.sname2][emb exp=f.name2]様、
お車は[emb exp=f.carname]でよろしいですか?
[s]\

「さあ、ここでまた新しいタグが出てきたぞ。[eval] タグだ」

「なんなのよもー!」

「この [eval] タグは、変数や関数を演算させるときに使う。詳しくは数値変数の所で説明するから、今は [eval exp="変数名='代入文字'"] って覚えておけばいい」

「そーゆーもんかなー」

「そういうもんだ。それと、このタグを使って式を書く場合、ダブルクオーテーション( ” )とシングルクオーテーション( ’ )の数が合っていないとエラーが起きるから、気をつけよう」

「そーゆーもんだってことは、わかったもん」

「こうしておけば、入力ウインドウにはサンプルの名前が表示される。当然、プレイヤーはそこに自分の好きな名前を入力できる」

「なんか変な式だなー。1行に=が2こもあんぢゃんよもー」

「気にしなくていい。f.sname='山田' っていう式を exp= で評価しているだけだ」

「よくわかんないなー」

「いいから、実行してごらん」

「いけー!」

(サンプルの入った入力ウインドウにどんどん名前を入力をして……)

(入力が終わると最後に名前の確認!)

「うわー! できちゃったー!」

「簡単だろ?」

練習日記 4日目 次へ


トップページへ戻る