>> シューティングゲーム作成入門トップに戻る
まず、今回のシューティングゲームの全体の構成について説明しておきます。
プレイヤークラス、敵クラス、背景クラスなどの全体を管理するクラスとして、
CONTROLクラスというものがあります。。
プレイヤークラス、敵クラス、背景クラスなどは、それぞれAll関数というものを持っており、
この関数をCONTROLクラスのAll関数で毎ループごとに実行するようにします。
図で表すとこんな感じです。
すごいシンプルですが、CONTROLクラスが各クラスをまとめて動かしているんだな、
という認識さえ持ってくれればよいです。
プレイヤークラス、敵クラスなどはCONTROLクラスのコンストラクタでインスタンスを生成するようにします。
イメージとしては以下のようなヘッダファイルとクラス定義になります。
>> 【キャラを表示させよう】に進む
>> シューティングゲーム作成入門トップに戻る
全体の構成
プレイヤークラス、敵クラス、背景クラスなどの全体を管理するクラスとして、
CONTROLクラスというものがあります。。
プレイヤークラス、敵クラス、背景クラスなどは、それぞれAll関数というものを持っており、
この関数をCONTROLクラスのAll関数で毎ループごとに実行するようにします。
図で表すとこんな感じです。
すごいシンプルですが、CONTROLクラスが各クラスをまとめて動かしているんだな、
という認識さえ持ってくれればよいです。
プレイヤークラス、敵クラスなどはCONTROLクラスのコンストラクタでインスタンスを生成するようにします。
イメージとしては以下のようなヘッダファイルとクラス定義になります。
#include "player.h" class CONTROL{ private: //プレイヤークラスのポインタ PLAYER *player; public: CONTROL(); ~CONTROL(); void All(); };
#include "pch.h"#include "control.h"CONTROL::CONTROL(){ //プレイヤークラスの生成 player = new PLAYER;}CONTROL::~CONTROL(){ //プレイヤークラスの解放 delete player;}void CONTROL::All(){ //プレイヤークラスのAll関数実行 player->All();}上記のコードはCONTROLクラスのコンストラクタでPLAYERクラスを生成し、All関数内でPLAYERクラスのAll関数を実行しているコードになります。CONTROLクラスの基本の形はこれです。今はPLAYERクラスしか書いてませんが、敵、エフェクト、ボス等のクラスを今後追加していきます。コード的には追加するクラスのポインタを宣言し、コンストラクタでそのクラスのインスタンスを生成し、All関数内で、各クラスのAll関数を実行、デストラクタでそれぞれ解放、という流れになります。そしてそのCONTROLクラス自身のインスタンスはどこで生成してるかというと、 WinMain関数内でインスタンスを生成するようにしてます。WinMain関数は以下のようになっています。
#include "pch.h"#include "control.h"//キー取得用配列char key[256];// プログラムは WinMain から始まりますint WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode(TRUE); if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } CONTROL *control = new CONTROL; while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll(key)==0){ control->All(); } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }CONTROLクラスを生成してメインループで呼び出しています。このメインループの意味が分からない方は、左のメニューからゲームプログラミング入門のページに行き、基礎を学んできてください。キー情報取得用の配列keyは、グローバル変数にし、別ファイルのdefine.hというヘッダファイルでextern宣言しています。これにより、define.hを取り込んだほかのファイルからでもアクセスできるようにしています。
#include <windows.h>//メッセージボックス#define MSG(m) {\ MessageBox(NULL,m,"メッセージ",MB_OK);}//extern宣言してkey配列にどこからでもアクセスできるようにするextern char key[256];これでCONTROLクラスのAll関数が毎ループごとに呼び出されます。そのAll関数内ではさっき説明したように各クラスのAll関数を実行していますよね?その仕組みを頭の中で想像してもらえれば、CONTROLクラスが親となって、数珠繋ぎのような形で全体をコントロールしている図が思い浮かべられると思います。ざっくりとした全体の構成の説明はこんな感じです。これだけのコードではコンパイルも通らず、何も動かせられないので次の章の全体のコードを見てください。次回からは各クラスに焦点を当てて説明していきます。次回は、PLAYERクラスを使って、キャラを表示させて歩かせるところまで説明します。
>> 【キャラを表示させよう】に進む
>> シューティングゲーム作成入門トップに戻る