博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
加中实训第二天(笔记+代码) - 2013.5.29 (待完善)
阅读量:6903 次
发布时间:2019-06-27

本文共 2492 字,大约阅读时间需要 8 分钟。

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

准备工作:


 

和昨天差不多

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://kwldl.baihongyu.com/

你可能感兴趣的文章
完成注册功能
查看>>
职场规划从“试错”开始
查看>>
AtCoder - 2568 最小割
查看>>
Lucene5.x 中文 同义词
查看>>
【转载】Cookie/Session机制详解
查看>>
ASCII码、Unicode码 转中文
查看>>
java 不通过第三个字符串,实现一个字符串倒序
查看>>
map/reduce
查看>>
矩阵的相似对角化
查看>>
weixinJSDDK
查看>>
eclipse手动安装svn和maven
查看>>
权限管理 (二) 实现中几个问题
查看>>
安家博客园-准备迁移过往博客-发帖提醒自己-别偷懒别偷懒别偷懒!
查看>>
密码学经典之生日悖论与生日攻击【详解】
查看>>
算法题丨3Sum
查看>>
Android学习笔记33:Intent介绍及Intent在Activity中的使用方法
查看>>
java常用类--与用户互动
查看>>
day40-python多进程多线程-多线程实例和锁
查看>>
关于使用pip安装软件的存储库的问题-python
查看>>
Android Material Design-Getting Started(入门)-(一)
查看>>