クラスまみれのゲームプログラミング入門

第1回:プレイヤーを画面に表示する

 第1回目からはゲーム主人公となるプレイヤー戦闘機のクラスを作成することにします。

 シューティングゲームでは基本的な物体として、プレイヤーと敵の2つに分けられます。しかし、どちらも「物体」という点では共通していますので、共通のクラスを作成してから、その派生クラスとしてプレイヤークラスを用意することにしましょう。今のところ、グラフィックを格納するCSpriteクラスと、グラフィックの描画位置変数があれば、キャラクターの基本処理はまかなえるでしょう。

Charactor.h
#pragma once

#include "GameDef.h"

class CCharactor : public CGameObject
{
public:
	CCharactor();

protected:
	CSprite sprite;
	float x, y;

public:
	float GetPosX(){ return x; }
	float GetPosY(){ return y; }
};

Charactor.cpp
#include "Charactor.h"

CCharactor::CCharactor()
{
	x = y = 0.0f;
}

 CCharactorクラスの派生として、CPlayerクラスを作成します。プレイヤーのテクスチャデータは、CPlayerにしか適用されないため、CPlayerクラス内で完結させても問題ないでしょう。そのため、スプライトデータの初期化はコンストラクタで行っています。

Player.h
#pragma once

#include "Charactor.h"

#define PLAYER_PRIORITY 50000

class CPlayer : public CCharactor
{
public:
	CPlayer();

private:
	CTexture tex_player;

protected:
	virtual void Init();
	virtual void Exec();
};

Player.cpp
#include "Player.h"

CPlayer::CPlayer()
{
	tex_player.Load(_T("data\\player.png"));

	sprite.SetTexture(&tex_player);
	sprite.SetSpriteSize(64, 64);
}

void CPlayer::Init()
{
	x = 320.0f;
	y = 400.0f;
}

void CPlayer::Exec()
{
	sprite.Draw(x, y);
}


企業サイトや人気サイトの運用実績多数!月額1,500円の高スペックレンタルサーバーヘテムル

 ソースコードがあるフォルダ内に新規フォルダ「data」を作成して、以下の画像ファイルをダウンロードしてください(もちろん、あなたが作ったオリジナルのグラフィックでもかまいません)。


player.png

 画像の用意が完了したら、winmain.cppに次のコードを追加します。

winmain.cpp
#include "GameDef.h"
#include "Task.h"

// プレイヤークラスのインクルードを忘れずに!
#include "Player.h"

/* 省略 */

int APIENTRY _tWinMain
(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 LPTSTR lpszCmdLine, int nCmdShow)
{
	/* 省略 */

	CGameObject game;
	CoInitialize(NULL);
	game.Initialize(mainWnd, hInstance);
	CSound::CreateDirectSound(mainWnd);

	game.AppendObject(new CTaskHead(), 0, true);
	game.AppendObject(new CTaskTail(), INT_MAX, true);

	// この一行を追加
	game.AppendObject(new CPlayer(), PLAYER_PRIORITY, true);

	ShowWindow(mainWnd, nCmdShow);

	/* 省略 */
}

 作成したソースコードをコンパイル・実行してみてください。player.pngの位置が正しければ、以下の画像のような結果となります。