C++语言程序设计课程设计扫雷.docx
- 文档编号:4092827
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:9
- 大小:23.55KB
C++语言程序设计课程设计扫雷.docx
《C++语言程序设计课程设计扫雷.docx》由会员分享,可在线阅读,更多相关《C++语言程序设计课程设计扫雷.docx(9页珍藏版)》请在冰豆网上搜索。
C++语言程序设计课程设计扫雷
辽宁工业大学
《C++语言程序设计》课程设计(论文)
题目:
扫雷
院(系):
软件学院
专业班级:
软件工程111班
学号:
学生姓名:
指导教师:
翟宝峰
教师职称:
副教授
起止时间:
课程设计(论文)任务及评语
院(系):
软件学院教研室:
软件教研室
学号
学生姓名
专业班级
软件工程166班
课程设计(论文)题目
扫雷
课程设计(论文)任务
程序设计的任务与要求:
(1).掌握面向对象程序设计语言C++的基本语法
(2).掌握C++面向对象设计的思想
(3).掌握VC++与DEVC++开发工具的使用
(4).运用标准C++规范设计应用程序
设计过程中,要严格遵守设计的时间安排,听从指导教师的指导。
正确地完成上述内容,规范完整地撰写出设计报告。
指导教师评语及成绩
成绩:
指导教师签字:
年月日
第1章课程设计目的与要求
设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象程序设计的方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序和修改程序。
实验环境
硬件要求能运行Windows操作系统的微机系统。
C++语言应用程序开发软件使用:
VC++系统,或其他C++语言应用程序开发软件。
预备知识
熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。
设计要求
1.仔细分析设计题目,画出程序流程图,编写程序源代码。
2.积极上机调试源程序,增强编程技巧与调程能力。
3.认真书写课程设计预习报告,课程设计说明书。
4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。
第2章课程设计内容
课题描述
扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏。
不久之后,“方块”被改写成了游戏Rlogic。
在Rlogic里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。
两年后,汤姆·安德森在Rlogic的基础上又编写出了游戏地雷,由此奠定了现代扫雷游戏的雏形。
1981年,微软公司的罗伯特和卡特两位工程师在Windows系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。
本课程设计实现类似于Windows操作系统自带的扫雷游戏。
在课程设计中,系统开发平台为WindowsXP,程序设计语言采用VisualC++,程序运行平台为Windows2000/XP。
在程序设计中,把整个雷区看成一个二维数组,把雷方块定义为具有所在雷区二维数组的行和列、当前状态、方块属性、历史状态的结构体。
整个游戏程序包括了布雷、扫雷过程和结果三个阶段,在处理鼠标响应事件中伴随着GDI绘图。
程序通过调试运行,实现了设计目标,能够同时满足扫雷游戏初学者和高手的需要。
系统设计
本章的课程设计使用C++语言编写一个与其类似的扫雷游戏。
具体要求如下:
(1)选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。
(2)用户要揭开某个方块,可单击它。
若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。
(3)如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。
用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。
(4)扫雷胜利后,显示游戏胜利,失败后显示再来一局。
(5)用户可以改变游戏界面的颜色外观。
(6)游戏中用户可以通过菜单重新开始新游戏。
1.类的设计
本程序设计了CMineWnd类、CDlgCustom类、bomb类、cview类、CDlgHero类、CDlgNewRecord类等。
CMineWnd类作用:
用于扫雷开始运行等操作。
cbombview类作用:
扫雷工作补充。
bomb类作用:
封装每颗雷的相关属性。
cview类作用:
完成扫雷的大部分工作。
CDlgHero类作用:
等级英雄榜。
CDlgNewRecord类作用:
重新开始新的游戏。
基类为CMineWnd类、bomb类、cview类。
派生类CDlgHero类由CDialog应用程序类继承,cbombview类由cview类继承。
(1)定义类bomb,封装每颗雷的相关属性。
classbomb
{
public:
intisbomb;
统总体流程图
结束
开始
开始
依照使用者初始设定
等待按键
左键键
右键
第一次按下方块
显示方块
1.布置地雷
2.启动计时器
按下方块是否为地雷
显示分数
是否再玩玩
结束
延按下方块周围展开非地雷方块
计时器
时间到
否
否
是
是
否
否
是
是
否
图系统总体流程图
1.程序编程中用到的类函数简单介绍:
CchildView:
其中定义了
Drawboard——对扫雷棋盘进行了绘制
Drawbutton——将资源类中存有的脸的图片进行裁减选择加入到规定位置。
Drawcell——绘制雷区(即在资源类的cell的15个图片中根据需要选择标志,雷图标,以及数字标实通过裁减放到规定的坐标处)
DrawLCD——绘制记时器,调用资源类中的num数字图片用于记时
Expand——当鼠标点击处周围无雷时扩大范围
Gameover——游戏结束时的定义
Inbound——对游戏鼠标点击区域的限制
OnCreate——建立游戏
OnGameCustomize——游戏自定义设置
OnGameNew——游戏级别的初始化
OnGameRecord——扫雷英雄榜的判断记录
OnLButtonDown——左键按下时触发的动作和计算机所做的判断
OnLButtonUp——左键弹起时触发的动作和计算机所做的判断
OnRButtonDown——右键按下时触发的动作和计算机所做的判断
OnRButtonUp——右键弹起时触发的动作和计算机所做的判断
OnTimer——记时器设置
OnUpdateGameLevel——修改游戏等级
OnUpdateGameMark——修改游戏标志
wm_lbuttomdown消息响应函数onlbuttomdown是处理用户输入的主要执行者,函数首先判断点中位置是否是雷,是则关闭定时器,销毁原位图按钮,创建一对应正常和被炸死两种状态的新位图按钮,并调用setstate将其设置为pushdown(小人哭的状态),将m_bgameover,置为true标志游戏结束,否则先调用setstate设置位图按钮为pushdown(小人笑的状态),并在onlbuttomup中设置位图按钮为正常状态,然后调用caculate函数记下周围雷的数目,最后调用invalidate使客户区无效,迫使ondraw函数重绘客户区域,在调用invalidate时不应重画背景,避免闪烁,这样就完成了在雷区按下左键的响应动作。
wm_rbuttomdown消息响应函数onlbuttomdown将被认为有雷位置的置一,减少左上角的雷记数,然后判断是否真正全部排完了雷,是则结束游戏弹出input对话框,让扫雷的人输入姓名,在响应idok通知码时将其写入注册表,没有全部排完则使客户区无效,迫使ondraw函数重绘客户区域完成在雷区按下右键的动作。
ondraw函数在每次点击左键或右键时都会被调用重雷区和控制区域,因为点击情况的复杂性和雷属性的多元化导致ondraw函数需要精心设计。
函数caculate计算某个雷周围的雷数,根据前面的分析知道,计算某个雷周围的雷数本身就是一个递归过程,在编制时应注意递归的边界条件,稍不注意会陷入无穷递归而耗尽了系统的资源。
2.系统结构图如图所示。
类模块
扫雷游戏
扫雷
窗
体
类模块
背景音乐
英雄榜
级别选择
鼠标
开始
窗体加载
鼠标函数
递归函数
重开函数
画图函数
音乐函数
图系统结构图
3.雷区设计函数流程图如图所示。
图雷区设计函数流程图
4.布雷函数流程图
随即获取一个状态为非雷的点,将它的属性标志为雷,重复这样的工作,直到布下足够的雷为止,其函数流程图如图所示。
生成随机的雷方块的坐标(x,y)
开始
开始
生成随机的雷方块的坐标(x,y)
判断(x,y)区域是否已经布下雷
在(x,y)区域布雷,修改状态数据据。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
判断是否布下所有雷
结束
否
是
是
否
图布雷函数流程图
在CMineWnd类中添加游戏的布雷模块的处理函数,该函数的实现如下。
voidCMineWnd:
:
LayMines(UINTrow,UINTcol)
{
Attrib!
=ATTRIB_MINE)
{
m_pMines[i][j].uAttrib=ATTRIB_MINE;/程序名:
扫雷游戏;程序作者:
孙庆贺;程序版本:
;完成时间:
;
/源文件,类的实现文件:
#include""
#include""
#include""
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
BEGIN_MESSAGE_MAP(CMineApp,CWinApp)
END_MESSAGE_MAP()
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);
/鼠标左键点击事件的关键代码如下所示。
voidCMineWnd:
:
OnLButtonUp(UINTnFlags,CPointpoint){
飞倩编着《C++面向对象程序设计》上海:
电子工业出版社
2.吴华恩主编《C++程序设计》北京:
机械工业出版社
3.洪永清主编《面向对象的系统分析》天津:
天津大学出版社
4.谭浩强主编《面向对象建模》武汉:
科技大学出版社
5.邵伟忠主编《常用算法程序集》天津:
人民大学出版社
6.徐世亮编着《C++大学教程》北京:
人民邮电出版社
7.徐孝凯编着《C++语言程序设计》北京:
清华大学出版社
8.吴访升编着《C++程序设计》北京:
机械工业出版社
主编《C/C++程序设计》北京:
中国铁道出版社
10.徐静芬主编《C++语言程序设计》辽宁:
广播大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 语言程序设计 课程设计 扫雷