敵を配列で持たしてあげてコンストラクタの引数で敵の初期化データを代入してあげる
C++ではインスタンスをポインタを使ってnew,deleteを使用してください!
// オブジェクトのクラス
class Object
{
public:
float x,y,jump;
int width,height;
};
// 敵のクラス、オブジェクトクラスを継承
class CEnemy:public Object
{
public:
CEnemy(int x,int y,int width,int height);
~CEnemy(void);
// 敵の種類を挙列でわかりやすくする
enum Enemy_Type{
Main,
Sub1,
Sub2,
Sub3,
Sub4,
Sub5,
MAX_Enemy,
};
};
// ゲームの本体をクラスで扱う
class GameManager{
public:
void InitGame();
void DrawGame();
void ControlGame();
};
// ゲーム本体のクラスのインスタンスを生成
GameManager *GameMain;
// 敵のクラスのインスタンスを生成
// 配列を使うときは挙列でわかりやすくして表現する
CEnemy *Enemy[CEnemy::MAX_Enemy];
// 敵のコンストラクタを引数で用意をする
CEnemy::CEnemy(int x,int y,int width,int height)
{
this->x = x;
this->y = y;
this->width = width;
this->height = height;
}
// ゲーム本体を初期化する
void GameManager::InitGame()
{
// 敵を初期化するとき敵の種類を書いてnewでコンストラクタで初期化する
Enemy[CEnemy::Main] = new CEnemy(Enemy_Start_X,Enemy_Start_Y,Enemy_Width,Enemy_Height);
Enemy[CEnemy::Sub1] = new CEnemy(Enemy_Start_X+50,Enemy_Start_Y,Enemy_Width,Enemy_Height);
Enemy[CEnemy::Sub2] = new CEnemy(Enemy_Start_X+100,Enemy_Start_Y,Enemy_Width,Enemy_Height);
Enemy[CEnemy::Sub3] = new CEnemy(Enemy_Start_X+150,Enemy_Start_Y,Enemy_Width,Enemy_Height);
Enemy[CEnemy::Sub4] = new CEnemy(Enemy_Start_X+200,Enemy_Start_Y,Enemy_Width,Enemy_Height);
Enemy[CEnemy::Sub5] = new CEnemy(Enemy_Start_X+250,Enemy_Start_Y,Enemy_Width,Enemy_Height);
}
void GameManager::ControlGame()
{
// 敵の関数を呼ぶときは敵の種類のマックスの挙列でよんであげる
Enemy[CEnemy::MAX_Enemy]->Control();
}
void GameManager::DrawGame()
{
ClearDrawScreen();
Enemy[CEnemy::MAX_Enemy]->Draw();
}
// -------------------------------------------
// WinMain関数
// ------------------------------------------
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// 画面モードのセット
SetGraphMode( 960 , 600 , 32 ) ;
// DXライブラリの初期化
DxLib_Init();
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK );
GameMain->InitGame();
while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
GameMain->ControlGame();
GameMain->DrawGame();
// 裏画面の内容を表画面に反映
ScreenFlip();
}
DxLib_End();
// ソフトの終了
return 0;
}
<まとめ>
・敵やプレイヤーを配列でデータを持つときは挙列を使用して誰が見てもわかるように表現する
・配列にもマジックナンバーを使わないようにする
・配列は必ずっといっていいほどコンストラクタの引数を利用してデータを入れてあげる、その時の注意ですが、thisポインタを使用してください
・ newで敵をメモリ確保するときはなんの種類かを指定してnewをしてください