見出し画像

ゲーム制作に使えるc言語#2

ゲーム制作でのオブジェクト指向

オブジェクト指向プログラミングとは

クラスを物として考える概念的なもの

オブジェクト指向の利点

・書き換えが簡単
・可読性が上がる
・main関数が見やすくなる
・UnrealEngineがある程度理解できる

オブジェクト指向の欠点

・オブジェクトによっては変数が多くなる
・クラスの理解が必要
・ポインタを使用することが多いのでポインタを理解しないといけない
・いらない変数を作らないように気を付けなければならない

「動物」というクラスがあるとします。
動物は鳴くので、鳴くという関数が必要となります。

画像1

※ポリモーフィズムの話のために仮想関数にしてあります。
このように必要なものだけをクラス内に定義することをオブジェクト指向プログラミングと言います。

オブジェクト指向の応用(ポリモーフィズム)
上記のクラスを基底クラスにして、「犬」クラスや「猫」クラスを作ります。

その「犬」クラスと「猫」クラスはCry関数をoverrideしてつくります。

Dog.h

画像2

※c言語ではoverrideと書かなくても大丈夫ですが、自分がわかりやすいようにoverrideを書くことをおすすめします。

Dog.cpp
Cry関数

画像3

ワンと出力するように書いています。

Cat.h

画像4


Cat.cpp
Cry関数

画像5

Main.cpp

画像6

※下でdeleteしています。

animalsのCry関数を全て呼び出すと...

画像7

このように出力されます。
これを利用して、敵を複数体作りたい場合やプレイヤーのキャラクターを複数体作りたい場合に、敵の基底クラスを作ったり、プレイヤーの基底クラスを作ったりすると、main関数が見やすくなります。
敵の基底クラスとプレイヤーの基底クラスを同じ基底クラスにすることでもっとmain関数が見やすくなります。

このようにポリモーフィズムは便利ですが、newしたものをdeleteをしなければメモリリークをしてしまいます。
じゃあnewしなければいいじゃないかという人もいると思います。
しかし、newしない場合AnimalクラスのCryが呼ばれてしまうので、ワンとニャーの部分が鳴くとなってしまします。
便利なところもありますが、色々と気を付けて使わなければなりません。

まとめ

オブジェクト指向はあくまでも概念なのでこれが正解ということはありません。
ゲーム制作においては、思った通りに動いたらそれが正解なので、色々と試して自分なりの実装方法を見つけましょう。