俄罗斯方块程序框架建立流程_第1页
俄罗斯方块程序框架建立流程_第2页
俄罗斯方块程序框架建立流程_第3页
俄罗斯方块程序框架建立流程_第4页
俄罗斯方块程序框架建立流程_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、yRegisterClass(hInstance); /注册窗口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

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

4、WS_SYSMENU。修改CreateWindow()函数的参数,如下所示: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

5、= CreateSolidBrush(RGB(0, 0, 0);hPen = CreatePen(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(“文

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. 点击鼠标左键或右键时弹出方框“按鼠标了”case WM_LBUTTONDOWN:case WM_RBUTTONDOWN:MessageBox(hWnd, _T("按鼠标了"), _T("警告"), MB_OK);break;9. 按

8、方向键时弹出“按方向键了”,按空格键时弹出“按空格键了”,按F2时弹出“按F2了”,按S时弹出“按S了”,按1时弹出”按1了”,按其他键时谈粗“反正你按键了”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. 让小黑方块动起来(以按向下键时方格往下移动一格为例)基本思想:每按一次就调用InvalidateRect(hWnd, NULL, TRUE)函数将整个屏幕重绘一次,但下次绘制时方格的位置会发生变化。/ 定义一个方格宽度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. 让小黑方块自动动起来基本思想:添加定时器消息/ 窗口创建时就添加一个定时器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. 加载一首音乐/ 头文件添加#include &l

13、t;mmsystem.h>#pragma comment(lib,"winmm.lib")/ 代码中添加PlaySound(_T("The_Dawn.wav"), NULL, SND_FILENAME|SND_ASYNC|SND_LOOP);14. 避免屏幕闪烁这里采用双缓冲技术,其基本思想是:先绘制到一个缓冲区里面,然后再把缓冲区里的内容整体拷贝到屏幕上。具体原理在网上都可以找到,下面给出实现方法。1)禁止每次绘图前都先擦除屏幕背景 ATOM MyRegisterClass(HINSTANCE hInstance) wcex.hbrBackgro

14、und = NULL; / 这里一定要设为NULL 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); /

15、用白色填充内存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里面 BitBlt(hdc, 0, 0, nWidth * GRID, nHeight * GRID, dcMem, 0, 0, SRCCOPY); / 删除对象 DeleteObject(bmpMem); DeleteObject(dcMem);15. 函数的思想 C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论