トップページへ戻る


文字変数入力ウインドウ周りのチューニング(2)
 
「あのね……」

「おいおい、また黄昏から入るのか? 今度はどうした?」

「すきゃんてぃ、前よりもっともっともっとちょー重大なことに、気づいたんだなーこれが」

「ほほう。それは一体何のことだ?」

「んと、さっき作った、名前入力のスクリプトなんだけど、あれぢゃーぜんっぜんっだめなんだなーこれが」

「ほほう。して、その理由は?」

「あんたってば、いぢわるぢゃんよもー。わかってんのに、すきゃんてぃにゆわせんのわ、ずるっちーもん」

「何のことかわからん」

「んぢゃ、言うもん。ちょー長い名前を入れた時に、こんなふーになんだもん」

「どれどれ?」

「うーむ……」

「ふつー、こんな変な名前は入れないよねー。んでも、変な人とかわ、わざと変な名前を入れてやんかもしんないでしょー? んでも、それって、ちょー困んもん」

「それで?」

「ふつー、日本人の苗字や名前って、多くても2文字から3文字かなー、とか思うの。んで、それ以上の名前は、変な名前だよねー」

「一概にそうとも言えないぞ。若草月影綾小路・日景春乃宮春日局御前、みたいな女性がいるかもしれん」

「んきゃー! そんなわかくさつきかげあやのこじ・ひかげはるのみやかすがのつぼねごぜんみたいな長ーい名前の人なんかいるわけないぢゃんよもー!」

「わかったわかった、それで?」

「んでもって、文字の入力数を制限したいんだなー。苗字も名前も3文字ぐらい、合わせて6文字ぐらいにしてほしーんだなー」

「それじゃ、その方法を教えよう」

「頼むもん」

「ここで使う新しいタグは、[if] タグだ」

「いふいふ? いふいふ?」

「何が言いたいんだ? お前」

「何でもないもん」

「このタグは、条件分岐をする時に非常によく使うから、ここでしっかりと使い方を覚えておくと便利だよ」

「わかったもん」

「さて、[if] タグで条件分岐を行う時は、以下のような書式を書く」

[if exp="変数または数値、等号または不等号、変数または数値"]\
[( [if] タグによって評価された式が正の場合の処理)]\
[endif]\

「よくわかんない」

「それじゃ例を挙げてみよう。変数 f.name1 に入力された名前が『すきゃんてぃ』の時のみ *scanty ラベルにジャンプする条件分岐は、以下のようになる」

[if exp="f.name1=='すきゃんてぃ'"]\
[jump target=*scanty]\
[endif]\

「まだわかんない」

「それじゃもう一つ。変数 f.okane の値が500以下の場合のみお金を500もらえる条件分岐は、以下のようになる」

[if exp="f.okane<=500"]\
[eval exp="f.okane=f.okane+500"]\
[endif]\

「もっとわかんない」

「それじゃもう一つ。変数 f.shumi1 に入力された文字と変数 f.shumi2 に入力された文字が一致した場合のみ『趣味が合いますね』という表示をする条件分岐は、以下のようになる」

[if exp="f.shumi1==f.shumi2"]\
趣味が合いますね。[l]
[endif]\

「むー」

「一行目、[if] タグの行で行っていることは、変数と文字、または変数と数値、または変数と変数の照合だ。もしこの照合が『正しい』場合は [if] タグと [endif] タグの間にあるタグが実行されたり、文章が表示されたりする。照合結果が『違う』場合は、[if] タグと [endif] タグの間の行は無視される」

「ちょこーとだけ、わかった」

[if] タグを使った評価式を書く時の注意は下記の通りだ」

基本式 [if exp="ABC"]\

AとCには変数や定数、文字列などが入り、Bには等号や不等号が入る

Aの書式 変数、定数はそのまま書く。
     文字列は必ずシングルクオーテーション(')でくくる。

Bの書式 == AとCが等しいという意味。
     >= AがC以上という意味。
     <= AがC以下という意味。
     >  AがCより大きいという意味。
     <  AがCより小さいという意味。
     != AがCと異なるという意味。

「ふーん」

「それじゃ、練習してみようか。f.day という変数が7以上の時は、『一週間が過ぎました』という文章を表示させる条件分岐式を書いてごらん」

「んーと、[if exp="……」

「その後には変数名と数値を照合する式を書くんだ」

「……f.day>=7"]……これでいい?」

「よくできました。それじゃ、その後は普通にスクリプトを書いてごらん」

「んーんーんー」

[if exp="f.day>=7"]\
一週間が過ぎました。[l]
[endif]\

「できたじゃんか。それでOKだよ」

「なんとなーく、わかったみたい」

「それじゃ、いよいよ入力文字数制限の説明をするぞ」

「ふぅ」

「また、ため息なんかついちゃって」

「難しーなーとか思ってんだもん」

「大丈夫、さあ行くぞ」

「ふぅ」

「文字列の入力制限を行う場合は、文字変数に入力された文字列が何文字かを調べ、それを評価する式を作ればいい」

「……」

「文字変数の直後に、.length と書くことにより、その評価式は、文字変数自体の評価ではなく、文字変数の長さに対する評価式になる」

「ふぅ」

「たとえば、f.name1 という文字変数を3文字までに入力制限したい場合は、次のように書く」

[if exp="f.name1.length>3]\
[er]\
名前は3文字までにして下さい。[l]
[endif]\

「上の式は、f.name1 という変数の長さが3より大きい場合、つまり4以上の場合は、[if] タグと [endif] タグの間にあるスクリプトが実行される」

「んでも、注意しただけぢゃ、しょーがないもん」

「だからそこで [jump] タグを使うんだよ。わかりやすくするためにセパレータをつけてみたから、下のスクリプトを見てごらんよ」

(前略)

それでは、まずはお客様とお連れ様のサーネーム(姓)およびファーストネーム(名)を、こちらの宿泊カードにご記入ください。[l]
*inputname
;----------------------------------------------------
;▼男性の苗字を入力
[input name=f.sname1 prompt="あなた(男性)の姓をご記帳下さい" title="名前の入力"]\
;----------------------------------------------------
;入力文字列が長い場合
[if exp="f.sname1.length>4"]\
[ct]\
苗字は3文字までにして下さい。[p]
[jump target=*return_name]\
[endif]\

;----------------------------------------------------
;▼男性の名前を入力
[input name=f.name1 prompt="あなた(男性)の名をご記帳下さい" title="名前の入力"]\
;----------------------------------------------------
;入力文字列が長い場合
[if exp="f.name1.length>4"]\
[ct]\
名前は3文字までにして下さい。[p]
[jump target=*return_name]\
[endif]\

;----------------------------------------------------
;▼女性の苗字を入力
[input name=f.sname2 prompt="お連れ様(女性)の姓をご記帳下さい" title="名前の入力"]\
;----------------------------------------------------
;入力文字列が長い場合
[if exp="f.sname2.length>4"]\
[ct]\
苗字は3文字までにして下さい。[p]
[jump target=*return_name]\
[endif]\

;----------------------------------------------------
;▼女性の名前を入力
[input name=f.name2 prompt="お連れ様(女性)の名をご記帳下さい" title="名前の入力"]\
;----------------------------------------------------
;入力文字列が長い場合
[if exp="f.name2.length>4"]\
[ct]\
名前は3文字までにして下さい。[p]
[jump target=*return_name]\
[endif]\

;----------------------------------------------------
;▼車の名前を入力
[input name=f.carname prompt="キーをお預かりしますが、お車の型は?" title="名前の入力"]\
;----------------------------------------------------
;入力文字列が長い場合
[if exp="f.carname1.length>7"]\
[ct]\
車の名前は6文字までにして下さい。[p]
[jump target=*return_name]\
[endif]\

;----------------------------------------------------
お客様のお名前は[emb exp=f.sname1][emb exp=f.name1]様、
お連れ様のお名前は[emb exp=f.sname2][emb exp=f.name2]様、
お車は[emb exp=f.carname]でよろしいですか?
[delay speed=nowait]\
[locate y=360]\
[link target=*scene01]A.よろしい[endlink]
[link target=*return_name]B.よろしくない[endlink]\
[delay speed=user]\
[s]\
;--------------------------------------------
*return_name
[ct]\
[jump target=*inputname]\
[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]
*inputname
;----------------------------------------------------
;▼男性の苗字を入力
[input name=f.sname1 prompt="あなた(男性)の姓をご記帳下さい" title="名前の入力"]\
;----------------------------------------------------
;入力文字列が長い場合
[if exp="f.sname1.length>4"]\
[ct]\
苗字は3文字までにして下さい。[p]
[jump target=*return_name]\
[endif]\
;----------------------------------------------------
;入力文字列がカラの場合
[if exp="f.sname1==''"]\
[ct]\
苗字を入力してください。[p]
[jump target=*return_name]\
[endif]\
;----------------------------------------------------
;▼男性の名前を入力
[input name=f.name1 prompt="あなた(男性)の名をご記帳下さい" title="名前の入力"]\
;----------------------------------------------------
;入力文字列が長い場合
[if exp="f.name1.length>4"]\
[ct]\
名前は3文字までにして下さい。[p]
[jump target=*return_name]\
[endif]\
;----------------------------------------------------
;入力文字列がカラの場合
[if exp="f.name1==''"]\
[ct]\
名前を入力してください。[p]
[jump target=*return_name]\
[endif]\
;----------------------------------------------------
;▼女性の苗字を入力
[input name=f.sname2 prompt="お連れ様(女性)の姓をご記帳下さい" title="名前の入力"]\
;----------------------------------------------------
;入力文字列が長い場合
[if exp="f.sname2.length>4"]\
[ct]\
苗字は3文字までにして下さい。[p]
[jump target=*return_name]\
[endif]\
;----------------------------------------------------
;入力文字列がカラの場合
[if exp="f.sname2==''"]\
[ct]\
苗字を入力してください。[p]
[jump target=*return_name]\
[endif]\
;----------------------------------------------------
;▼女性の名前を入力
[input name=f.name2 prompt="お連れ様(女性)の名をご記帳下さい" title="名前の入力"]\
;----------------------------------------------------
;入力文字列が長い場合
[if exp="f.name2.length>4"]\
[ct]\
名前は3文字までにして下さい。[p]
[jump target=*return_name]\
[endif]\
;----------------------------------------------------
;入力文字列がカラの場合
[if exp="f.name2==''"]\
[ct]\
名前を入力してください。[p]
[jump target=*return_name]\
[endif]\
;----------------------------------------------------
;▼車の名前を入力
[input name=f.carname prompt="キーをお預かりしますが、お車の型は?" title="名前の入力"]\
;----------------------------------------------------
;入力文字列が長い場合
[if exp="f.carname1.length>7"]\
[ct]\
車の名前は6文字までにして下さい。[p]
[jump target=*return_name]\
[endif]\
;----------------------------------------------------
;入力文字列がカラの場合
[if exp="f.carname==''"]\
[ct]\
車の名前を入力してください。[p]
[jump target=*return_name]\
[endif]\
;----------------------------------------------------
お客様のお名前は[emb exp=f.sname1][emb exp=f.name1]様、
お連れ様のお名前は[emb exp=f.sname2][emb exp=f.name2]様、
お車は[emb exp=f.carname]でよろしいですか?
[delay speed=nowait]\
[locate y=360]\
[link target=*scene01]A.よろしい[endlink]
[link target=*return_name]B.よろしくない[endlink]\
[delay speed=user]\
[s]\
;--------------------------------------------
*return_name
[ct]\
[jump target=*inputname]\
[s]\

「す……素晴らしい……これぞ名前入力スクリプトの完全版だ……」

「きゃははーーーーーーーーーー! すきゃんてぃにわうちゅーからの電波がついてんもんねーーーーーー! んでもって、神様もついてんもんねーーーーーーー!」

「だ、大丈夫か? お前……」

「すきゃんてぃってば、だいてんさいぢゃんよもー! きゃははーいけいけいけいけー!」

「……」

練習日記 4日目 次へ


トップページへ戻る