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

上传人:wj 文档编号:1225035 上传时间:2023-04-30 格式:DOCX 页数:11 大小:774.61KB
下载 相关 举报
俄罗斯方块程序框架建立流程.docx_第1页
第1页 / 共11页
俄罗斯方块程序框架建立流程.docx_第2页
第2页 / 共11页
俄罗斯方块程序框架建立流程.docx_第3页
第3页 / 共11页
俄罗斯方块程序框架建立流程.docx_第4页
第4页 / 共11页
俄罗斯方块程序框架建立流程.docx_第5页
第5页 / 共11页
俄罗斯方块程序框架建立流程.docx_第6页
第6页 / 共11页
俄罗斯方块程序框架建立流程.docx_第7页
第7页 / 共11页
俄罗斯方块程序框架建立流程.docx_第8页
第8页 / 共11页
俄罗斯方块程序框架建立流程.docx_第9页
第9页 / 共11页
俄罗斯方块程序框架建立流程.docx_第10页
第10页 / 共11页
俄罗斯方块程序框架建立流程.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

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

目录

一、创建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里面

BitBlt(hdc,0,0,nWidth*GRID,nHeight*GRID,dcMem,0,0,SRCCOPY);

//删除对象

DeleteObject(bmpMem);

DeleteObject(dcMem);

15.函数的思想

−CanMoveLeft()//判断是否可以往左移动

−CanMoveRight()//判断是否可以往右移动

−CanMoveDown()//判断是否可以往下移动

−MoveDown()//往下移动

−MoveLeft()//往左移动

−MoveRight()//往右移动

−DeleteLines()//消行

−DrawScree()//绘制屏幕

−DropDownDirectly()//直接下落到底部

−FixOnScreen()//停靠在屏幕上

−Restart()//重新开始

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2