RPGの戦闘シーンでは、戦うのか逃げるのか選択できますよね。経験値を貯めたい場合は戦いますし、体力が少ない際には逃げるのが王道ではないでしょうか。
今回は、そういった時と場合によってどうしたいのかという「制御文」の使い方について紹介します。
制御文はプログラミングにおいて当たり前のように使いますのである程度使い方をマスターする必要があります。
制御文とは
制御文は、プログラムを制御するための文です。
ドラクエなどのRPGをプレイしたことがある人なら飲み込みが早いと思いますが、薬草を使ったらHP(体力)が回復しますよね?
しかし、HPが満タンの場合はどうでしょう。薬草を使う必要がありませんね。このように、HPが少ない時に薬草を使うという処理を実現するのが制御文なのです。
実際に、制御文を使ったスクリプトを組み、どういったものか見てみましょう。どんどん使った方が覚えるのも早いですからね。
if文で条件分岐するスクリプトの作成
それでは、実際に制御文を使ったスクリプトを作成してみます。
とある条件の時にのみ処理を実行したい場合は、「if文」を使います。ifは「もし」という意味ですが、プログラミングでも同じような意味で使われ「もし、明日天気が雨なら家から外へ出ない」といった感じで使います。
if文の流れを上図に示しましたが、まず条件式を書き、その条件に当てはまるようなら「真」に進み処理を実行します。当てはまらないようなら「偽」に進み処理を実行しません。
これがif文の基本になります。
例として、if文を使って簡単なスクリプトを書きました。このスクリプトを実行すると、「HPを回復させる」と表示されます。
if(条件式) {
処理
}
if文は、条件式と処理を書くことで成り立ちます。基本的に、上のような書式に当てはめて書きます。
上の例では、9行目でint型の変数hpに0を代入しています。この後が本題です。
10行目で「if(hp == 0)」と書きました。これは、「もしも、hpが0ならば」という意味になります。「==」は関係演算子と呼ばれ、左辺と右辺が等しい場合に真になります。
つまり、10行目の時点で変数hpには0が入っているので、「hp == 0」は真になり、if文の中の処理に進み12行目の「HPを回復させる」と表示させるスクリプトが実行されます。
今回は、変数hpを0で初期化していますが、0以外の数字を代入すると「偽」となり、12行目は実行されないようになります。
気になる方は、0以外の数字を代入して、12行目が実行されないか確認してみるといいと思います。動作確認は大事ですからね!
ちなみに、関係演算子には何種類かあるので紹介しておきます。
関係演算子とそれぞれの比較結果について
「==」・・・左辺と右辺が等しい場合に「真」になる
「!=」・・・左辺と右辺が等しくない場合に「真」になる
「>」・・・左辺が右辺より大きい場合に「真」になる
「<」・・・左辺が右辺より小さい場合に「真」になる
「>=」・・・左辺が右辺以上の場合に「真」になる
「<=」・・・左辺が右辺以下の場合に「真」になる
算数の授業でよくみかけたことのある記号が並んでいますよね。
「大きい」「以上」の違いなど若干ややこしさがありますが、上にある関係演算子はよく使うので覚えておきたいです。
if-else文で条件分岐するスクリプトの作成
次に、応用として「if-else文」を説明します。「else」は「他」という意味ですが、プログラミングでは「そうじゃなければ」という意味で使うことが多いです。
例文としては「もし、HPが30より少なければ回復し、そうじゃなければ攻撃する」といった感じでしょうか。
要するに、条件を満たした場合と、そうじゃない場合にそれぞれ別の処理を実行したい時に「if-else文」を使います。
if(条件式){
処理1
} else {
処理2
}
if-else文の流れはこんな感じです。複雑そうに見えますが使えこなせるようになればとても便利な制御文です。
先ほどの例文をスクリプトにしました。このスクリプトを実行すると「攻撃!」と表示されます。行ごとに説明しますね。
まず、9行目で変数hpに50を代入しました。10行目のif文で「hp(50) < 30」は偽となるので12行目が実行されず13行目に進みます。13行目には、偽だった場合に実行する「else」が記述されているので、14行目に進み「攻撃」と表示するスクリプトが実行されます。
「HPを回復させる」と表示させたい場合は、hpの値を30より少なくすればOKです。
if文の基本的な使い方について説明しましたが、他にも様々な書き方があります。
if文を追加したい場合は、elseの後にif文を追加して「〇〇なら◇◇、××なら△△、そうじゃなければ□□」といった風にすることも出来ます。
あんな書き方も可能か?と試行錯誤しながら色々な書き方を試してみると良いと思いますよ!