チュートリアル3: 変数を使ってみよう¶
「変数」とは、文字列や数値を入れる、入れ物や箱のようなもの。ゴーストでいうと「ユーザー名」「起動回数」「起動時間」「好感度」などが変数になる。YAYA の変数にはいろいろな種類がある。
文字列と数値¶
変数には「文字列」と「数値」の二種類がある(正確には整数、実数、文字列の 3 種類)。
変数 = 1
こう書くと、変数の中身は数値の 1 になる。
変数 = "1"
このように " " か ' ' でくくって代入すると、文字列の "1" が入る。こんなふうに変数に中身を入れることを「代入」と言う。
全角の「1」「2」「3」… は数値になれず、文字列扱いになる。文字列型の変数だと、数値として比較や計算ができない。 たとえば数値の 1 と 2 で足し算すると結果は 3 になるが、文字列の "1" と "2" を足すと、1 と 2 がくっついて "12" になってしまう。ほかにも色々違いがあるので注意すること。
変数は、YAYA のシステム関数を使って、いつでも好きなときに文字列 ⇔ 数値に変更できる。
- 変数を文字列変数にする:
変数 = TOSTR(変数) - 変数を数値変数にする:
変数 = TOINT(変数)
自動的に整数、実数、文字列のどれなのかを判断して変換してくれる TOAUTO もある(システム関数についての詳しい説明は、のちほど)。
グローバルとローカル¶
名前の頭に _ がついているとローカル変数。
_変数名
ついていなければグローバル変数。
変数名
おおざっぱに言うと、「すぐ消えてしまう一時的なもの」がローカル変数、「削除しない限りずっと残る」のがグローバル変数。動作やセーブデータを軽くするため、「ユーザー名」や「好感度」など、ずっと残しておかないといけない変数以外は、なるべくローカル変数を使うことをお勧めする。
ローカル変数の寿命¶
(この辺りはややこしいので、わかりづらければ、今は飛ばして後で気になったときに読むこと)
ローカル変数がどれぐらいの期間使えるのかというと、「現在の { } 内、およびそれより深い入れ子階層のみで使用できる。寿命は該当する { } を抜けるところまで」である(値と変数より)。
言葉では説明しづらいので、一例を示す。
ローカル変数テスト {
{
_変数 = 1
}
結果 = _変数
}
こう書くと、_変数 が深い階層から浅い階層に移ったときに消えてしまうので、結果 の中身も空になってしまう。しかし、
ローカル変数テスト {
_変数 = ""
{
_変数 = 1
}
結果 = _変数
}
こうすれば、_変数 は浅い階層 → 深い階層 → 浅い階層… と、最初に浅い階層で生まれているので、深い階層から浅い階層に移動しても消えずに残り、結果 の中身は 1 になる。最初に _変数 が生まれたところが、結果 = _変数 と同じ(またはもっと浅い)階層かどうかがポイント。
つまり、ローカル変数を長生きさせたいときは、最初に一番浅い階層で _○○ = "" などの一行を書いておけばよい。
実際に変数を使ってみよう¶
準備¶
dic_main.dic を開き、次の行を探す。
//クリックされたら「MouseDoubleClick_(キャラ番号)(当たり判定識別子)」イベントにジャンプ
OnMouseDoubleClick{EVAL("MouseDoubleClick_%(reference[3])%(reference[4])")}
この OnMouseDoubleClick の行の左端に // を入れて、コメントアウトする。そして代わりに、次の 3 行をどこかに書く。
OnMouseDoubleClick {
"\0\s[0]変数の実験をやるよー!\e"
}
このイベントは、「ゴーストが左ダブルクリックされた」ときに起こるイベント。一般的なゴーストだと、つつかれ反応をしたり、メニューが出てきたりすることが多い。
SHIORI Eventから生まれてくる変数を使ってみよう¶
OnMouseDoubleClick イベントが起きると、reference[0]、reference[1]… といった変数が自動的に生まれる。どの変数がどんな意味なのかは、前にも紹介したCROW・SSPリファレンス - Shioriに書いてある(ここで Reference0 と書いてある変数は、YAYA では reference[0] と書く)。
試しに「クリックされたキャラの番号」が入っている reference[3] を、トーク中に入れてみる。
OnMouseDoubleClick {
"\0\s[0]変数の実験をやるよー!\n\n"
--
reference[3]
--
"番のキャラがつつかれたよ!\e"
}
" " や ' ' で囲まないと、変数の中身が展開されてトークになる。シンプル! メインキャラ(0 番キャラ)とサブキャラ(1 番キャラ)をダブルクリックしてみて、ちゃんと動いているかどうか確認すること。
この書き方だとわかりづらい、書きづらい、というときは、次のように書く。
OnMouseDoubleClick {
"\0\s[0]変数の実験をやるよー!\n\n%(reference[3])番のキャラがつつかれたよ!\e"
}
" " で囲まれた中で変数を使うときは、%(変数名) と書く。 ちなみに、" " ではなく ' ' で囲むと、変数が展開されず、そのまま表示される。
オリジナル変数を作ってみよう¶
ゴーストにプレゼントをあげてみる。「プレゼント」という変数に「花束」という文字を入れるときは、最初に説明した「変数 = 変数に代入したいもの」を { } の中に書く。
OnMouseDoubleClick
{
プレゼント = "花束"
"\0\s[0]わーい「%(プレゼント)」ありがとう!\e"
}
【ここ】プレゼント【ここ】=【ここ】1【ここ】
【ここ】の部分には、空白やタブを入れてもかまわない。演算記号(= や + といった記号のこと)は半角しか使えない。見やすくするため、演算記号の右と左に半角空白を入れる人が多い。
この例だと、変数に入れる中身の「花束」は数値ではないので、" " か ' ' でくくる。トークを書くときと同じ。
OnMouseDoubleClick
{
プレゼント = 花束
"\0\s[0]わーい「%(プレゼント)」ありがとう!\e"
}
うっかりこう書いてしまうと、「プレゼント」の中身は空っぽになってしまう。なぜかというと、YAYA は "花束" ではなく 花束 だけだと、「『花束』という名前の変数」と解釈してしまうから。そのため「『プレゼント』という変数に『花束』という変数の中身を入れましたよ」という意味に誤解され、「花束」という変数は存在していないので、中身は空っぽになってしまう、というわけ。
変数の計算をしてみよう¶
数値型の変数の場合は、計算もできる。
OnMouseDoubleClick
{
好感度 = 好感度 + 1
"\0\s[0]ユーザーさんだいすき!\n\n(好感度が「%(好感度)」になった!)\e"
}
こちらもシンプル。ちなみに、次のように省略して書くこともできる。
OnMouseDoubleClick
{
好感度++
"\0\s[0]ユーザーさんだいすき!\n\n(好感度が「%(好感度)」になった!)\e"
}
好感度++ は「好感度を 1 だけ増やす」という意味で、好感度 = 好感度 + 1 と意味は同じ。好感度-- だと 1 減る。好感度 += 2 は 好感度 = 好感度 + 2 と同じ、好感度 -= 2 は 好感度 = 好感度 - 2 と同じ。そのほか YAYA で使える計算用の記号の説明は、演算に書いてある。
文字同士の足し算もできる。
プレゼント = "花" + "束"
と書くと、変数 プレゼント の中身は "花束" になる。
変数がちゃんと保存されているかどうか確認¶
ゴーストをいったん終了し、セーブデータファイル(yaya_variable.cfg)をテキストエディタで開いてみる。上の例なら、
プレゼント,"花束",",",
という一行があれば、保存成功。ちなみに数値型の変数の場合は、
好感度,1,",",
のように、変数の中身の数字が " " で囲まれていない。保存形式の詳細は SAVEVAR を参照。