课程设计扫雷小游戏Word格式文档下载.docx
- 文档编号:21448860
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:68
- 大小:144.08KB
课程设计扫雷小游戏Word格式文档下载.docx
《课程设计扫雷小游戏Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《课程设计扫雷小游戏Word格式文档下载.docx(68页珍藏版)》请在冰豆网上搜索。
程序主界面
游戏运行的界面
1.2运行环境需求
基本操作系统:
win7,winXP
1.3硬件需求
a.处理器型号:
奔腾III及同等型号以上处理器
b.内存容量:
512MB以上内存(可运行数据库管理系统)
c.外存容量:
5G以上硬盘空间
d.联机或脱机:
脱机
e.输入及输出设备的型号和数量:
鼠标、彩色显示器
1.4基本素材需求
二、总体设计
扫雷是单人计算机游戏。
游戏的用户界面由小方格组成的战场构成。
当游戏开始时,计算机将固定的地雷数随机的放到战场的方格。
此游戏还允许玩家指定战场中的地雷数。
参考Windows操作系统提供的扫雷游戏,改进扫雷游戏程序,增加以下功能:
在主界面中添加一个菜单栏,菜单栏中包括游戏和帮助两个菜单,其中游戏菜单中设置初级、中级、高级、自定义、声音、扫雷英雄榜这几个菜单项,帮助菜单中设置游戏规则和制作人员两个菜单项。
背景说明:
a.软件名称:
扫雷
b.用户:
所有扫雷游戏爱好者
三、详细设计
3.1具体要求如下:
(1)扫雷游戏分为初级、中级和高级三个级别。
单击游戏菜单可以选择“初级”、“中级”和“高级”。
三个等级的区别在于,其雷的总数不一样,分别为40、80、120个雷,在相同数目的格子中,雷的数目愈多,其难度自然就愈大。
(2)选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击‘“开始”便启动计时器。
(3)用户要揭开某个方块,可左键单击它。
若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。
(4)如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。
用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。
(5)当用户点中雷时,将有提示出现,胜利时,也有提示出现。
游戏的基本步骤为:
开始:
按左键开始游戏,单击表情按钮或菜单重新开始;
左键:
按下时,是雷则结束,非雷则显示数字;
数字:
表示此数字周围一圈八个格子中雷的数目;
右键:
奇数次按下,则用小红旗标记,表示此处是雷;
偶数次按下,表示对上次的否定;
结束:
左键单击到雷则结束,标记出所有的雷则结束;
3.2游戏流程
运行截图
游戏开始时截图,点击游戏菜单下的“开始”可以运行,或者点击
开始。
右边有计时器,
左边是分数。
这是游戏中途的截图
这是游戏失败的截图
四、系统调试
在编写程序时,不免会出现这样那样的错误,这时需要我们从各个方向来解决。
在调试这个游戏时,遇到一些语法和逻辑方面的问题。
但是都得到了解决。
五、结果分析
能够顺利地运行程序
六、总结
1.通过设计实验,能综合运用了所学知识,编程解决实际问题,是所学知识掌握得更系统扎实。
2.现自己的知识的欠缺和能力的不足,使我们能够了解自己的不足,能及时补救,使自己得到不断完善。
3.通过设计实验,对所学知识有了更深的理解,了解所学知识在实际生活中的运用。
4.通过这次设计的总结,我会在以后的学习中增强自己理论与实践相结合的能力。
附件:
部分程序源代码:
DlgCustom.cpp:
#include"
stdafx.h"
mine.h"
DlgHero.h"
MineWnd.h"
MineDefs.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
CDlgHero:
:
CDlgHero(CWnd*pParent/*=NULL*/)
:
CDialog(CDlgHero:
IDD,pParent)
{
//{{AFX_DATA_INIT(CDlgHero)
m_szBHolder=_T("
"
);
m_szEHolder=_T("
m_szBRecord=_T("
m_szERecord=_T("
m_szIHolder=_T("
m_szIRecord=_T("
//}}AFX_DATA_INIT
}
voidCDlgHero:
DoDataExchange(CDataExchange*pDX)
CDialog:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgHero)
DDX_Text(pDX,IDC_B_H,m_szBHolder);
DDX_Text(pDX,IDC_E_H,m_szEHolder);
DDX_Text(pDX,IDC_B_R,m_szBRecord);
DDX_Text(pDX,IDC_E_R,m_szERecord);
DDX_Text(pDX,IDC_I_H,m_szIHolder);
DDX_Text(pDX,IDC_I_R,m_szIRecord);
//}}AFX_DATA_MAP
BEGIN_MESSAGE_MAP(CDlgHero,CDialog)
//{{AFX_MSG_MAP(CDlgHero)
ON_BN_CLICKED(IDC_RESET,OnReset)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
SetBHolder(CStringholder)
m_szBHolder=holder;
SetBRecord(UINTrecord)
m_szBRecord.Format("
%d秒"
record);
SetIHolder(CStringholder)
m_szIHolder=holder;
SetIRecord(UINTrecord)
m_szIRecord.Format("
SetEHolder(CStringholder)
m_szEHolder=holder;
SetERecord(UINTrecord)
m_szERecord.Format("
OnReset()
CMineWnd*pMine=(CMineWnd*)AfxGetMainWnd();
pMine->
ResetRecord();
m_szBHolder=DEFAULT_HOLDER;
DEFAULT_RECORD);
m_szIHolder=DEFAULT_HOLDER;
m_szEHolder=DEFAULT_HOLDER;
UpdateData(FALSE);
DlgCustom.cpp
DlgCustom.h"
//CDlgCustomdialog
CDlgCustom:
CDlgCustom(CWnd*pParent/*=NULL*/)
CDialog(CDlgCustom:
//{{AFX_DATA_INIT(CDlgCustom)
m_uHeight=0;
m_uNumber=0;
m_uWidth=0;
voidCDlgCustom:
//{{AFX_DATA_MAP(CDlgCustom)
DDX_Text(pDX,IDC_HEIGHT,m_uHeight);
DDX_Text(pDX,IDC_NUMBER,m_uNumber);
DDX_Text(pDX,IDC_WIDTH,m_uWidth);
BEGIN_MESSAGE_MAP(CDlgCustom,CDialog)
//{{AFX_MSG_MAP(CDlgCustom)
OnOK()
UpdateData();
if(m_uWidth<
9)m_uWidth=9;
if(m_uWidth>
30)m_uWidth=30;
if(m_uHeight<
9)m_uHeight=9;
if(m_uHeight>
24)m_uHeight=24;
if(m_uNumber<
10)m_uNumber=10;
if(m_uNumber>
m_uWidth*m_uHeight)m_uNumber=m_uWidth*m_uHeight-1;
SetCustom(m_uWidth,m_uHeight,m_uNumber);
OnOK();
InitData(UINTxNum,UINTyNum,UINTmNum)
m_uWidth=xNum;
m_uHeight=yNum;
m_uNumber=mNum;
DlgNewRecord.cpp
DlgNewRecord.h"
CDlgNewRecord:
CDlgNewRecord(CWnd*pParent/*=NULL*/)
CDialog(CDlgNewRecord:
//{{AFX_DATA_INIT(CDlgNewRecord)
m_szName=_T("
匿名"
m_szDesc=_T("
voidCDlgNewRecord:
//{{AFX_DATA_MAP(CDlgNewRecord)
DDX_Text(pDX,IDC_EDIT_NAME,m_szName);
DDX_Text(pDX,IDC_DESCRIBE,m_szDesc);
BEGIN_MESSAGE_MAP(CDlgNewRecord,CDialog)
//{{AFX_MSG_MAP(CDlgNewRecord)
SetLevel(UINTlevel)
CStringszLevel;
if(level==LEVEL_PRIMARY)szLevel="
初级"
;
elseif(level==LEVEL_SECONDRY)szLevel="
中级"
elseif(level==LEVEL_ADVANCE)szLevel="
高级"
m_szDesc.Format("
已破%s记录\n\r请留尊姓大名"
szLevel);
CStringCDlgNewRecord:
GetName()
returnm_szName;
Mine.cpp
Mine.h"
BEGIN_MESSAGE_MAP(CMineApp,CWinApp)
//{{AFX_MSG_MAP(CMineApp)
//}}AFX_MSG
CMineApp:
CMineApp()
CMineApptheApp;
constCStringclassName=_T("
MineClass"
BOOLCMineApp:
InitInstance()
SetRegistryKey("
CSER_513_2"
m_uXMineNum=GetProfileInt(GAME_SETTING,CUSTOM_XNUM,PRIMARY_XNUM);
m_uYMineNum=GetProfileInt(GAME_SETTING,CUSTOM_YNUM,PRIMARY_YNUM);
//定义并注册MineWnd窗口
m_pMineWnd=newCMineWnd();
WNDCLASSwc;
ZeroMemory(&
wc,sizeof(wc));
wc.hInstance=AfxGetInstanceHandle();
wc.lpfnWndProc=:
DefWindowProc;
wc.hbrBackground=NULL;
wc.hCursor=LoadCursor(IDC_ARROW);
wc.hIcon=LoadIcon(IDR_MAINFRAME);
wc.lpszClassName=className;
wc.lpszMenuName=MAKEINTRESOURCE(IDR_MENU);
//registertheminewndclass
//注册窗口
if(!
AfxRegisterClass(&
wc))
{
AfxMessageBox("
注册类失败!
returnFALSE;
}
//gettheminewndcoordinates,widthandheight
UINTuWidth=DEFAULT_FRAME_X+m_uXMineNum*MINE_WIDTH+
LINE_WIDTH_0*3+SIDE_WIDTH_0+SIDE_WIDTH_1;
UINTuHeight=DEFAULT_FRAME_Y+m_uYMineNum*MINE_HEIGHT+
LINE_WIDTH_0*3+SIDE_WIDTH_0*2+SIDE_WIDTH_1+SHELL_S_H;
UINTuXPos=GetSystemMetrics(SM_CXSCREEN)/2-uWidth/2;
UINTuYPos=GetSystemMetrics(SM_CYSCREEN)/2-uHeight/2;
//创建窗口
if(!
m_pMineWnd->
CreateEx(NULL,className,_T("
扫雷"
),
WS_SYSMENU|WS_CAPTION|WS_MINIMIZEBOX,
uXPos,uYPos,uWidth,uHeight,
NULL,NULL))
创建主窗口失败!
//绑定该窗口为主窗口
m_pMainWnd=m_pMineWnd;
//显示窗口
m_pMineWnd->
ShowWindow(SW_NORMAL);
returnTRUE;
intCMineApp:
ExitInstance()
deletem_pMineWnd;
returnCWinApp:
ExitInstance();
Mines.cpp
//re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 扫雷 小游戏
![提示](https://static.bdocx.com/images/bang_tan.gif)