久しぶりにゲームを作ろうと思います。6年ぶりなので久しぶりどころじゃないけど。この6年で、覚えたことは忘れちゃったし、そもそも時代が変わってるので、新たな気持ちでゼロから勉強です。
せっかくなので、開発日誌をつけていこうと思います。ちなみに開発環境は、
WindowsXP SP3
DirectX9.0c
Visual Studio 2008 Express Edition with SP1
C++
で行きます。
まずはウィンドウを表示する処理を作ります。WindowsのプログラムはWinMain()からですね。最近はUnicode対応の関係から_tWinMain()とかいうのが定義されてるみたいだけど、とりあえず今まで通りで。
ここの処理はもう定型文みたいなものですね。描画はDirectXにやらせるので、以下のソースコードではウィンドウ内には何も表示されません。
次はフレームレートかな、それともDirectX Graphicsに進んだ方がいいかな。
//--------------------------------------------------------- // メイン #include "windows.h" #define WINDOW_NAME "開発テスト" #define APP_NAME "devtest" // システムメッセージの処理 LRESULT WINAPI WndProc(HWND, UINT, WPARAM, LPARAM); //--------------------------------------------------------- // アプリケーション開始 INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT) { RECT rect={0, 0, 640, 480}; MSG msg; // ウィンドウクラスを登録する WNDCLASSEX wc={sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, APP_NAME, NULL}; RegisterClassEx(&wc); // アプリケーションのウィンドウを作成する AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, FALSE, NULL); HWND hWnd=CreateWindow(APP_NAME, WINDOW_NAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, (rect.right-rect.left), (rect.bottom-rect.top), GetDesktopWindow(), NULL, wc.hInstance, NULL); // 独自の処理★ // ウィンドウ表示 ShowWindow(hWnd, SW_SHOWDEFAULT); UpdateWindow(hWnd); // メッセージループ ZeroMemory(&msg, sizeof(msg)); while (msg.message!=WM_QUIT) { if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { // 独自の処理★ } } return 0; } //--------------------------------------------------------- // システムメッセージの処理 LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_ACTIVATE: // ウィンドウがアクティブになった // 独自の処理★ return 0; case WM_KEYDOWN: switch (wParam) { case VK_ESCAPE: // 強制終了 DestroyWindow(hWnd); return 0; } break; case WM_DESTROY: // ウィンドウが閉じられた // 独自の処理★ PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, msg, wParam, lParam); }