変数について
「変数」は、「スイッチ」と違ってゲームの作成に必須ではないのですが、これがあることでゲーム作成の幅が大きく広がります。
そこで、ここでは「変数とは何なのか?」について解説したいと思います。
変数とは?
まずは、次の画像を見てみてください。目の前にある宝箱の中から 5 つ開けるというミニゲームです。
宝箱を開けると、ポイントを獲得することが出来ます。
では、プレイヤーが自由に 5 つの宝箱を開けた結果、合計で何ポイント獲得するのでしょうか?
この場合、宝箱から獲得したポイントを記憶しておければ、そのポイントをすべて足して合計ポイントを出すことが出来ます。
この例でのポイントのような「数値を記憶しておくもの」が、「変数」です。
「スイッチ」同様に、「変数」はゲーム全体を通して最大で 5000 個作成出来ます。つまり、同時に 5000 個までの数値を記憶しておくことが出来るわけです。
変数の操作
「変数」を操作するには、イベントコマンド[変数の操作]を設定します。
- 変数
- 操作対象となる変数を指定します。[一括]を選択すると、同時に複数の連続した変数を操作対象に指定出来ます。
- 操作
- 操作対象となる変数に、どういう操作を行うのかを選択します。詳しくは、後で解説します。
- オペランド
- [操作]で扱う数値を指定します。詳しくは、後で解説します。
[操作]について
選択した[操作]によって、変数に記憶されている数値がどう変わるのかを、以下の条件を例に解説します。
- [変数 0001]に 30 が記憶されている。
- 取り扱う数値である[オペランド]は、[定数]20 とする。
代入 | オペランドの数値をそのまま変数に格納します。 つまり、[変数 0001]の数値は 20 になります。 |
加算 | オペランドの数値を変数の数値に足し、その結果を変数に格納します。 つまり、[変数 0001]の数値は 30 + 20 で 50 になります。 |
減算 | オペランドの数値を変数の数値から引き、その結果を変数に格納します。 つまり、[変数 0001]の数値は 30 - 20 で 10 になります。 |
乗算 | オペランドの数値を変数の数値に掛け、その結果を変数に格納します。 つまり、[変数 0001]の数値は 30 × 20 で 600 になります。 |
除算 | オペランドの数値を変数の数値で割り、その答えを変数に格納します。 つまり、[変数 0001]の数値は 30 / 20 で 1 あまり 10 になりますから、答えの 1 が格納されます。 |
剰余 | オペランドの数値を変数の数値で割り、その余りを変数に格納します。 つまり、[変数 0001]の数値は 30 / 20 で 1 あまり 10 になりますから、余りの 10 が格納されます。 |
[オペランド]について
[操作]で取り扱える数値には、以下のものがあります。
- 定数
- 入力欄に入力した数値を取り扱います。
- 変数
- 指定した変数に格納されている数値を取り扱います。
- 乱数
- 指定した 2 つの数値の間で発生するランダムな数値を取り扱います。
- ゲームデータ
- 指定したアイテムの所持数など、ゲーム内の各種データを取り扱います。
- スクリプト
- 任意のスクリプトを取り扱います。スクリプトは上級者向けの機能ですので、ここでは無視して構いません。
つまり、作者が自由に指定する数値だけでなく、プレイヤーがゲームをプレイしたことによって変動する数値も取り扱うことが出来るのだと覚えておいてください。
獲得ポイントを教えてくれる人を作る
では、最初に例として挙げたミニゲームを変数を使って仕上げてみましょう。
宝箱の設定
まず、それぞれの宝箱の実行内容は、次のように設定します。設定後、必要な数だけ宝箱をコピーして、それぞれの獲得ポイント数を変更しておきましょう。
変数にはスイッチと同様、名前を付けることが出来ます。[変数 0001]には「獲得ポイント」、[変数 0002]には「宝箱を開けた回数」と名前を付けています。
宝箱を開けると、獲得したポイントの数値を[変数 0001]に[加算]します。そうやって宝箱を開け続けていくと、獲得したポイントが[変数 0001]に加算され続けていきますので、最終的には[変数 0001]の数値が獲得ポイントの合計となります。
また、宝箱を開けた回数を管理する[変数 0002]に 1 を[加算]します。すると、宝箱を開けるたびに[変数 0002]の数値が 1 ずつ増えていき、宝箱を 5 つ開けた時点で[変数 0002]の数値は 5 になっていますので、それ以上は宝箱を開けられないよう、「[変数 0002](宝箱を開けた回数)が 4 以下の時」という条件分岐を実行内容の最初に設定しているというわけです。
ポイントを教えてくれる人の設定
続いて、ポイントを教えてくれる人の設定をします。
このように、宝箱を 5 回開けた時点で、ポイントを教えてくれるようにします。
そして、実行内容の設定です。
獲得ポイントの表示には、[文章の表示]の制御文字「\V[n]」を使います。これは、「n 番の変数に格納されている数値を表示する」という制御文字ですので、「\V[1]」ですと、[変数 0001]に格納されている数値、すなわち獲得ポイントの合計が表示されることになります。
その後、獲得ポイントが 100 ポイント以上か未満かでセリフが変わるようにしていますが、もっと細かくセリフが変わるようにしたり、報酬アイテムをもらえるようにしても良いでしょう。
●宝箱を開けるとポイントを獲得
●宝箱を 5 つ開けると、それ以上開けることは出来ない
●最後に合計獲得ポイントを教えてくれる
このミニゲームの改良点
このミニゲームには、いくつかの改良点があります。
- 一度しか遊ぶことが出来ない。
- 宝箱から獲得出来るポイントが固定されているので、それぞれの宝箱から獲得出来るポイントを覚えられてしまう。
これらを具体的にどう改良するかについては、あえて解説しません。
- 宝箱にはセルフスイッチではなくスイッチを使う。
- 獲得ポイントは定数ではなく乱数を使う。
これが改良するヒントです。あとは、皆さんで工夫して改良してみてください。
補足:「ゲーム内変数」という呼び方
さて、変数に話を戻します。
MV のゲームの実行部分は、Javascript というプログラム言語で書かれており、その中にも、「変数」という概念があります。このため、ツクールの熟練者の話でスクリプトを含めた話題が出てくると、Javascript で書かれたスクリプトの「変数」と、ツクールの「変数」が紛らわしくなることがあります。
このため、特に区別する必要がある時は、ツクールの変数を「ゲーム内変数」や「ゲーム変数」と呼ぶことがあります。この言葉を目にした時のために、覚えておきましょう。