盛り上がってまいりました。
今日はビットマップを表示するところまで組んでみました。
tiles.cpp の役割としてはひたすらビットマップを表示するだけです。今回は画面サイズのビットマップをそのまま表示しているだけですが、完成する頃には 4×4 のタイルをひとつずつブロック転送して表示させる予定です。
また、本来表示させたい座標を2次元配で保持し、現在の座標から少しずつ修正するようにしてアニメーションを実現します。
詳しくは「 15 パズルを作る(第9夜) – 空白のマスに隣接するタイルをスライドさせる」を参照してください。
#ifndef __TILES_H__ #define __TILES_H__ #include <windows.h> #define SCREEN_WIDTH 640 #define SCREEN_HEIGHT 480 #define TILE_NUM_X 4 #define TILE_NUM_Y 4 #define BITMAP_FILE "sample.bmp" typedef struct tagTile { int posX; int posY; } TILE, *PTILE; void InitializeTiles(HWND); void UpdateTiles(); void DrawTiles(HDC); #endif
#include "tiles.h" static HDC hMemory; static HBITMAP hBitmap; void InitializeTiles(HWND hWindow) { // ビットマップファイルの読み込み HDC hdc = ::GetDC(hWindow); ::hMemory = ::CreateCompatibleDC(hdc); ::hBitmap = (HBITMAP)::LoadImage(NULL, TEXT(BITMAP_FILE), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); ::SelectObject(::hMemory, ::hBitmap); ::ReleaseDC(hWindow, hdc); } void UpdateTiles() { } void DrawTiles(HDC hdc) { ::BitBlt(hdc, 0, 0, 640, 480, ::hMemory, 0, 0, SRCCOPY); }
Contributions