背景をクラス化してみる
まずは、背景の描画をクラスにしてみます。
クラスにする方法がわかった後で、ちゃんと設計をしてみましょう。
クラスにするだけなら手順を踏めば簡単です。
では、クラスを作ってみます。
CDrawBack というクラスを作って中に背景描画の関数をメンバ関数として定義します。
おおざっぱにこんな感じです。
class CDrawBack
{
public:
int m_TestHensu;
int m_TestMem();
CDrawBack();
virtual ~CDrawBack();
void BDraw(CDC* pDC)
{
CBitmap Bitmap;
int back[7][12]={
{2,2,2,2,1,1,1,1,2,2,2,2}, // 1=草
{1,1,1,1,2,2,2,2,1,1,1,1}, // 2=木
{1,1,1,1,1,1,1,1,1,1,1,1}, // 3=岩
{1,1,1,1,1,1,1,1,4,4,4,4}, // 4=水
{1,1,3,1,1,1,1,1,4,4,4,4},
{1,3,3,3,1,1,1,1,1,4,4,4},
{3,3,3,3,3,1,1,1,1,1,1,1} };
int i,j;
CDC DC;
DC.CreateCompatibleDC(0);
Bitmap.LoadBitmap(IDB_BITMAP1);
DC.SelectObject(&Bitmap);
for(i=0;i<=6;i++)
for(j=0;j<=11;j++)
pDC->BitBlt( j * 32, // 転送先X
i* 32, // 転送先Y
32,32, // 幅、高さ
&DC, // コピー先DC
(back[i][j] -1 ) * 32 ,0, // 転送元X
SRCCOPY); // 転送元Y
}
};
rpgView.cpp の頭の方(他のinclude ファイルの最後に)
#include "drawback.h"
の1行を追加します。
これでCDrawBack クラスを使うことができます。
クラスはいろんな場所からアクセスできるように関数の外に定義します。
CRpgView::CRpgView() 関数の上あたりに
CDrawBack DrawBack1;
の1行を追加します。
コンストラクタはまだ無いのでこれでオブジェクトが出来ました。
////////////////////////////////////////////////////////
// CRpgView クラスの描画
void CRpgView::OnDraw(CDC* pDC)
上の関数の中に
DrawBack1.BDraw(pDC);
の1行を追加します。
コンパイルして動かしてみましょう
ふつうの関数で背景を書いたときと同じように表示出来ればOKです。
うーん、ただ単にクラスにしただけ、という感じでむなしいですね。
次の課題は充実したクラスの設計です。