変数をスイッチの代わりに使う

「スイッチ」は、ON と OFF の 2 つの状態を記憶できますが、ON を 1、OFF を 0 に置き換えると、「スイッチ」は 0 ~ 1 の数値を格納出来る変数であるとも言えます。逆に「変数」は、0 ~ 1 だけでなく、10 でも、100 でも、1000 でも格納出来るわけですから、「変数」は ON と OFF 以外の状態も記憶できるスイッチであるとも言えます。

つまり、「スイッチ」をすべて「変数」に置き換えることが可能なのです。

ただ、だからといって、すべてのスイッチを変数に置き換える意味はありません。変数に置き換えた方が便利なものもあれば、スイッチのままの方が便利なものもあります。

そこで、ここでは変数に置き換えた方が便利な例を一つ紹介しましょう。

「シナリオ進行度」を変数で管理する

シナリオの進行とともに、町の人のセリフが変わったり、ショップの品揃えが変わったり、新たなイベントを発生させたい場合は、シナリオの節目をクリアするごとに記憶しておく必要があります。

例えば、次のようなシナリオ進行をするゲームを作るとします。

  1. ゲーム開始
  2. 王様に会って話を聞く
  3. 洞窟をクリアする
  4. 塔をクリアする
  5. 王様に報告をする
  6. 2 つ目の町へ到着する
  7. 薬草を採ってきてほしいと頼まれる
  8. 森へ行って薬草を入手する

この場合、すべての節目をスイッチで記憶するには、全部で 7 つのスイッチが必要になります(最初は必要ないので)。したがって、シナリオのボリュームが増えれば増えるほど、必要なスイッチの数はさらに増えます。

では、これを変数で管理した場合はどうなるでしょう?

シナリオ展開 変数の値
ゲーム開始 0
王様に会って話を聞く 1
洞窟をクリアする 2
塔をクリアする 3
王様に報告をする 4
2 つ目の町へ到着する 5
薬草を採ってきてほしいと頼まれる 6
森へ行って薬草を入手する 7

お分かりでしょうか?

一つの変数で、すべての節目を記憶出来るのです。変数の値が 5 ならば、「2 つ目の町へ到着した」段階だと分かりますし、7 ならば、「森へ行って薬草を入手した」段階だと分かります。

ですので、洞窟をクリアするとセリフが変わる町の人であれば、イベントページの出現条件を「変数が 2 以上」に設定すれば良いですし、2 つ目の町へ到着するとセリフが変わるのであれば、「変数が 5 以上」に設定すれば良いことになります。また、こうすることで、シナリオ進行度を参照したい場合は、常に同じ変数の値をチェックすれば良いわけですから、あのイベントをクリアした後で ON にしたスイッチはどれだったっけ……というようなことがなくなります。

このように、シナリオの流れを細かく記憶しておくのは、スイッチよりも変数を使う方が便利なのです。

「シナリオ進行度」を変数で管理する場合の注意点

例えば、洞窟と塔のどちらを先にクリアしても問題ないというシナリオにしたとします。

シナリオ展開 変数の値
王様に会って話を聞く 1
洞窟をクリアする 2
塔をクリアする 3
王様に報告をする 4

そして、洞窟をクリアするとセリフが変わる「町の人 A」を用意する場合、先ほども書いたようにイベントページの出現条件は「変数が 2 以上」となります。

ところが、先に塔をクリアしたとしたら、どうなるでしょう?

塔をクリアすると、変数の値は 3 になります。すると、「町の人 A」のセリフが変わる条件「変数が 2 以上」を満たしてしまいますので、洞窟をクリアしていないにも関わらず、セリフが変わってしまうことになります。イベントページの出現条件に設定出来る変数は、一定値「以上」ですので、このようにクリアする順番が前後する可能性がある場合は、変数では扱いづらいのです。

そこで、こういう時はスイッチを併用して、以下のように管理します。

シナリオ展開 変数の値 スイッチ
ゲーム開始 0 ---
王様に会って話を聞く 1 ---
洞窟をクリアする 1 [洞窟クリア]を ON
塔をクリアする 1 [塔クリア]を ON
王様に報告をする 2 ---
2 つ目の町へ到着する 3 ---
薬草を採ってきてほしいと頼まれる 4 ---
森へ行って薬草を入手する 5 ---

こうすれば、「町の人 A」のセリフが変わる条件は、「変数が 1 以上」かつ「スイッチ[洞窟クリア]が ON」と設定出来ますので、全体の流れを変数で管理しつつ、クリアする順番が前後しても構わない場合にも対応出来るようになります。

最初からスイッチと変数とを上手に使い分けするのは難しいと思いますが、短編を何作品か制作していくと、ここは変数が良い、ここはスイッチが良い、というのが分かってきますので、今は「変数をスイッチ代わりに使える」ということだけを覚えておいてください。