C++初歩3 コンポーネント指向
C++初歩3 コンポーネント指向
Sanjay Mahav著「 ゲームプログラミングC++」(翔泳社)で書かれているコンポーネントベースモデルを参考に、ゲーム要素が持つ機能を、コンポーネントで実装します。本章ではPong Gameを作成します。
ここでは、クラスの関連図を説明し、まずは、ベースとなるプログラムをダウンロードして実行してみます。プログラムとしては、青い背景しか表示されていない状態です。
灰色の壁を実装します。壁の持つ機能は、ダウンロードしたプログラムの中に、SpriteComponentとBoxComponentとして実装されているので、Wallクラスを追加するだけで、壁が表示されるようになります。
「Wallの追加」で作成したプログラムの動きを説明しています。
クラスがnewされた時に動くコンストラクタと、deleteされた時に動くデストラクタが旨く活用され、可変長配列(Vector)の要素が追加されたり、削除されたりします。
壁やボール、パドルといったゲーム要素は、Actorの派生クラスとして作成します。この派生クラスのコンストラクタでは、機能に対応したComponentの派生クラスをnewすることで、機能の実装します。
今回のコンポーネントベースモデルを使ったプログラムでの、ゲーム要素を追加する時の基本的な流れを説明し、ボールが四方の壁の中を跳ね返るプログラムを作成します。ボールは動きますので、MoveComponentを追加します。
Paddleクラスを追加します。Paddleは、キー操作で上下に移動しますので、InputComponentを追加します。
左右の壁の替わりに、左右にパドルが表示されるようにします。
また、ボールがパドルに当たった場合は、新しいボールが追加され、ボールの数が、どんどん増えていくようにします。
パドルにボールが当たると、得点がアップし、画面の真ん中に得点が表示されるようにします。
ボールが外に飛び出てしまい、全てのボールが無くなってしまった場合、「GAME OVER」という表示を行うようにします。
ボールの数は、Ballクラスの静的メンバー変数で記録するように、静的メソッドで、ボールの数を取得できるようにします。これにより、Scoreクラスでボールの数が0になったかを調べ、ボールの数が0になったならば、「GAME OVER」表示するようにします。
効果音は、ボールがパドルに当たった時と、ボールが外に飛び出てしまった時に鳴らすようにします。これらのタイミングは、Ballクラスの更新処理の中で調べられるので、Ballクラスの中で、音ファイルの読み込みも行うようにします。ただ、ボールは複数個生成されるので、Ballクラスのコンストラクタで、単純に音ファイルの読み込みを行ってしまうと、ファイルアクセスが多発し、性能劣化の原因になってしまいます。
一度読み込んだファイルは、2回目以降はファイル読み込みしないようにします。これは、連想配列を使って実装するようにします。ファイルの読み込み処理をGameクラスのメソッドとして用意します。