第4回:敵をつくる
プレイヤーの基本プログラムがひととおりできましたので、敵キャラクラスの作成に移りましょう。敵キャラといっても、すべての敵が同じ動き・パターンでは、スペースインベーダーになってしまいます。ザコからボスまで様々なパターンを提供するためにも、CCharactorを基底とする敵キャラ共通クラス「CEnemyBase」を用意することにしましょう。今は全くと言っていいほど空の状態ですが、後々いろいろとクラスに修正を加えていきます。
#pragma once
#include "Charactor.h"
#define ENEMY_PRIORITY 60000
class CEnemyBase : public CCharactor
{
protected:
virtual void Init();
};
#include "EnemyBase.h"
void CEnemyBase::Init()
{
}

#pragma once
#include "EnemyBase.h"
class CEnemy1 : public CEnemyBase
{
public:
CEnemy1(float sx);
private:
int frame, animframe;
bool left;
float accel_x;
protected:
virtual void Init();
virtual void Exec();
};
#include "Enemy.h"
CEnemy1::CEnemy1(float sx)
{
this->x = sx;
}
void CEnemy1::Init()
{
CEnemyBase::Init();
sprite.SetTexture((CTexture*)FindItemBox("zakotex"));
sprite.SetSpriteSize(32, 32);
frame = 0;
animframe = 0;
y = -16.0f;
accel_x = 0.0f;
left = (x < 320.0f);
}
void CEnemy1::Exec()
{
y += 3.0f;
x += accel_x;
if(left == true){
accel_x += 0.05f;
}else{
accel_x -= 0.05f;
}
if(y > 640.0f + 16.0f || x < -16.0f || x > 640.0f + 16.0f)
{
// 画面外に出たら消去
RemoveObject(this);
return;
}
frame++;
if(frame >= 10){
animframe++;
if(animframe > 5) animframe = 0;
frame = 0;
sprite.SetFrame(animframe);
}
sprite.Draw(x, y);
}
game.AppendObject(new CTaskHead(), 0, true);
game.AppendObject(new CTaskTail(), INT_MAX, true);
CTexture *etex = new CTexture(_T("data\\zako.png"));
game.AppendItemBox("zakotex", etex);
game.AppendObject(etex, 1000, true);
game.AppendObject(new CEnemy1(50.0f), ENEMY_PRIORITY, true);
ShowWindow(mainWnd, nCmdShow);