Windows 2d遊戲開發
下面的程式碼是GDI遊戲開發的核心框架,我也是按書上碼下來,記錄下來作為參考
//--------------------------程式說明-----------------------------
//程式名稱:GDIdemo
//描述:GDI繪圖模版
//---------------------------------------------------------------
//------------------------標頭檔案部分------------------------------
#include<Windows.h>
//可以在此區域繼續新增標頭檔案
//--------------------------------------------------------------------
//------------------------巨集定義-------------------------------------
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
#define WINDOW_TITLE L"GDI程式框架"
//-------------------------------------------------------------------
//----------------------全域性變數宣告部分-----------------------------
HDC g_hdc = NULL;//全域性裝置環境控制程式碼
//----------------全域性函式宣告部分---------------------------------------
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);//視窗過程函式
BOOL Game_Init(HWND hwnd);//在此函式進行資源初始化
VOID Game_Paint(HWND hwnd);//在此函式進行繪圖程式碼的書寫
BOOL Game_CleanUp(HWND hwnd);//在此函式進行資源的清理
//--------------------WinMain---------------------------------------
//Windows應用程式的入口函式
//---------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
//[1]視窗建立四部曲之一:開始設計一個完整的視窗類
WNDCLASSEX wc = {};//用WNDCLASSEX定義了一個視窗類
wc.cbSize = sizeof(WNDCLASSEX);//設定結構體的位元組數大小
wc.style = CS_HREDRAW | CS_VREDRAW;//設定視窗的樣式
wc.lpfnWndProc = WndProc;//設定指向視窗過程的指標
wc.cbClsExtra = 0;//視窗類的附加記憶體
wc.cbWndExtra = 0;//視窗的附加記憶體
wc.hInstance = hInstance;//制定包含視窗過程的程式的例項控制程式碼
wc.hIcon = (HICON)::LoadImage(NULL, L"", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);//本地載入自定義圖示“”
wc.hCursor = LoadCursor(NULL, IDC_ARROW);//指定視窗類的游標控制程式碼
wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);//指定一個灰色畫刷控制程式碼
wc.lpszClassName = L"WINDOW";//用一個空終止的字串,指定視窗類的名字
wc.lpszMenuName = NULL;//用一個空終止的字串,指定選單資源的名字
//[2]視窗的建立四部曲之二:註冊視窗類
if (!RegisterClassEx(&wc))//設計完視窗,需要對視窗類進行註冊,這樣才能建立該型別的視窗
return -1;
//[3]視窗建立四部曲之三:正式建立視窗
HWND hwnd = CreateWindow(L"WINDOW", WINDOW_TITLE, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hInstance, NULL);
//視窗建立四部曲之四:視窗的移動,顯示與更新
MoveWindow(hwnd, 250, 80, WINDOW_WIDTH, WINDOW_HEIGHT, true);//調整視窗顯示時的位置位於(250,80)處
ShowWindow(hwnd, nShowCmd);//呼叫showwindow來顯示視窗
UpdateWindow(hwnd);//隊視窗進行更新
//遊戲資源的初始化,若初始化失敗彈出一個訊息框並返回FALSE
if (!Game_Init(hwnd))
{
MessageBox(hwnd, L"初始化資源失敗", L"訊息視窗", 0);//使用MESSASGEBOX建立一個訊息視窗
return FALSE;
}
//【5】訊息迴圈
MSG msg = { 0 };//定義並初始化msg
while (msg.message != WM_QUIT)//使用while迴圈,如果訊息不是wm-quit訊息,就繼續迴圈
{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))//檢視應用程式訊息佇列,有訊息時就將佇列中的訊息派發出去
{
TranslateMessage(&msg);//將虛擬訊息轉換為字元訊息
DispatchMessage(&msg);//分發一個訊息給視窗程式
}
}
//[6]視窗類的登出
UnregisterClass(L"WINDOW", wc.hInstance);//程式準備結束登出視窗類
return 0;
}
//-----------------------------WinProc函式-----------------------------------------
//對視窗訊息進行處理
//---------------------------------------------------------------------------------
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT paintStruct;//定義一個paintstruct來記錄繪製資訊
switch (message)//switch程式開始
{
case WM_PAINT://若是客戶區重繪訊息
g_hdc = BeginPaint(hwnd, &paintStruct);//指定視窗進行繪圖工作的準備,並將和繪圖有關的資訊填充到painstruct結構體中去
Game_Paint(hwnd);
EndPaint(hwnd,&paintStruct);//指定視窗的繪畫過程結束
ValidateRect(hwnd, NULL);//更新客戶區的顯示
break;
case WM_KEYDOWN://鍵盤按下訊息
if (wParam==VK_ESCAPE)//如果按下esc
DestroyWindow(hwnd);//銷燬視窗併傳送wm-destroy訊息
break;
case WM_DESTROY://若是視窗銷燬資訊
Game_CleanUp(hwnd);
PostQuitMessage(0);//向系統表明有個執行緒有終止請求。用來響應WM_DESTROY訊息
break;//跳出該switch語句
default://若上述case條件都不符合,則執行default語句
return DefWindowProc(hwnd, message, wParam, lParam);//呼叫預設的視窗過程
}
return 0;//正常退出
}
//-------------------------【Game_Init】
BOOL Game_Init(HWND hwnd)
{
g_hdc = GetDC(hwnd);
Game_Paint(hwnd);
ReleaseDC(hwnd, g_hdc);
return TRUE;
}
//-------------------------【Game_Paint】
VOID Game_Paint(HWND hwnd)
{
}
//-----------------------------[Game_CleanUp]
BOOL Game_CleanUp(HWND hwnd)
{
return TRUE;
}
相關文章
- 《Unity 2D與3D手機遊戲開發實戰》簡介Unity3D遊戲開發
- 開發Windows貪吃蛇遊戲——(一)前期準備Windows遊戲
- 遊戲開發入門(一)遊戲開發概述遊戲開發
- 2D遊戲如何提升遊戲體驗? 2D關卡設計的六大正規化遊戲
- NFT遊戲系統開發/遊戲開發技術遊戲開發
- 遊戲開發流程遊戲開發
- Python遊戲開發工程師的起步,幾款遊戲開發案例Python遊戲開發工程師
- pygame開發小遊戲GAM遊戲
- 【IDL】開發遊戲"2048"開發遊戲
- 悠遊世界/遊戲/系統技術開發/悠遊世界養成遊戲開發解析遊戲開發
- 遊戲開發原理——手遊開發團隊與成本遊戲開發
- Unity遊戲示例來了,用Unity開源遊戲資源做遊戲,遊戲開發不再難!Unity遊戲開發
- 遊戲開發中遊戲效能的最佳化遊戲開發
- 【Unity3D開發小遊戲】《戰棋小遊戲》Unity開發教程Unity3D遊戲
- 遊戲開發商與遊戲發行商如何保持良性關係?遊戲開發
- DApp遊戲系統開發APP遊戲
- 吃豆人遊戲開發遊戲開發
- 遊戲開發與設計遊戲開發
- 實戰Flash遊戲開發遊戲開發
- 遊戲開發第6天遊戲開發
- python可以開發遊戲嗎Python開發遊戲
- [Unity3D] 2D畫素遊戲(一) Hello Unity!Unity3D遊戲
- 在 2D 橫向卷軸遊戲裡上下樓梯遊戲
- 鏟子騎士:2D遊戲,3D引擎打造遊戲3D
- 我用 GitHub 9.8k 的 Go 語言 2D 遊戲引擎寫了個遊戲GithubGo遊戲引擎
- 旺旺農場遊戲NFT系統開發|NFT農場遊戲開發搭建方案遊戲開發
- 從零點五開始用Unity做半個2D戰棋小遊戲(一)Unity遊戲
- 悠遊世界合成遊戲系統技術開發解析/合成遊戲/小遊戲遊戲
- Dapp智慧合約遊戲鏈遊開發丨智慧合約遊戲鏈遊系統開發案例版APP遊戲
- islandswap鏈遊系統開發(開發說明)丨islandswap鏈遊遊戲系統開發功能遊戲
- GameFi鏈遊NFT遊戲開發示例丨GameFi鏈遊遊戲系統開發特點丨DEFI丨nftGAM遊戲開發
- NFT遊戲鏈遊系統開發技術詳細丨NFT遊戲鏈遊DAPP開發原始碼模式遊戲APP原始碼模式
- GameFi/NFT鏈遊遊戲系統技術開發/GameFi鏈遊開發/NFTGAM遊戲
- Gamefi鏈遊系統開發(DAPP遊戲開發)丨Gamefi鏈遊系統開發(開發案例)丨原始碼GAMAPP遊戲開發原始碼
- Java遊戲開發——連連看Java遊戲開發
- 微信小遊戲開發(1)遊戲開發
- 微信小遊戲開發(2)遊戲開發
- 微信小遊戲開發(3)遊戲開發
- Flutter Flame遊戲開發上手(1)Flutter遊戲開發