俄羅斯方塊程序框架建立流程_第1頁(yè)
俄羅斯方塊程序框架建立流程_第2頁(yè)
俄羅斯方塊程序框架建立流程_第3頁(yè)
俄羅斯方塊程序框架建立流程_第4頁(yè)
俄羅斯方塊程序框架建立流程_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、俄羅斯方塊程序框架建立流程目 錄一、創(chuàng)建win32項(xiàng)目2二、程序框架介紹5三、對(duì)程序代碼進(jìn)行修改72014年12月25日一、創(chuàng)建win32項(xiàng)目1. 【文件】à【新建】à【項(xiàng)目】2. 選擇【Visual C+】à【W(wǎng)in32項(xiàng)目】,輸入【名稱】、【位置】、【解決方案名稱】,點(diǎn)擊【確定】3. 點(diǎn)擊【下一步】4. 點(diǎn)擊【完成】(注:此處不要選擇空項(xiàng)目)5. 到此為止,就已經(jīng)建立好了一個(gè)win32項(xiàng)目6. 按Ctrl+F5,或點(diǎn)擊【調(diào)試】à【開始執(zhí)行(不調(diào)試)】運(yùn)行該程序二、程序框架介紹1. 主函數(shù)int APIENTRY _tWinMain() / 窗口相關(guān)M

2、yRegisterClass(hInstance); /注冊(cè)窗口CreateWindow(); /創(chuàng)建窗口ShowWindow(hWnd, nCmdShow); /顯示窗口UpdateWindow(hWnd); /更新窗口/ 主消息循環(huán):偵測(cè)消息,派發(fā)消息while (GetMessage(&msg, NULL, 0, 0)if (!TranslateAccelerator()TranslateMessage(&msg);DispatchMessage(&msg);Return 0;2. 消息處理函數(shù)WndProc(UINT message, WPARAM wParam

3、, LPARAM lParam)switch (message)case WM_CREATE:break;case WM_TIMER:break;case WM_LBUTTONDOWN:case WM_RBUTTONDOWN:break;case WM_KEYDOWN:switch(wParam)case VK_LEFT:break;default:break;break;case WM_PAINT:break;case WM_DESTROY:break;return 0;三、對(duì)程序代碼進(jìn)行修改1. 修改窗口標(biāo)題為“窗口示例”、初始位置為(400, 100),大小為(450, 600),樣式為

4、WS_SYSMENU。修改CreateWindow()函數(shù)的參數(shù),如下所示:hWnd = CreateWindow(szWindowClass, _T("窗口示例"), WS_SYSMENU, 400, 100, 450, 600, NULL, NULL, hInstance, NULL);2. 在窗口中畫一條豎線在WM_Paint中添加:MoveToEx(hdc, 300, 0, NULL);LineTo(hdc, 300, 600);3. 調(diào)整畫筆和畫刷的顏色和大小在WM_Paint中添加:/ 定義畫筆和畫刷HBRUSH hBrush;HPEN hPen;hBrush

5、= CreateSolidBrush(RGB(0, 0, 0);hPen = CreatePen(PS_SOLID, 3, RGB(0, 0, 0);/ 加載畫筆和畫刷SelectObject(hdc, hBrush);SelectObject(hdc, hPen);/繪制過(guò)程/釋放畫筆和畫刷DeleteObject(hBrush);DeleteObject(hPen);4. 在窗口中畫一個(gè)小方格在WM_Paint中添加:Rectangle(hdc, 100, 100, 130, 130);5. 在窗口中輸出文字在WM_Paint中添加:TextOut(hdc, 350, 300, _T(“文

6、字”), 2);6. 在窗口中輸出文字+變量在WM_Paint中添加:TCHAR str1024;int id, len;id = 3459;len = wsprintf(str, _T("ID:%d"), id);TextOut(hdc, 350, 400, str, len);7. 改變文字字體HFONT hFont;hFont = CreateFont(0, 0, 0, 0, 800, false, false, false, ANSI_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, PROOF_QUALIT

7、Y, FF_MODERN, (LPCWSTR)"Arial");SelectObject(hdc, hFont);SetBkMode(hdc, TRANSPARENT);TextOut(hdc, 350, 300, _T("文字"), 2);DeleteObject(hFont);8. 點(diǎn)擊鼠標(biāo)左鍵或右鍵時(shí)彈出方框“按鼠標(biāo)了”case WM_LBUTTONDOWN:case WM_RBUTTONDOWN:MessageBox(hWnd, _T("按鼠標(biāo)了"), _T("警告"), MB_OK);break;9. 按

8、方向鍵時(shí)彈出“按方向鍵了”,按空格鍵時(shí)彈出“按空格鍵了”,按F2時(shí)彈出“按F2了”,按S時(shí)彈出“按S了”,按1時(shí)彈出”按1了”,按其他鍵時(shí)談粗“反正你按鍵了”case WM_KEYDOWN:switch(wParam)case VK_LEFT:case VK_RIGHT:case VK_UP:case VK_DOWN:MessageBox(hWnd, _T("按方向鍵了"), _T("警告"), MB_OK);break;case VK_SPACE:MessageBox(hWnd, _T("按空格鍵了"), _T("警告&q

9、uot;), MB_OK);break;case VK_F2:MessageBox(hWnd, _T("按F2了"), _T("警告"), MB_OK);break;case 'S':MessageBox(hWnd, _T("按S了"), _T("警告"), MB_OK);break;case '1':MessageBox(hWnd, _T("按1了"), _T("警告"), MB_OK);break;default:MessageBox(hW

10、nd, _T("反正你按鍵了"), _T("警告"), MB_OK);break;break;10. 讓小黑方塊動(dòng)起來(lái)(以按向下鍵時(shí)方格往下移動(dòng)一格為例)基本思想:每按一次就調(diào)用InvalidateRect(hWnd, NULL, TRUE)函數(shù)將整個(gè)屏幕重繪一次,但下次繪制時(shí)方格的位置會(huì)發(fā)生變化。/ 定義一個(gè)方格寬度30像素,并作為基本單位#define GRID 30/ 表示方塊的位置int posX = 5, posY = 0;WndProc() case WM_KEYDOWN:switch(wParam)case VK_DOWN:posY+;In

11、validateRect(hWnd, NULL, TRUE);break; break;case WM_PAINT:Rectangle(hdc,posX*GRID,posY*GRID,(posX+1)*GRID,(posY+1)*GRID); break;11. 讓小黑方塊自動(dòng)動(dòng)起來(lái)基本思想:添加定時(shí)器消息/ 窗口創(chuàng)建時(shí)就添加一個(gè)定時(shí)器case WM_CREATE:SetTimer(hWnd, 1, 500, NULL);break;case WM_TIMER:posY+;InvalidateRect(hWnd, NULL, TRUE); break;12. 加載一張圖片case WM_PAI

12、NT:HBITMAP bmp;bmp = (HBITMAP)LoadImage(NULL, _T("bmp1.bmp"), IMAGE_BITMAP, 100, 100, LR_LOADFROMFILE);HDC hbuf;hbuf = CreateCompatibleDC(NULL);SelectObject(hbuf, bmp);BitBlt(hdc, (nGameWidth + 1) * GRID, (nGameHeight - 4) * GRID, 100, 100, hbuf, 0, 0, SRCCOPY);13. 加載一首音樂(lè)/ 頭文件添加#include &l

13、t;mmsystem.h>#pragma comment(lib,"winmm.lib")/ 代碼中添加PlaySound(_T("The_Dawn.wav"), NULL, SND_FILENAME|SND_ASYNC|SND_LOOP);14. 避免屏幕閃爍這里采用雙緩沖技術(shù),其基本思想是:先繪制到一個(gè)緩沖區(qū)里面,然后再把緩沖區(qū)里的內(nèi)容整體拷貝到屏幕上。具體原理在網(wǎng)上都可以找到,下面給出實(shí)現(xiàn)方法。1)禁止每次繪圖前都先擦除屏幕背景 ATOM MyRegisterClass(HINSTANCE hInstance) wcex.hbrBackgro

14、und = NULL; / 這里一定要設(shè)為NULL 2) 繪圖:先繪到內(nèi)存DC,再?gòu)膬?nèi)存DC拷貝到前臺(tái)DC HDC hdc, dcMem; HBITMAP bmpMem; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); /依附窗口DC創(chuàng)建兼容內(nèi)存DC dcMem = CreateCompatibleDC(hdc); /創(chuàng)建兼容位圖 bmpMem = CreateCompatibleBitmap(hdc,nWidth * GRID,nHeight * GRID); /將位圖選擇進(jìn)內(nèi)存DC SelectObject(dcMem, bmpMem); /

15、用白色填充內(nèi)存DC的客戶區(qū)hBrush = CreateSolidBrush(RGB(255, 255, 255); SelectObject(dcMem, hBrush); Rectangle(dcMem, 0, 0, nWidth * GRID,nHeight * GRID); / todo: 下面所有的繪圖都繪在內(nèi)存DC dcMem里面,而不是hdc里面 Rectangle(dcMem, i* GRID, j* GRID, (i + 1) * GRID,(j + 1) * GRID); / 將內(nèi)存DC dcMem上的圖像拷貝到前臺(tái)DC hdc里面 BitBlt(hdc, 0, 0, nWidth * GRID, nHeight * GRID, dcMem, 0, 0, SRCCOPY); / 刪除對(duì)象 DeleteObject(bmpMem); DeleteObject(dcMem);15. 函數(shù)的思想 C

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論