你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:文章管理 / 本期精品文章
射击类游戏《小魔女》中窗口的创建与编程
 

余来

摘 要 本文将讲解射击类游戏《小魔女》制作的剩余部分。通过对游戏对象的控制、数据的更新、碰撞检测、画图和难度设置等方面系统的详细讲解,读者可以了解射击类游戏制作的各个环节,制作自己喜欢的射击类游戏。

关键词 DirectDraw,碰撞检测,类,画图,难度设置

一、创建游戏

       本讲仍然采用上一讲中的游戏窗口框架。切换到资源视图,将主对话框按Del键删除掉,然后切换到文件视图中,将对话框关联的两个文件删除掉(默认为CMyDlg.hCMyDlg.cpp)。接着切换到CMyApp类的实现文件中,将所有关于CMyDlg代码删除。最后切换到工程目录中,将主对话框关联的两个文件删除(默认为CMyDlg.hCMyDlg.cpp)删除。

    在创建窗口中,上一讲将窗口类和DirectDraw放到一个类中,因此显得比较乱,本讲将窗口创建部分独立开来,窗口类仍然用CWnd为基类,将窗口创建部分放到CWinApp类的初始化函数InitInstance中完成,然后为窗口类添加一个功能函数,用来将先前封装好的DirectDraw和当前窗口关联起来,因此,需要在当前窗口类中,包含My_DirectDraw.h头文件引用封装好的My_DirectDraw类,接下来具体完成这个窗口类的创建 

首先创建一个基于MFC框架的类,类名用“GameWnd”,它的基类为generic Cwnd,然后单击确定创建这个窗口类。

 

       在使用GameWnd类时,需要包含一些头文件,如游戏中要用到的类对象以及封装好的DirectDraw和一些常量定及结构等,实现的核心代码如下:

      

#include "MyMusicPlay.h" 

#include "ESGirl.h"

#include <mmsystem.h>

#include "EneMy.h"

#include <list>

 

#define DEFENEMY_SPEED 3                         //敌人默认速度

#define DEFENEMY_BULLET_SPEED 5                //敌人默认子弹速度

#define DEFENEMY_LIFE_COUNT 10                  //敌人默认生命值

#define DEFCLOUD_SPEED         2                   //默认云移动速度

#define DEF_MAX_ENEMY_COUNT 10;                     //默认一次允许最多出现敌人数

 

struct dxdata

{

       int m_style;          // 1表示敌人,2表示子弹,3表示云

       EneMy  m_enemy;    //敌人

       Bullet m_bullet;   //子弹

       Cloud  m_cloud;    //

};

 

       MyMusicPlay是先前封装好的DirectShow,因此需要将该类用到的头文件以及实现文件插入到当前工程来。可以直接将上一章的MyMusicPlay.hMyMusicPlay.cpp文件直接复制过来,然后在VC的文件视图中,将这两个文件插入到工程即可。

 

       ESGirl.h是小魔女对象的头文件,其中还包含了云对象 (Cloud),子弹对象(Bullet)mmsystem.h是调用sndPlaySound函数播放声音时必须包含的一个头文件。Enemy.h是敌人对象的头文件,最后的listSTL中链表的头文件。

 

       结构dxdata包含三个主要对象的结构。游戏运行中,需要将各个活动对象添加到同一个链表中,而一个链表只能添加一种类型变量,所以需要将BulletEneMyCloud这三个对象全部组合在一个结构中,以实现不同对象添加到同一个链表中。

       结构成员m_style是标志该结构具体是什么对象,为1时,表示该结构代表的是敌人这个对象;2表示是子弹对象;3表示云对象。

      

       完成了这些基本数据的定义后,接着还需要创建主窗口GameWnd。切换到CMyApp类中,包含GameWnd.h这个头文件,再切换到CMyApp类的初始化函数InitInstance中,创建窗口。核心代码如下:

 

GameWnd * pgw=new GameWnd;

pgw->CreateEx(0,AfxRegisterWndClass(0,0,HBRUSH(GetStockObject(BLACK_BRUSH)),0),"小魔女",WS_POPUP,0,0,800,600

,NULL,NULL,NULL);

m_pMainWnd=pgw;

pgw->ShowWindow(SW_NORMAL);

pgw->UpdateWindow();

 

  推荐精品文章

·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 
·2023年7月目录
·2023年6月目录 
·2023年5月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089