今天演示了拼图,走迷宫等小游戏实现过程。
准备工作:
和昨天差不多
1.
New->Win32 Application(Pintu) //创建一个项目
2.
New->HeaderFile(game.h)->#include <afxwin.h> //后面用到的所有父类都在这里面
3.
New->ResourceScript(game.rc) //在项目里创建一个资源文件
4.
Project->setting->General
在MicrosoftFoundationClasses栏目里选择 Use MFC in a Static Library //使用MFC静态链接库
5.
View->classWizard
//注意:如果这个选项是灰的,说明项目的建立有问题。
//重新建立项目,看看New一个新文件的时候是否在Add to project打上勾。
//如果没打勾,创建的头文件资源文件等不会自动加入到项目中。
调整好后,依次点“是”->Ok->Ok
6.
Insert->New class
在Class type里选择Generic Class
在Name里填写GameApp
在Base class里添加CWinApp public //表示CWinApp是GameApp的基类 //注意CWinApp类早就定义好了,就在afxwin.h头文件里
这样就创建了一个GameApp类,VC会自动生成一个GameApp.h文件(类声明)和GameApp.cpp文件(类实现)
7.
继续创建一个GameWnd类
Insert->New class
在Class type里选择MFC Class //注意和上一个不一样
在Name里填写GameWnd
在Baseclass里添加CFrameWnd public
准备工作完成,开始写代码吧!
下面创建一个窗口,也和昨天一样。
1.
打开GameApp.h
添加成员函数 BOOL InitInstance();
2.
打开GameApp.cpp
添加:
GameApp theapp;
BOOL GameApp::InitInstance() //BOOL必须用大写,用bool会出错
{
m_pMainWnd=new GameWnd; //内存里申请一块空间,把空间首地址给前面的指针
}
3.
因为上一步用到了GameWnd的构造函数,所以
打开GameWnd.cpp
在GameWnd::GameWnd()里添加为
GameWnd::GameWnd()
{
Create(NULL,"拼图"); //窗口的名称,标题栏
}
4.
打开InitInstance
继续添加为
BOOL GameApp::InitInstance()
{
m_pMainWnd=new GameWnd; //内存里申请一块空间,把空间首地址给前面的指针
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return true;
}
5.
在GameApp.cpp里添加头文件
#include "GameWnd.h" //因为用到了new GameWnd
6.
打开GameWnd.h
将类声明里面默认的protected:改为public:
7.
打开GameWnd.cpp
注释掉#include "stdafx.h"
//#include "stdafx.h"
窗口创建完成,下面开始在这个窗口上设计游戏。
1.右键GameWnd->Add Windows Message Hardler (添加一个句柄)->VM_PAINT(绘画的句柄)
//这里简单说一下思路:是将图片先从外存(硬盘)->内存 ; 内存->显存 ; 显存->屏幕 .
2.双击GameWnd,添加变量
private:
CBitmap* bitmap; //存放位图地址
CDC* mdc; //设备缓冲区(显存)
3.=>GameWnd::GameWnd() //构造函数
GameWnd::GameWnd()
{
Create(NULL,"拼图");
bitmap=new CBitmap;
mdc=new CDC;
CClientDC dc(this); //当前窗口
mdc->CreateCompatibleDC(&dc); //在mdc里再创建一个临时缓冲区
}
重点:加载图片
外存->内存:
bitmap->m_hObject=LoadImage(NULL,"1.bmp",IMAGE_BITMAP,100,100,LR_LOADFROMFILE);
// 当前图片的句柄 加载图片 图片类型(位图) 显示尺寸
内存->显存:
mdc->SelectObject(bitmap); //把图片送到设备缓冲区上
显存->屏幕:
=>GameWnd::OnPaint() 中添加
dc.BitBlt(0,0,100,100,mdc,0,0,SRCCOPY);
// 从窗口的左上角显示 从图片的左上角显示
4.
=>GameWnd::GameWnd()在Create后面插入
this->SetWindowPos(NULL,0,0,300,300,0);
5.
右键GameWnd 单击 Add Windows Message Hardler 添加VM_KEYDOWN
=>Onkey Down
6.
接下来在 GameWnd::OnKeyDown 里写算法实现代码。
重点:加音乐
=>GameWnd.cpp
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
=>GameWnd() 的Create之后
mciSendString("play 4.mp3",0,0,0); //4.mp3是文件名,注意文件名中间不要有空格