マス目を画像を並べて表示する
画像をタイルのように並べるには、for文を使うとうまく出来ます。今回は32×32サイズのグラフィックを用います。横に並べようとした場合、1枚目を描画したら2枚目をその32ドット右に描画、3枚目はさらに32ドット右に...という風に描画します。縦方向も同じです。ボードは8×8とします。
まずはマス目の画像をロードし、1枚だけ描画してみます。マス目に使用する画像はいくつか種類がありますので、配列を使ってハンドルを格納します。今回の画像のロードに使う関数は前回のものとは異なります。詳しくは本家サイトの関数リファレンスを。
この画像を使用します。
bord.bmp
まずはマス目の画像をロードし、1枚だけ描画してみます。マス目に使用する画像はいくつか種類がありますので、配列を使ってハンドルを格納します。今回の画像のロードに使う関数は前回のものとは異なります。詳しくは本家サイトの関数リファレンスを。
この画像を使用します。
bord.bmp
game.cpp
グローバル変数の本体と描画関数を書き足します。グローバル変数の名前はBordGraphicとし、要素数は4とします。文字は消さないでおきます。
...
int BordGraphic[4];
// ゲームの関数
// 戻り値 なし 引数 なし
void Game(){
DrawGraph(0,0,BordGraphic[0],FALSE);
DrawString(100,200,"ゲーム画面です",white);
DrawString(100,220,"Zでクリア画面",white);
DrawString(100,240,"Xでリタイア",white);
...
}
main.h
グローバル変数の外部変数宣言を書き足します。
... extern int GameState; // ゲームの状態を格納する変数 extern int Key[256]; // キーの押下時間を格納する配列 extern int white; // 白の[[カラーコード]]を格納する extern int BordGraphic[4]; // マス目のグラフィック extern int TitleGraphic; // タイトルのグラフィックハンドル ...
main.cpp
画像を読み込みます。
...
int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
...
TitleGraphic = LoadGraph("picture/title_back.bmp"); // タイトルの画像を読み込む
LoadDivGraph("picture/bord.bmp",4,4,1,32,32,BordGraphic);
...
実行してみてください。タイトル画面からゲーム画面に進むと、左上に1マスだけ表示されると思います。次はこれを8×8マス表示してみましょう。
game.cpp
文字の表示位置も変えました。
...
void Game(){
for(int y=0 ; y<8 ; y++){
for(int x=0 ; x<8 ; x++){
DrawGraph(x*32+50,y*32+100,BordGraphic[0],FALSE);
}
}
DrawString(400,200,"ゲーム画面です",white);
DrawString(400,220,"Zでクリア画面",white);
DrawString(400,240,"Xでリタイア",white);
if( Key[KEY_INPUT_Z] == 1 ) // Zキーが押されたらゲームを始める
GameState = 2;
if( Key[KEY_INPUT_X] == 1 ) // Zキーが押されたらゲームを始める
GameState = 3;
}
全て同じ画像ですが、並べて表示することが出来ました。
添付ファイル