俄罗斯方块程序框架建立流程

上传人:鲁** 文档编号:474227109 上传时间:2022-08-13 格式:DOCX 页数:11 大小:774.67KB
返回 下载 相关 举报
俄罗斯方块程序框架建立流程_第1页
第1页 / 共11页
俄罗斯方块程序框架建立流程_第2页
第2页 / 共11页
俄罗斯方块程序框架建立流程_第3页
第3页 / 共11页
俄罗斯方块程序框架建立流程_第4页
第4页 / 共11页
俄罗斯方块程序框架建立流程_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《俄罗斯方块程序框架建立流程》由会员分享,可在线阅读,更多相关《俄罗斯方块程序框架建立流程(11页珍藏版)》请在金锄头文库上搜索。

1、俄罗斯方块程序框架建立流程目 录一、创建win32项目2二、程序框架介绍5三、对程序代码进行修改72014年12月25日一、创建win32项目1. 【文件】【新建】【项目】2. 选择【Visual C+】【Win32项目】,输入【名称】、【位置】、【解决方案名称】,点击【确定】3. 点击【下一步】4. 点击【完成】(注:此处不要选择空项目)5. 到此为止,就已经建立好了一个win32项目6. 按Ctrl+F5,或点击【调试】【起先执行(不调试)】运行该程序二、程序框架介绍1. 主函数int APIENTRY _tWinMain() / 窗口相关MyRegisterClass(hInstance

2、); /注册窗口CreateWindow(); /创建窗口ShowWindow(hWnd, nCmdShow); /显示窗口UpdateWindow(hWnd); /更新窗口/ 主消息循环:侦测消息,派发消息while (GetMessage(&msg, NULL, 0, 0)if (!TranslateAccelerator()TranslateMessage(&msg);DispatchMessage(&msg);Return 0;2. 消息处理函数WndProc(UINT message, WPARAM wParam, LPARAM lParam)switch (message)case

3、 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;三、对程序代码进行修改1. 修改窗口标题为“窗口示例”、初始位置为(400, 100),大小为(450, 600),样式为WS_SYSMENU。修改CreateWindow()函数的参数,如下所

4、示: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. 调整画笔和画刷的颜色和大小在WM_Paint中添加:/ 定义画笔和画刷HBRUSH hBrush;HPEN hPen;hBrush = CreateSolidBrush(RGB(0, 0, 0);hPen = CreatePen

5、(PS_SOLID, 3, RGB(0, 0, 0);/ 加载画笔和画刷SelectObject(hdc, hBrush);SelectObject(hdc, hPen);/绘制过程/释放画笔和画刷DeleteObject(hBrush);DeleteObject(hPen);4. 在窗口中画一个小方格在WM_Paint中添加:Rectangle(hdc, 100, 100, 130, 130);5. 在窗口中输出文字在WM_Paint中添加:TextOut(hdc, 350, 300, _T(“文字”), 2);6. 在窗口中输出文字+变量在WM_Paint中添加:TCHAR str1024

6、;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_QUALITY, FF_MODERN, (LPCWSTR)Arial);SelectObject(hdc, hFont);SetBk

7、Mode(hdc, TRANSPARENT);TextOut(hdc, 350, 300, _T(文字), 2);DeleteObject(hFont);8. 点击鼠标左键或右键时弹出方框“按鼠标了”case WM_LBUTTONDOWN:case WM_RBUTTONDOWN:MessageBox(hWnd, _T(按鼠标了), _T(警告), MB_OK);break;9. 按方向键时弹出“按方向键了”,按空格键时弹出“按空格键了”,按F2时弹出“按F2了”,按S时弹出“按S了”,按1时弹出”按1了”,按其他键时谈粗“反正你按键了”case WM_KEYDOWN:switch(wParam

8、)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(警告), 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,

9、 _T(按1了), _T(警告), MB_OK);break;default:MessageBox(hWnd, _T(反正你按键了), _T(警告), MB_OK);break;break;10. 让小黑方块动起来(以按向下键时方格往下移动一格为例)基本思想:每按一次就调用InvalidateRect(hWnd, NULL, TRUE)函数将整个屏幕重绘一次,但下次绘制时方格的位置会发生变更。/ 定义一个方格宽度30像素,并作为基本单位#define GRID 30/ 表示方块的位置int posX = 5, posY = 0;WndProc() case WM_KEYDOWN:switch(

10、wParam)case VK_DOWN:posY+;InvalidateRect(hWnd, NULL, TRUE);break; break;case WM_PAINT:Rectangle(hdc,posX*GRID,posY*GRID,(posX+1)*GRID,(posY+1)*GRID); break;11. 让小黑方块自动动起来基本思想:添加定时器消息/ 窗口创建时就添加一个定时器case WM_CREATE:SetTimer(hWnd, 1, 500, NULL);break;case WM_TIMER:posY+;InvalidateRect(hWnd, NULL, TRUE);

11、 break;12. 加载一张图片case WM_PAINT: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. 加载一首音乐/

12、头文件添加#include #pragma comment(lib,winmm.lib)/ 代码中添加PlaySound(_T(The_Dawn.wav), NULL, SND_FILENAME|SND_ASYNC|SND_LOOP);14. 避开屏幕闪耀这里采纳双缓冲技术,其基本思想是:先绘制到一个缓冲区里面,然后再把缓冲区里的内容整体拷贝到屏幕上。详细原理在网上都可以找到,下面给出实现方法。1)禁止每次绘图前都先擦除屏幕背景 ATOM MyRegisterClass(HINSTANCE hInstance) wcex.hbrBackground = NULL; / 这里肯定要设为NULL

13、2) 绘图:先绘到内存DC,再从内存DC拷贝到前台DC HDC hdc, dcMem; HBITMAP bmpMem; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); /依附窗口DC创建兼容内存DC dcMem = CreateCompatibleDC(hdc); /创建兼容位图 bmpMem = CreateCompatibleBitmap(hdc,nWidth * GRID,nHeight * GRID); /将位图选择进内存DC SelectObject(dcMem, bmpMem); /用白色填充内存DC的客户区hBrush = CreateSolidBrush(RGB(255, 255, 255); SelectObject(dcMem, hBrush); Rectangle(dcMem, 0, 0, nWidth * GRID,nHeight * GRID); / todo: 下面全部的绘图都绘在内存DC dcMem里面,而不是hdc里面 Rectangle(dcMem, i* GRID, j* GRID, (i + 1) * GRID,(j + 1) * GRID); / 将内存DC dcMem上的图像拷贝到前台DC hdc里面 B

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号