第二回 ゲーム開発 【条件分岐】
こんにちは。今日は前回に引き続きC#の基礎文法とUnityのテキストについて解説していきたいと思います。今日の目標は次の2つです。
1. 論理演算子について覚えよう。
2. if文の使い方を覚えよう。
さて、今回はif文についてやっていきたいと思います。if文は、条件によって処理を変えたいときに使います。まさにプログラミングといった感じで、非常に使用頻度も高く、if文をたくさん使うだけでとても複雑なゲームを作ることができます。if文のような、条件によって処理が変わるような制御のことを「条件分岐」といいます。まさに、条件がたくさんに枝分かれしていくのです。条件分岐には他にswitch文がありますが,これは第3回でやりたいと思います.
条件分岐を勉強する前に、どうしても覚えておかなければいけない文法があるのでそれを先にやりたいと思います。ゲーム開発における条件分岐では、「~が~より大きい」や、「~が~と同じ」といった条件が非常によく出てきます。プログラミングで、大小関係のような条件式をどのように書けばいいでしょうか?
例えば、HPが20以上である、をプログラミングで書くと次のようになります。
「>=」という部分が「~以上」を表しています。また、=を省くと「~より大きい」という意味になります。さて、ここで非常に重要なポイントがあります。それは、「HP >= 20」という部分がbool型であるということです。初心者の方は最初このあたりが難しいかもしれません。「HP >= 20」がbool
型であることは、「HP >= 20」がYES/NO の2つの値しか取らないことと対応させるとわかりやすいかもしれません。bool型は結局2つの値true/falseを返すものですからね。つまり、次のように書くことができます
isBigをDebug.Logしてみると、trueが返されているのがわかります。また、HP = 10など20より小さな値にすると今度はfalseが返されることがわかるでしょう。「>=」のような2つの変数の関係を表す演算子について覚えるべきものは以下です。
HP == 20 | HPが20と等しければtrue |
HP != 20 | HPが20と等しくなければtrue |
HP >= 20 | HPが20以上であればtrue |
HP > 20 | HPが20より大きければtrue |
HP<=20 | HPが20以下であればtrue |
HP< 20 | HPが20より小さければtrue |
さて、プログラミングをやっているときに、より複雑な条件を書きたい時も出てくると思います。例えば、特定の装備A,Bを2つ装備しているときにセット効果が発揮されるという実装を考えてみましょう。この時、「Aを装備していて、かつBも装備している」という条件はどのように書けばいいでしょうか?これは次のように書くことができます。
この「&&」というのが「かつ」という意味を表しています。それでは、「AかBのどちらかを装備しているか」という条件はどのように書くでしょうか。これは次のように書きます。
ここでは、縦線二本の || が「または」という意味を表しています。この2つの演算子のことを論理演算子と言います。論理演算子には他にも色々あるのですが、まずはこの2つを覚えておけば大丈夫です。復習として練習問題をやってみましょう。
[練習問題1]
「攻撃力と防御力の値が等しいか、あるいは素早さが200以上である」を表す条件式をbool型の変数に代入してみましょう。変数は自分で考えて作ってみましょう。
さて、ようやくif文に入ることができます。ただ、先ほどの演算子がしっかり理解できていればあとは文法を覚えるだけなので割と簡単です。if文の文法は次のようになります。
この文法は、英語の文法のように何も考えずに覚えてしまってください。ここで、if文で注意するべきことを書いてみます。まず、ifは必須で書かなければいけないが、else if, elseは書いても書かなくてもいいです。次に、書く条件は必ずbool型でなければいけません。
それでは実際にif文を書いてみましょう。
ゲームプログラミングではどのようなときに条件分岐を使うでしょうか。本当にあらゆる場面で条件分岐を使うので、上手い例を出すのが逆に難しいですね。ポケモンのような属性で相性があるようなRPGを考えてみましょう。このゲームには「炎」、「水」、「自然」属性があるとします。ある敵には、「炎」は抜群だが「水」は効果が今ひとつで、「自然」は通常通りだったとします。このような敵にダメージを与えようとしたときの処理を書いてみましょう。
このような時問題になるのが、属性をどうやって変数として表現するかということです。基本的にはプログラミングでは数字でしか表現できないので、int elementIdのように整数値で属性を表現することになります。例えば、elementId が0のときには炎、elementIdが1のときには水…といった感じです。ifやelse ifの中身がbool型になっていることに注意してください。Debug.Logだけだと味気ないので、実際にHpを減らす処理も書いてみましょう。
だいぶゲームプログラミングっぽくなりました。※ -= の文法の説明をする。
さて、それでは練習問題を解いてみましょう。
練習問題2
あなたの職業はバーサーカーです。体力が半分以下になったら攻撃力が2倍になる、という実装を書いてみましょう。体力の数値や攻撃力の数値などは自由に設定してみてください。
こんな感じになっていればOKです.より良いコードを書くには次のようにすると良いでしょう.
このように「2倍」とか「半分」とか,数値を自分で計算して直接書くのではなく,プログラム内で計算することで,HpやAtkが違う値をとったときもきちんと動作するようになります.
今回はUntyはほとんど使わずプログラミングの説明に終ってしまいましたね.次回はUnityのゲーム画面上にテキストを表示させることと,switch文というもう1つの条件分岐の文法について勉強していきたいと思います.それではお疲れ様でした.