/* main.c */ #include "global.h" #include #include "game.h" /* подключим все необходимые библиотеки */ #pragma comment(lib,"ddraw.lib") #pragma comment(lib,"dinput8.lib") #pragma comment(lib,"dsound.lib") #pragma comment(lib,"winmm.lib") /* имя класса окна */ static const TCHAR szWindowClassName[] = _T("WINCLASS1"); static const TCHAR szWindowTitle[] = _T("Batty"); /* глобальные переменные */ HINSTANCE ghInst; /* хендл приложения */ HWND ghWndMain; /* хендл окна */ int giDebug; /* флаг отладки */ /* функция окна */ static LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (msg) { case WM_CREATE: break; case WM_PAINT: hdc = BeginPaint(hWnd,&ps); EndPaint(hWnd,&ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd,msg,wParam,lParam); } return 0; } /* проверка версии операционной системы */ static int VersionCheck(void) { OSVERSIONINFO os; /* подготовим структуру и заполним ее */ memset(&os,0,sizeof(os)); os.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if (!GetVersionEx(&os)) return 1; /* возвратим результат проверки */ return (os.dwPlatformId == VER_PLATFORM_WIN32_NT) ? 0 : 1; } /* зарегестрируем клас окна и отобразим его */ static int InitializeApp(HINSTANCE hInst, int nCmdShow) { WNDCLASSEX wc; /* запомним хендл приложения */ ghInst = hInst; /* заполним структуру класса окна */ memset(&wc,0,sizeof(wc)); wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WindowProc; wc.hInstance = hInst; wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION); wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wc.lpszClassName = szWindowClassName; /* зарегистрируем класс окна */ if (!RegisterClassEx(&wc)) return 1; /* создадим окно */ ghWndMain = CreateWindowEx(0,szWindowClassName,szWindowTitle,WS_POPUP, 0,0,SCREEN_WIDTH,SCREEN_HEIGHT,NULL,NULL,hInst,NULL); if (!ghWndMain) return 1; /* отобразим окно */ ShowWindow(ghWndMain,nCmdShow); UpdateWindow(ghWndMain); return 0; } /* точка входа в программу */ int WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PTSTR lpCmdLine, int nCmdShow) { MSG msg; /* проверим версию операциооной системы */ if (VersionCheck()) { MessageBox(NULL,_T("Error check Windows."), _T("Error"),MB_OK|MB_ICONSTOP); return 1; } /* проверим флаг отладочной информации */ // if (!_tcscmp(lpCmdLine,_T("--debug"))) giDebug = 1; /* создадим и отобразим окно */ if (InitializeApp(hInst,nCmdShow)) { MessageBox(NULL,_T("Error start game."), _T("Error"),MB_OK|MB_ICONSTOP); return 1; } /* инициализация игры */ if (InitGame()) { ShutdownGame(); ShowWindow(ghWndMain,SW_HIDE); MessageBox(ghWndMain,_T("Error run game."), _T("Error"),MB_OK|MB_ICONSTOP); return 1; } /* главный цикл сообщений */ for(;;) { /* если есть сообщение, то обработаем его */ if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { /* проверим на завершение программы */ if (msg.message == WM_QUIT) break; /* отправим сообщение на обработку */ TranslateMessage(&msg); DispatchMessage(&msg); /* повторим выборку сообщения */ continue; } /* вызвать обработчик игры */ MainGame(); } /* деинициализация игры */ ShutdownGame(); return msg.wParam; }