C++设计扫雷游戏报告Word文档下载推荐.docx
《C++设计扫雷游戏报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C++设计扫雷游戏报告Word文档下载推荐.docx(43页珍藏版)》请在冰点文库上搜索。
![C++设计扫雷游戏报告Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/990b8224-60e3-46d0-9b4d-f8d6a5ddf934/990b8224-60e3-46d0-9b4d-f8d6a5ddf9341.gif)
能够显示主菜单和界面;
能够接收鼠标输入功能;
能够根据规则翻转相应的格子;
能够标记指定格子的功能;
游戏胜负判断功能;
英雄榜记录更新;
游戏支持背景音乐功能;
游戏提供帮助说明。
实训分工安排
本程序由两人共同完成
其中**同学主要负责程序代码编写调试的工作;
***同学主要负责游戏界面设计的工作;
要求
两人合作完成同一项目
分工合作后汇总进行统一测试与更正
使用VisualC++6.0实现用户界面
使用实训室及主要设施设备
L4B305
联想商用电脑
D2527
联想Y460
实训成果
1完成了此次实训容
2完成了实训报告
3提高了自己的合作能力以及编程能力
摘要
游戏业发展一日千里,该行业极大的影响和改变了人们的生活和娱乐方式,游戏为消费者提供丰富多彩的虚拟空间,使消费者可以自由自在的享受虚拟世界的乐趣,实现自己在现实生活着那个可能永远不能实现的梦想,满足了消费者的心理和精神需求。
扫雷游戏是Windows操作系统自带的一个小游戏,过去的几年里Windows操作系统历经数次换代,变得越来越庞大、复杂,但这个可爱的小游戏在任何版本的Windows操作系统里去却依然保持着原貌。
但几乎每个电脑使用者都接触过它,并且深爱着这款小游戏。
扫雷游戏是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法和语言实现,如C,C++,VB,JAVA等。
本论文研究的是以VisualC++6.0为开发环境,设计并开发一款扫雷游戏,其功能类似于Windows操作系统自带的扫雷游戏。
论文首先介绍了制作游戏的整体思路及整个游戏设计的流程规划,然后介绍了雷区的布置及地雷随机产生的实现方法;
重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为最要,鼠标事件是利用鼠标所发出的信息了解使用者的意图,进而做出相对应的动作,而清除未靠近地雷区方块由于引进了“递归”这个概念而使其简单化。
关键字:
扫雷;
VisualC++6.0;
事件;
递归
I
Abstract
Gameindustrydevelopsbyleapsandbounds,andithasagreatimpactonthewaypeopleliveandentertainment,gamesprovideconsumerswithavarietyofvirtualspace,sothatconsumerscanenjoythefreefunofthevirtualworld,achievethedreamthatmayneverachieveinreallife,andsatisfythepsychologicalandspiritualneedsconsumer.
TheSweepMineGameisasmallgamethattheWindowsoperatingsystemhave.OverthepastfewyearstheWindowsoperatingsystemhasexperiencedanumberofchang,andbecomemuchlargerandmorecomplexed.However,thislovelygameinanyversionoftheWindowsoperatingsystemhaskeeptheoriginalappearance.Almosteverycomputerusershavecomeintocontactwithit,andlovethisgame.
TheSweepMineGameisanclassicallittlegame,andtherearemanywayscanachieveit,wecanusemanydifferentalgorithmsandlanguages,suchasC,C++,VB,JAVAandsoon.ThisstudyisbasedonVisualC++6.0todesignedandmadethesweepminegame,it’sfunctionissimilartothegamethattheWindowsoperatingsystemhas.Firstweintroducedthewholeideaofmakingthegameandtheprocessplanningofthegamedesign,thenintroducedthemethodofthelayoutofminefieldsandminesrandomlygenerated.Andfocusesontheprocessofdealingwiththeincidentinthegame,amongthem,themouseeventsandclearanceofunexplodedlandminesaroundtheboxarethetwomostimportantthing,themouseeventsistousethemessagethatthemousegivetounderstandthetheuser'
sintent,thenmakethecorrespondingaction,andclearanceofunexplodedlandminesaroundtheboxhasbecamesimplywiththeintroductionofthe"
recursive"
.
Keywords:
SweepMine,;
VisualC++6.0;
Affairs,;
Recursion
Ⅱ
摘要·
·
Abstract·
1引言
1.1系统概述
我所设计的扫雷游戏包含以下功能:
1.2需求分析
随着世界经济的长足发展和计算机技术的日益成熟,计算机被应用到人类活动的各个领域,各种应用软件也相继问世,这其中有相当一部分是游戏软件。
使用游戏软件自然是为了满足人们对娱乐性的要求,而有些软件大都采用3D设计对系统配置的要求较高。
在众多游戏软件中,也不乏一些小游戏的身影,它们对系统的配置要求较低。
能够满足人们对娱乐性的需求,是人们在完成工作娱乐时候的最好选择。
在各种操作系统中都附带了一些小的游戏,而这些游戏也成为电脑用户软件中不可或缺的一部分。
扫雷游戏是比较经典的一款小游戏,过去的几年里Windows操作系统历经数次换代,变得越来越庞大、复杂,但这个可爱的小游戏在任何版本的Windows操作系统里去却依然保持着原貌。
作为本系统的开发工具,MicrosoftVisualC++6.0成为首选。
它具有可视化的编程界面、详细的提示、以及完善的帮助文档,使得软件开发人员感到无比的亲切感。
1.3运行环境
Intel®
Pentium®
2及以上的处理器,32M以上存,20M以上硬盘空间。
Microsoft®
WindowsTM22000或XP以上操作系统。
800×
600或以上的屏幕分辨率。
2概要设计
2.1设计思路
在设计之前,我们先来了解这款游戏的规则:
在不打开任何藏有地雷的格子情况下,以最快的速度找出所有的地雷。
如果在打开格子的过程中,不小心翻开(踩到)藏有地雷的格子,则宣告失败(游戏结束),惟有将所有不含地雷的格子打开,游戏才算成功。
游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的格子按下左键时即表示翻开格子,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则格子会以未标示→标示→疑似三者关系不断循环。
游戏者可以通过地雷区的数字提示了解以数字为中心的其周边八个格子所含的地雷数,假若翻开的格子显示数字“3”,则表示以其为中心的周边格子藏有3个地雷。
当按下的格子不是地雷,且周边八个格子也都没有地雷时,格子会以被翻开格子的八个方向将空白格子翻开。
2.2模块功能介绍
游戏共由四个类和一个模块组成,如图1所示。
Ø
主界面对话框类:
主要负责主界面、菜单及各个窗口类对象的创建和调用等处理。
扫雷窗口类:
主要负责接收玩家鼠标输入的打开格子位置、格子变换、花费时间及地雷格子的显示等处理。
英雄榜对话框类:
主要负责游戏等级记录的更新。
背景音乐播放模块:
主要负责游戏中背景音乐的播放。
帮组对话框类:
主要负责帮助提示的显示及其它显示功能。
图1游戏主要类结构
2.3模块结构图
2.3.1游戏主界面的设计
扫雷的游戏主界面设计,如图2所示。
图2设计的游戏主界面
2.3.2游戏主菜单结构的设计
扫雷的游戏菜单设计,如图3所示。
图3设计的游戏菜单结构
2.4程序流程图
扫雷游戏程序流程图,如图4所示。
图4程序流程图
2.5功能设计分工
我和***同学一组。
我主要负责程序代码的编写运行和调试等;
***同学主要负责位图设计、界面设计等。
3详细设计
3.1游戏菜单的实现
在扫雷游戏中,通过如下几个步骤即可实现添加游戏的菜单。
(1)在扫雷游戏工程的资源中添加一个菜单资源,其属性如表1所示。
(2)给每个菜单栏添加响应函数到CMineDlg类中。
(3)菜单响应函数的实现,如代码1所示。
表1主菜单属性
ID
类别
说明
IDR_MAIN_MENU
弹出菜单
游戏的主菜单
IDR_START_GAME
菜单栏
开始游戏
IDR_EXIT_GAME
退出游戏
IDR_PLAY_MUSIC
选择菜单
播放音乐
IDR_HELP
帮助
IDR_ABOUT
关于
代码1菜单响应函数的实现
BEGIN_MESSAGE_MAP(CMineDlg,CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//菜单资源与函数映射表
ON_COMMAND(IDR_ABOUT,OnAbout)
ON_COMMAND(IDR_EXIT_GAME,OnExitGame)
ON_COMMAND(IDR_HELP,OnHelp)
ON_COMMAND(IDR_PLAY_MUSIC,OnPlayMusic)
ON_COMMAND(IDR_START_GAME,OnStartGame)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOLCMineDlg:
:
OnInitDialog()//初始化对话框
{
CDialog:
OnInitDialog();
m_bStart=1;
//设置游戏状态
InitMenu();
//初始化菜单
returnTRUE;
//初始化成功
}
//省略部分代码
voidCMineDlg:
OnOK()//单击“确认”按钮响应函数
OnOK();
OnCancel()//单击“退出”按钮响函数
OnCancel();
OnAbout()//关于菜单栏响应函数
CAboutDlgdlg;
//创建关于对话框
dlg.DoModal();
//弹出关于对话框
OnExitGame()//退出菜单栏响应函数
//调用基类退出函数
OnHelp()//帮助菜单栏响应函数
CHelpDlgdlg;
//创建帮助对话框
//弹出帮助对话框
OnPlayMusic()//背景音乐菜单栏响应函数
CWnd*pMain=AfxGetMainWnd();
CMenu*pMenu=pMain->
GetMenu();
//判断播放音乐菜单当前状态
BOOLbCheck=(BOOL)pMenu->
GetMenuState(IDR_PLAY_MUSIC,MF_CHECKED);
if(m_bStart)
{
if(bCheck)
{
pMenu->
CheckMenuItem(IDR_PLAY_MUSIC,
MF_BYCOMMAND|MF_UNCHECKED);
}
else
MF_BYCOMMAND|MF_CHECKED);
PlayBackMusic(!
bCheck);
//调用播放背景音乐功能函数
}
OnStartGame()
mine.StartGame();
//调用游戏开始接口函数
InitMenu()//初始化菜单函数
pMenu->
CheckMenuItem(IDR_PLAY_MUSIC,MF_BYCOMMAND|MF_UNCHECKED);
3.2游戏帮助对话框的实现
扫雷游戏中的帮助是使用一个对话框来实现的。
其实现步骤如下。
(1)添加一个对话框资源到工程中,并填写说明文字,如图5所示。
图5帮助对话框
(2)编写一个CHelpDlg对话框类,主要是加载IDD_HELP对话框资源。
通过资源中的文字说明对游戏操作方法进行描述。
同时只包含单击“知道了”按钮的响应函数。
其类声明如代码2所示。
代码2CHelpDlg对话框类声明
#if!
defined(AFX_HELPDLG_H__)
#defineAFX_HELPDLG_H__
//HelpDlg.hCHelpDlg类声明头文件
//CHelpDlgdialog对话框类
classCHelpDlg:
publicCDialog//公共继承于CDialog类
public:
CHelpDlg(CWnd*pParent=NULL);
//构造函数
//对话框资源
enum{IDD=IDD_HELP_DLG};
//加载资源
//重载函数
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport
protected:
virtualvoidOnOK();
//单击“确定”按钮响应函数声明
DECLARE_MESSAGE_MAP()
};
#endif
(3)CHeroDlg对话框类的实现,需要实现对话框类的构造函数、析构函数和“知道了”按钮响应函数,其代码如代码3所示。
代码3对话框类的实现
//HelpDlg.cpp:
implementationfile
#include"
stdafx.h"
//插入头函数
Mine.h"
HelpDlg.h"
//插入类声明头文件
//CHelpDlgdialog对话框类实现
CHelpDlg:
CHelpDlg(CWnd*pParent/*=NULL*/)//构造函数
:
CDialog(CHelpDlg:
IDD,pParent)
voidCHelpDlg:
DoDataExchange(CDataExchange*pDX)
DoDataExchange(pDX);
BEGIN_MESSAGE_MAP(CHelpDlg,CDialog)
//CHelpDlgmessagehandlers消息响应函数
OnOK()//单击“知道了”按钮响应函数
3.3游戏英雄榜对话框的实现
扫雷游戏英雄榜的实现,分为如下步骤:
(1)创建一个资源对话框,并添加响应的控件,如图6所示。
图6英雄榜对话框资源
(2)配置(setup.ini)文件格式如下:
[HERO]
Name=XXX
Time=0
(3)添加CHeroDlg类,其中需要包含IDD_HERO_DLG对话框资源和“设置可写记录标志”接口函数声明,用于外部函数调用时,设置是否对配置文件进行写操作。
类的声明如代码4所示。
代码4CHeroDlg类的声明
defined(AFX_HERODLG_H__)
#defineAFX_HERODLG_H__
//HeroDlg.h头文件
//CHeroDlgdialog
classCHeroDlg:
publicCDialog
voidSetWriteFlg(BOOLbflg);
//接口函数,设置可记录标志变量
CHeroDlg(CWnd*pParent=NULL);
//standardconstructor构造函数
enum{IDD=IDD_HERO_LIST};
CStringm_name;
//保存变量
intm_time;
//保存时间变量
public:
virtualintDoModal();
//弹出对话框函数声明
//单击“久仰”按钮响应函数声明
private:
BOOLm_bWriteflg;
//记录标志变量
(4)CHeroDlg类的实现过调用系统API函数,来对配置文件进行读写操作。
而“设置读写标志”接口函数,是对类的一个成员变量m_bWrite进行赋值操作,达到写入或者读取的区分。
其代码如代码5所示。
代码5CHeroDlg类的实现
//HeroDlg.cpp:
implementationfile源文件
//插入头文件
HeroDlg.h"
//CHeroDlgdialog对话框
CHeroDlg:
CHeroDlg(CWnd*pParent/*=NULL*/)//构造函数
CDialog(CHeroDlg:
m_bWriteflg=FALSE;
//初始化写标志变量为假
voidCHeroDlg:
//变量与资源映射
//{{AFX_DATA_MAP(CHeroDlg)
DDX_Text(pDX,IDC_NAME_EDIT,m_name);
DDX_Text(pDX,IDC_TIME_EDIT,m_time);
//}}AFX_DATA_MAP
BEGIN_MESSAGE_MAP(CHeroDlg,CDialog)
//{{AFX_MSG_MAP(CHeroDlg)
ON_BN_CLICKED(IDOK_BTN,OnBtn)//按钮与函数映射
//CHeroDlgmessagehandlers消息句柄
SetWriteFlg(BOOLbflg)//设置写入标志
m_bWriteflg=bflg;
intCHeroDlg:
DoModal()//弹出对话框
charpszTmp[128]={0};
//读取配置文件
GetPrivateProfileString("
HERO"
"
name"
"
pszTmp,127,"
.\\hero.ini"
);
//读入
m_name=CString(pszTmp);
if(!
m_bWriteflg)
GetPrivateProfileString("
time"
0"
pszTmp,127,"
//读入等级
m_time=atoi(pszTm