zoukankan      html  css  js  c++  java
  • 加中实训第二天(笔记+代码) 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是文件名,注意文件名中间不要有空格

  • 相关阅读:
    MFC菜单、工具栏和状态栏
    MFC控件
    MFC对话框
    MFC消息映射机制
    性能优化可使用的工具
    常见的内存问题分析思路
    k8s之Probe
    docker swarm
    keepalived配置虚拟ip(vip)实现双机热备以及自动切换主备
    linux安装openjdk1.8
  • 原文地址:https://www.cnblogs.com/yym2013/p/3107144.html
Copyright © 2011-2022 走看看