Top > チュートリアル > 3.変数を使ってみよう
  トップページへ   [ 一覧 | 検索 | 最終更新 ]   [ 差分 | バックアップ | 凍結 ]

チュートリアル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です。
最初に「_変数」が生まれたところが「結果=_変数」と同じ(またはもっと浅い)階層かどうかがポイント。
つまりローカル変数を長生きさせたい時は最初に一番浅い階層で「_○○=""」などの一行を書いておけばOK。

実際に変数を使ってみよう

準備

「dic_main.dic」を開き

//クリックされたら「MouseDoubleClick_(キャラ番号)(当たり判定識別子)」イベントにジャンプ
OnMouseDoubleClick{EVAL("MouseDoubleClick_%(reference[3])%(reference[4])")}

この「OnMouseDouble~」の行の左端に「//」を入れ、コメントアウトしてください。
そして、代わりに以下の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"
}

こんな書き方でもOK!
「" "」で囲まれた中で変数を使うときは「&(変数名)」と書きましょう。
ちなみに「" "」ではなく「' '」で囲むと変数が展開されず、そのまま表示されます。

オリジナル変数を作ってみよう

ゴーストにプレゼントをあげてみましょう。
「プレゼント」という変数に「花束」という文字を入れる時は、最初に説明した「変数 = 変数に代入したいもの」を「{ }」の中に書きます。

 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,,

こんな風に変数の中身の数字が" "で囲まれてません。