呓语 | 杨英明的个人博客

专注于c++、Python,欢迎交流

By

加中实训第二天(笔记+代码) - 2013.5.29 (待完善)

今天演示了拼图,走迷宫等小游戏实现过程。

准备工作:


 

和昨天差不多

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是文件名,注意文件名中间不要有空格

 

##原创声明 **转载请注明:[呓语](http://www.yangyingming.com) » [加中实训第二天(笔记+代码) - 2013.5.29 (待完善)](http://www.yangyingming.com/article/335)**