マス目を画像を並べて表示する
画像をタイルのように並べるには、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; }
全て同じ画像ですが、並べて表示することが出来ました。
添付ファイル