俄罗斯方块程序框架建立流程Word文档格式.docx
- 文档编号:13164334
- 上传时间:2022-10-07
- 格式:DOCX
- 页数:11
- 大小:774.61KB
俄罗斯方块程序框架建立流程Word文档格式.docx
《俄罗斯方块程序框架建立流程Word文档格式.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块程序框架建立流程Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
intAPIENTRY_tWinMain()
{
//窗口相关
MyRegisterClass(hInstance);
//注册窗口
CreateWindow();
//创建窗口
ShowWindow(hWnd,nCmdShow);
//显示窗口
UpdateWindow(hWnd);
//更新窗口
//主消息循环:
侦测消息,派发消息
while(GetMessage(&
msg,NULL,0,0))
if(!
TranslateAccelerator())
{
TranslateMessage(&
msg);
DispatchMessage(&
}
}
Return0;
2.消息处理函数
WndProc(UINTmessage,WPARAMwParam,LPARAMlParam)
switch(message)
caseWM_CREATE:
…
break;
caseWM_TIMER:
caseWM_LBUTTONDOWN:
caseWM_RBUTTONDOWN:
caseWM_KEYDOWN:
switch(wParam)
{
caseVK_LEFT:
…
break;
default:
}
caseWM_PAINT:
caseWM_DESTROY:
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.调整画笔和画刷的颜色和大小
//定义画笔和画刷
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.在窗口中画一个小方格
Rectangle(hdc,100,100,130,130);
5.在窗口中输出文字
TextOut(hdc,350,300,_T(“文字”),2);
6.在窗口中输出文字+变量
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.点击鼠标左键或右键时弹出方框“按鼠标了”
MessageBox(hWnd,_T("
按鼠标了"
),_T("
警告"
),MB_OK);
break;
9.按方向键时弹出“按方向键了”,按空格键时弹出“按空格键了”,按F2时弹出“按F2了”,按S时弹出“按S了”,按1时弹出”按1了”,按其他键时谈粗“反正你按键了”
switch(wParam)
caseVK_LEFT:
caseVK_RIGHT:
caseVK_UP:
caseVK_DOWN:
MessageBox(hWnd,_T("
按方向键了"
break;
caseVK_SPACE:
按空格键了"
caseVK_F2:
按F2了"
case'
S'
:
按S了"
1'
按1了"
default:
反正你按键了"
10.让小黑方块动起来(以按向下键时方格往下移动一格为例)
基本思想:
每按一次就调用InvalidateRect(hWnd,NULL,TRUE)函数将整个屏幕重绘一次,但下次绘制时方格的位置会发生变化。
//定义一个方格宽度30像素,并作为基本单位
#defineGRID30
//表示方块的位置
intposX=5,posY=0;
WndProc()
…
caseVK_DOWN:
posY++;
InvalidateRect(hWnd,NULL,TRUE);
break;
Rectangle(hdc,posX*GRID,posY*GRID,(posX+1)*GRID,(posY+1)*GRID);
break;
11.让小黑方块自动动起来
添加定时器消息
//窗口创建时就添加一个定时器
SetTimer(hWnd,1,500,NULL);
posY++;
InvalidateRect(hWnd,NULL,TRUE);
break;
12.加载一张图片
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<
mmsystem.h>
#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;
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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 俄罗斯方块 程序 框架 建立 流程