微軟提供幾種編程語言可以寫Windows窗口應用程序,比如C/C++,VB,C#等。Windows下要學習遊戲窗口編寫,一定離不開Windows API的使用。
1、安裝窗口編譯環境
推薦VS(VS2008,VS2010,VS2015,VS2013,VS2017),MSDN文檔。
2、安裝幫助文檔MSDN
3、C/C++語言編程
4、掌握Windows編程
編寫Windows程序一般有兩種:一種是MFC編程(C++);一種是Win32編程(C+Windows API調用方式)。
5、窗口交互界麵
Windows編程兩部分:Windows下的交互界麵編程;深入理解Windows運行機製、內存管理和核心對象。
框架——Windows是一個消息驅動的係統
窗口——窗口管理,比如創建、銷毀、重繪、透明處理技術等
控件——包括Windows窗口上的各種控件的使用和管理。
外設——包括鼠標、鍵盤、打印機等、串/並口。
GDI——繪製各種Windows GDI對象,比如字體、位圖、畫筆、畫刷等
6、Windows核心編程
Windows內部運行機製。
內核對象——包括進程、線程、高度、同步等技術
內存管理——包括Windows係統的虛擬內存管理、地址空間、內存映射等
動態鏈接庫——包括動態庫原理、創建等
異常處理機製——結構化異常處理、異常鏈、錯誤與恢複。
二、Windows遊戲動作技能入門

//---------------------------------------------------------------------------------------
//
// 程序名稱:Windows遊戲入門動作技能
//
// 編譯環境:Visual Studio 2013
//
// 文件名稱:Game.cpp
//
// 開發作者:張三
//
// 創建日期:2017-04-03
//
// 修改日期:2017-04-03 By 李四
//
//---------------------------------------------------------------------------------------
#include<Windows.h>
#include<tchar.h>
#pragmacomment(lib,"winmm.lib") // 調用PlaySound()函數所需要的庫文件
#defineWINDOW_WIDTH 800
#defineWINDOWS_HEIGHT 600
#defineWINDOW_TITEL L"Windows遊戲編程入門:動作技能"
// 聲明全局變量--------------------------------------------------------------------
HDC g_hdc = NULL, g_mdc = NULL; // 全局設備環境句柄/全局內存DC句柄HB
HBITMAP g_hSprite[12]; // 聲明位圖數組來存儲每一張人物的圖片
DWORD g_tPre = 0, g_tNow = 0; // 記錄上一次繪圖的時間/記錄本次準備繪圖時間
int g_iNum = 0; // 記錄目前顯示的圖片編號
// 聲明全局函數--------------------------------------------------------------------
LRESULTCALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); // 窗口過程函數
BOOL Init_Game(HWND hwnd); // 資源初始化
VOID Paint_Game(HWND hwnd); // 繪製遊戲圖片
BOOL CleanUp_Game(HWND hwnd); // 清理資源
// WinMain():Windows應用程序的入口函數
intWINAPI WinMain(HINSTANCEhInstance, HINSTANCEhPrevInstance, LPSTRlpCmdLine, intnShowCmd)
{
// 窗口類
WNDCLASSEX wndclass = { 0 };
wndclass.cbSize = sizeof(WNDCLASSEX); // 設置結構體字節數大小
wndclass.style = CS_HREDRAW | CS_VREDRAW; // 設置窗口的樣式
wndclass.lpfnWndProc = WndProc; // 設置指向窗口過程函數的指針
wndclass.cbClsExtra = 0; // 窗口類附加內存,一船情況下直接取0即可
wndclass.cbWndExtra = 0; // 窗口附加內存,依然取0即可
wndclass.hInstance = hInstance; // 包含窗口過程的程序實例句柄
wndclass.hIcon = (HICON)::LoadImage(NULL, L"GAME.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE|LR_LOADFROMFILE);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);// 指定窗口類的光標句柄
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL; // 用一個以空終止的字符串,指定菜單資源名稱
wndclass.lpszClassName = L"GameGDI";
// 注冊窗口類
if (!RegisterClassEx(&wndclass))
return -1;
// 創建窗口
HWND hwnd = CreateWindow(L"GameGDI", WINDOW_TITEL, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, WINDOW_WIDTH, WINDOWS_HEIGHT, NULL, NULL, hInstance, NULL);
// 顯示更新
MoveWindow(hwnd, 250, 80, WINDOW_WIDTH, WINDOWS_HEIGHT, true);
ShowWindow(hwnd, nShowCmd);
UpdateWindow(hwnd);
// 遊戲資源初始化
if (!Init_Game(hwnd))
{
MessageBox(hwnd, L"遊戲資源初始化失敗", L"錯誤", 0);
returnFALSE;
}
PlaySound(L"仙劍·重樓.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
// 消息循環
MSG msg = { 0 };
while (msg.message != WM_QUIT) // 使用while循環,如果消息不是WM_QUIT消息,繼續循環
{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) // 查看應用程序消息隊列,有消息時將隊列中的消息發出去
{
TranslateMessage(&msg); // 將虛擬鍵消息轉換成字符消息
DispatchMessage(&msg); // 分發一個消息窗口
}
else
{
g_tNow = GetTickCount();
if (g_tNow - g_tPre >= 100)
Paint_Game(hwnd);
}
}
// 窗口注銷
UnregisterClass(L"GameGDI", wndclass.hInstance);// 程序準備結束,注銷窗口類
return 0;
}
// 窗口過程函數
LRESULTCALLBACK WndProc(HWNDhwnd, UINTmessage, WPARAMwParam, LPARAMlParam)
{
switch (message)
{
caseWM_DESTROY: // 窗口銷毀消息
CleanUp_Game(hwnd); // 進行退出前的資源清理
PostQuitMessage(0); // 向係統表明線程有終止請求
break;
default:
returnDefWindowProc(hwnd, message, wParam, lParam);
}
return 0; // 正常退出
}
// 資源初始化
BOOL Init_Game(HWNDhwnd)
{
g_hdc = GetDC(hwnd);
wchar_t filename[20];
// 加載每個人物
for (int i = 0; i < 12; i++)
{
memset(filename, 0, sizeof(filename));
swprintf_s(filename, L"%d.bmp", i);
g_hSprite[i] = (HBITMAP)LoadImage(NULL, filename, IMAGE_BITMAP, 800, 600, LR_LOADFROMFILE);
}
g_mdc = CreateCompatibleDC(g_hdc); // 建立兼容設備環境的內存DC
Paint_Game(hwnd);
returnTRUE;
}
// 繪製遊戲圖片
VOID Paint_Game(HWNDhwnd)
{
if (g_iNum == 11) // 判斷是否超過最大圖片編號,若超過最大圖片編號10,則直接重新設置0
g_iNum = 0;
SelectObject(g_mdc, g_hSprite[g_iNum]);
// 把圖片按編號貼圖到窗口當中
BitBlt(g_hdc, 0, 0, 800, 600, g_mdc, 0, 0, SRCCOPY);
g_tPre = GetTickCount();
g_iNum++;
}
// 清除資源
BOOL CleanUp_Game(HWNDhwnd)
{
// 釋放資源對象
for (int i = 0; i < 12; i++)
DeleteObject(g_hSprite[i]);
DeleteDC(g_mdc);
ReleaseDC(hwnd, g_hdc);
returnTRUE;
}
這是今天的內容,希望大家有所收獲,學有所成,寫出屬於自己的程序!!!
如果對這方麵有興趣的可以加群:379249575,大家一起學習交流。
群內還有更多學習資料、視頻,免費課......
相關資訊
最新熱門應用
抹茶交易所官網app
其它軟件137MB
下載
抹茶交易所app
其它軟件137MB
下載
中安交易所官網
其它軟件58.84MB
下載
熱幣全球交易所app蘋果
其它軟件38.33MB
下載
歐聯交易所app
其它軟件34.95 MB
下載
bitstamp交易所
其它軟件223.89MB
下載
幣行交易所app安卓版
其它軟件11.97MB
下載
zbx交易平台
其它軟件32.73 MB
下載
鏈一交易所
其它軟件94.15MB
下載
易付幣交易所官網安卓版
其它軟件108.01M
下載