俄罗斯方块程序框架建立流程.docx
- 文档编号:233983
- 上传时间:2022-10-07
- 格式:DOCX
- 页数:11
- 大小:774.61KB
俄罗斯方块程序框架建立流程.docx
《俄罗斯方块程序框架建立流程.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块程序框架建立流程.docx(11页珍藏版)》请在冰豆网上搜索。
俄罗斯方块程序框架建立流程
目录
一、创建win32项目 2
二、程序框架介绍 5
三、对程序代码进行修改 7
2014年12月25日
一、创建win32项目
1.【文件】à【新建】à【项目】
2.选择【VisualC++】à【Win32项目】,输入【名称】、【位置】、【解决方案名称】,点击【确定】
3.点击【下一步】
4.点击【完成】(注:
此处不要选择空项目)
5.到此为止,就已经建立好了一个win32项目
6.按Ctrl+F5,或点击【调试】à【开始执行(不调试)】运行该程序
二、程序框架介绍
1.主函数
intAPIENTRY_tWinMain()
{
//窗口相关
MyRegisterClass(hInstance);//注册窗口
CreateWindow();//创建窗口
ShowWindow(hWnd,nCmdShow);//显示窗口
UpdateWindow(hWnd);//更新窗口
//主消息循环:
侦测消息,派发消息
while(GetMessage(&msg,NULL,0,0))
{
if(!
TranslateAccelerator())
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Return0;
}
2.消息处理函数
WndProc(UINTmessage,WPARAMwParam,LPARAMlParam)
{
switch(message)
{
caseWM_CREATE:
…
break;
caseWM_TIMER:
…
break;
caseWM_LBUTTONDOWN:
caseWM_RBUTTONDOWN:
…
break;
caseWM_KEYDOWN:
switch(wParam)
{
caseVK_LEFT:
…
break;
default:
break;
}
break;
caseWM_PAINT:
…
break;
caseWM_DESTROY:
…
break;
}
return0;
}
三、对程序代码进行修改
1.修改窗口标题为“窗口示例”、初始位置为(400,100),大小为(450,600),样式为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中添加:
//定义画笔和画刷
HBRUSHhBrush;
HPENhPen;
hBrush=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(“文字”),2);
6.在窗口中输出文字+变量
在WM_Paint中添加:
TCHARstr[1024];
intid,len;
id=3459;
len=wsprintf(str,_T("ID:
%d"),id);
TextOut(hdc,350,400,str,len);
7.改变文字字体
HFONThFont;
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);
SetBkMode(hdc,TRANSPARENT);
TextOut(hdc,350,300,_T("文字"),2);
DeleteObject(hFont);
8.点击鼠标左键或右键时弹出方框“按鼠标了”
caseWM_LBUTTONDOWN:
caseWM_RBUTTONDOWN:
MessageBox(hWnd,_T("按鼠标了"),_T("警告"),MB_OK);
break;
9.按方向键时弹出“按方向键了”,按空格键时弹出“按空格键了”,按F2时弹出“按F2了”,按S时弹出“按S了”,按1时弹出”按1了”,按其他键时谈粗“反正你按键了”
caseWM_KEYDOWN:
switch(wParam)
{
caseVK_LEFT:
caseVK_RIGHT:
caseVK_UP:
caseVK_DOWN:
MessageBox(hWnd,_T("按方向键了"),_T("警告"),MB_OK);
break;
caseVK_SPACE:
MessageBox(hWnd,_T("按空格键了"),_T("警告"),MB_OK);
break;
caseVK_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(hWnd,_T("反正你按键了"),_T("警告"),MB_OK);
break;
}
break;
10.让小黑方块动起来(以按向下键时方格往下移动一格为例)
基本思想:
每按一次就调用InvalidateRect(hWnd,NULL,TRUE)函数将整个屏幕重绘一次,但下次绘制时方格的位置会发生变化。
//定义一个方格宽度30像素,并作为基本单位
#defineGRID30
//表示方块的位置
intposX=5,posY=0;
WndProc()
{
…
caseWM_KEYDOWN:
switch(wParam)
{
caseVK_DOWN:
posY++;
InvalidateRect(hWnd,NULL,TRUE);
break;
}
break;
caseWM_PAINT:
Rectangle(hdc,posX*GRID,posY*GRID,(posX+1)*GRID,(posY+1)*GRID);
break;
}
11.让小黑方块自动动起来
基本思想:
添加定时器消息
//窗口创建时就添加一个定时器
caseWM_CREATE:
SetTimer(hWnd,1,500,NULL);
break;
caseWM_TIMER:
posY++;
InvalidateRect(hWnd,NULL,TRUE);
break;
12.加载一张图片
caseWM_PAINT:
HBITMAPbmp;
bmp=(HBITMAP)LoadImage(NULL,_T("bmp1.bmp"),IMAGE_BITMAP,100,100,LR_LOADFROMFILE);
HDChbuf;
hbuf=CreateCompatibleDC(NULL);
SelectObject(hbuf,bmp);
BitBlt(hdc,(nGameWidth+1)*GRID,(nGameHeight-4)*GRID,100,100,hbuf,0,0,SRCCOPY);
13.加载一首音乐
//头文件添加
#include
#pragmacomment(lib,"winmm.lib")
//代码中添加
PlaySound(_T("The_Dawn.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
14.避免屏幕闪烁
这里采用双缓冲技术,其基本思想是:
先绘制到一个缓冲区里面,然后再把缓冲区里的内容整体拷贝到屏幕上。
具体原理在网上都可以找到,下面给出实现方法。
1)禁止每次绘图前都先擦除屏幕背景
ATOMMyRegisterClass(HINSTANCEhInstance){
…
wcex.hbrBackground=NULL;//这里一定要设为NULL
…
}
2)绘图:
先绘到内存DC,再从内存DC拷贝到前台DC
HDChdc,dcMem;
HBITMAPbmpMem;
caseWM_PAINT:
hdc=BeginPaint(hWnd,&ps);
//依附窗口DC创建兼容内存
DCdcMem=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:
下面所有的绘图都绘在内存DCdcMem里面,而不是hdc里面
Rectangle(dcMem,i*GRID,j*GRID,(i+1)*GRID,(j+1)*GRID);
…
//将内存DCdcMem上的图像拷贝到前台DChdc里面
B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 俄罗斯方块 程序 框架 建立 流程