分岐・ループ処理

ゲームに限らず、様々なソフトウェアのプログラムを作る際に必ず使用することになる、「分岐」・「ループ」といった処理の役割や使い方について説明します。

分岐とは

まずは「分岐」について、「分岐」と書くと少し難しいですが、ウディタやその他のプログラムで「分岐」というと、「○○だったら、□□しなさい。○○じゃないなら、△△しなさい」といった処理になり、何かしら条件があって処理が「分岐」していく仕組みになっています。

現実の世界でも道路を歩いていて、分かれ道があった場合に「本屋に行きたい場合は右の道に進む。学校に行きたい場合は左の道に進む」といったように目的地(条件)にあわせて、進む道が変わります。
ウディタやその他のプログラムで「分岐」は、正にこれと同じことです。

ゲームの処理で具体的な例を上げると、

  • 主人公がとあるNPCと会話した場合に、「主人公のレベルが5未満ならもっと強くなれと話す。主人公のレベルが5なら鉄の剣をプレゼントする」。
  • 主人公がとある街に初めて入った場合に、「この街に来たのが初めてならヒロインに出会うイベントを開始する。この街に来たのが初めてじゃないなら何もしない」。
  • 道を塞いでいる兵士がいた場合に、「通行許可証を持っている場合は通してくれる。通行許可証を持っていない場合は通してくれない」

このようにゲームを進行するにあたって「分岐」は欠かせないものになっています。「分岐」の連続でゲームは進行していきます。
「分岐」を使いこなすことによって、ゲームに様々な変化をもたらすことができます。

ウディタでの分岐処理

ウディタで分岐処理を行うには、
「イベントコマンド 条件(変数)」「イベントコマンド 条件(文字列)」「イベントコマンド 選択肢」を使用して行います。

「イベントコマンド 条件(変数)」

最も多く使うことになる分岐処理になります。
変数の値によって、最大3つの条件を用意してそれぞれ分岐させることができます。
また、設定した条件どれにも当たらない時という分岐も作ることができます。
さらに、設定した条件どれにも当たらない時という分岐の中で、また「イベントコマンド 条件(変数)」を使っていけば、無限に分岐する条件を用意することができます。 下記のように条件を設定した場合。

このようなイベント文になります。

■条件分岐(変数): 【1】このEvのセルフ変数0が0と同じ 【2】このEvのセルフ変数0が1と同じ 【3】このEvのセルフ変数0が2と同じ
-◇分岐: 【1】 [ このEvのセルフ変数0が0と同じ ]の場合↓
|■ ※←ここから分岐した際のイベント処理を記述していきます。
-◇分岐: 【2】 [ このEvのセルフ変数0が1と同じ ]の場合↓
|■ ※←ここから分岐した際のイベント処理を記述していきます。
-◇分岐: 【3】 [ このEvのセルフ変数0が2と同じ ]の場合↓
|■ ※←ここから分岐した際のイベント処理を記述していきます。
-◇上記以外
|■ ※←ここから分岐した際のイベント処理を記述していきます。
◇分岐終了◇

 詳細はこちら「イベントコマンド 条件(変数)」

「イベントコマンド 条件(文字列)」

こちらも「イベントコマンド 条件(変数)」と同様ですが、扱う値が文字列変数になります。
使う機会は少ないかもしれません。
極端な例を上げると、主人公の名前が「タロウ」だったら、仲間から呼ばれるあだ名を「タロちゃん」にするとか。そういった形で使用することができます。

下記のように条件を設定した場合。

このようなイベント文になります。

■条件分岐(文字): 【1】S0[◆◆処理結果[文字]◆◆] が “タコ” と同じ 【2】S0[◆◆処理結果[文字]◆◆] が “イカ” と同じ 【3】S0[◆◆処理結果[文字]◆◆] が “エビ” と同じ 【4】S0[◆◆処理結果[文字]◆◆] が “ホタテ” と同じ
-◇分岐: 【1】 [ S0[◆◆処理結果[文字]◆◆] が “タコ” と同じ ]の場合↓
|■ ※←ここから分岐した際のイベント処理を記述していきます。
-◇分岐: 【2】 [ S0[◆◆処理結果[文字]◆◆] が “イカ” と同じ ]の場合↓
|■ ※←ここから分岐した際のイベント処理を記述していきます。
-◇分岐: 【3】 [ S0[◆◆処理結果[文字]◆◆] が “エビ” と同じ ]の場合↓
|■ ※←ここから分岐した際のイベント処理を記述していきます。
-◇分岐: 【4】 [ S0[◆◆処理結果[文字]◆◆] が “ホタテ” と同じ ]の場合↓
|■ ※←ここから分岐した際のイベント処理を記述していきます。
-◇上記以外
|■ ※←ここから分岐した際のイベント処理を記述していきます。
◇分岐終了◇

 詳細はこちら「イベントコマンド 条件(文字列)」

「イベントコマンド 選択肢」

最大10の選択肢を表示し、選択した選択肢の内容に応じた分岐を作ることができます。
分岐の処理として一番わかりやすいものだと思います。
「選択肢Aを選んだら〇〇。選択肢Bを選んだら□□。選択肢Cを選んだら△△」といったものです。

 下記のように条件を設定した場合。

このようなイベント文になります。

■文章選択肢:/ 【1】カレーライス / 【2】オムライス / 【3】ラーメン / 【4】そば / 【5】うどん / 【6】お子様ランチ
-◇選択肢:【1】 カレーライス の場合↓
|■ ※←ここから分岐した際のイベント処理を記述していきます。
-◇選択肢:【2】 オムライス の場合↓
|■ ※←ここから分岐した際のイベント処理を記述していきます。
-◇選択肢:【3】 ラーメン の場合↓
|■ ※←ここから分岐した際のイベント処理を記述していきます。
-◇選択肢:【4】 そば の場合↓
|■ ※←ここから分岐した際のイベント処理を記述していきます。
-◇選択肢:【5】 うどん の場合↓
|■ ※←ここから分岐した際のイベント処理を記述していきます。
-◇選択肢:【6】 お子様ランチ の場合↓
|■ ※←ここから分岐した際のイベント処理を記述していきます。
-◇キャンセルの場合
|■ ※←ここから分岐した際のイベント処理を記述していきます。
◇分岐終了◇

詳細はこちら「イベントコマンド 選択肢」

ループとは

「ループ」はそのまま繰り返すことになります。
決まった条件に達するまで、同じ処理を繰り返す処理を行います。

現実の世界で言うなら、変なたとえですが、納豆をかき混ぜるという動作を考えてみましょう。
「納豆を1回かき混ぜる→まだ糸を引いていない→もう1回かき混ぜる→まだ糸を引いていない→……」と納豆がしっかり糸を引くまで何度もかき混ぜます。正に「ループ」です。
また、学校のグランドを10周するとします。「グランドを1周する→10周にはなっていない→またグランドを1周する→……」といった具合に。

ゲームの処理で具体例を上げると、

  • 画面にリンゴの画像を10枚表示したい時、「リンゴの画像を表示する座標を設定する→1つリンゴの画像を表示する→リンゴの画像はまだ10枚になっていない→リンゴの画像を表示する座標を設定する→1つリンゴの画像を表示する→……」。
  • キャラクターが歩くアニメーションを表示したい時、「1コマ目の画像を表示する→2コマ目の画像を表示する→3コマ目の画像を表示する→1コマ目の画像を表示する→2コマ目の画像を表示する→……」
  • 暗号を入力するイベントを作った場合に、「暗号を入力する→暗号が正解していない→暗号を入力する→暗号が正解していない→……」

少し大きい例を上げると、戦闘システムそのものも「ループ」の中で行われます。「ループ」を抜ける条件が敵を倒すか・自分が倒されるかの2つになりますが、「敵を攻撃する→まだ敵はやられていない→敵が攻撃していくる→まだ自分はやられていない→敵を攻撃する→まだ敵はやられていない→……」。
さらに大きなことを言うと、ゲームそのものが「ループ」の中にあると言ってもいいと思います。クリアというゲームの終了条件が達成するまで、「ループ」の中でゲームをプレイすることができます。
少し裏方的な役割のある「ループ」ですが、ゲームを作る上で欠かせない重要な処理になっています。

ウディタでのループ処理

ウディタでループ処理を行うには、
「イベントコマンド イベント制御」にある「回数付きループ」/「ループ(繰り返し)」/「ループ中断」/「ループ開始へ」を使用します。
また、厳密にはループ処理ではないのですが、同じく「イベントコマンド イベント制御」にある「ラベル処理」でも同様のことが可能です。

ウディタ以外のプログラム言語などでのループ処理の場合、ループ処理を終了する条件を一緒に設定できるものが多いのですが、ウディタの場合は前述の分岐処理を利用してループ処理を終了する条件を設定することになります。

「イベントコマンド イベント制御 回数付きループ/ループ(繰り返し)/ループ中断/ループ開始へ」

「回数付きループ」「ループ(繰り返し)」は単体で動作させることができますが、「ループ中断/ループ開始」は当然「回数付きループ」「ループ(繰り返し)」と組み合わせてしか動作させることはできません。 

「回数付きループ」を単体で使用した場合

あらかじめ処理を繰り返す回数が決まっている場合は、「回数付きループ」を使用します。
イベント文は下記のようになります。

「■回数付きループ」から「◇ループここまで◇◇」内の処理を2回繰り返して、ループを終了します。

■回数付きループ [ 2 ]回
|■ ※←ここから繰り返し行うイベント処理を記述していきます。
|■
|■
◇ループここまで◇◇

「ループ(繰り返し)」を単体で使用した場合

イベント文は下記のようになります。

「■ループ開始」から「◇ループここまで◇◇」内の処理を繰り返します。
ループを終了させる処理を設定していないので、ループ内の処理を延々と繰り返します。
適切な処理を加えないと、俗に言う無限ループとなりエラー画面が表示される場合があります。

■ループ開始
|■ ※←ここから繰り返し行うイベント処理を記述していきます。
|■
|■
◇ループここまで◇◇ 

「ループ(繰り返し)」「ループ中断」を使用した場合

一定の条件に達したら、ループを終了させたい場合に「ループ中断」を使用します。
「イベントコマンド 条件(変数)」などを使って、ループを終了させる条件を設定し、その中で「ループ中断」を入力することで、ループを終了させることができます。
イベント文は下記のようになります。

■ループ開始
|■条件分岐(変数): 【1】このEvのセルフ変数0が1と同じ
|■ ※←ここから繰り返し行うイベント処理を記述していきます。
|■
|■
|-◇分岐: 【1】 [ このEvのセルフ変数0が1と同じ ]の場合↓
||■ループ中断
||■
|◇分岐終了◇
|■
◇ループここまで◇◇ 

「ループ(繰り返し)」「ループ開始へ戻る」を使用した場合

ループの終わりまで到達する前のイベント処理の途中で、ループの初めに戻らせたい場合に「ループ開始へ戻る」を使用します。
「イベントコマンド 条件(変数)」などを使って、ループの初めに戻る条件を設定し、その中で「ループ開始へ戻る」を入力することで、ループの初めに戻ることができます。
イベント文は下記のようになります。

■ループ開始
|■条件分岐(変数): 【1】このEvのセルフ変数0が1と同じ
|■ ※←ここから繰り返し行うイベント処理を記述していきます。
|■
|■
|-◇分岐: 【1】 [ このEvのセルフ変数0が1と同じ ]の場合↓
||■ループ開始へ戻る
||■
|◇分岐終了◇
|■ ※←ここから繰り返し行うイベント処理を記述していきます。
|■
|■
|-◇分岐: 【1】 [ このEvのセルフ変数0が1と同じ ]の場合↓
||■ループ中断
||■
|◇分岐終了◇
|■
◇ループここまで◇◇

詳細はこちら「イベントコマンド イベント制御」

「イベントコマンド イベント制御 ラベル処理」

「ラベル処理」ループ処理というわけではないのですが、「ラベル名」を入力し「ラベル設置」した場所に、「指定ラベルに飛ぶ」を使って処理をジャンプさせる機能です。
ジャンプすることによって、そのラベル以下の処理を順に実行していくことになります。 

条件に合わなければ、指定ラベルにジャンプしてもう一度処理を繰り返すというようにも使えるため、ループ処理を実現することができるわけです。

イベント文は下記のようになります。

「○○処理1」というラベルを設置し、途中条件によって、「●ラベル「○○処理1」に飛ぶ」が実行され、「●ラベル地点「○○処理1」」にジャンプします。

●ラベル地点「○○処理1」
|■ ※←ここから繰り返し行うイベント処理を記述していきます。
|■
|■
■条件分岐(変数): 【1】このEvのセルフ変数0が1と同じ
-◇分岐: 【1】 [ このEvのセルフ変数0が1と同じ ]の場合↓
|●ラベル「○○処理1」に飛ぶ
|■
◇分岐終了◇

コメント(匿名投稿OK、メールアドレスとWEBサイトも任意です)