辽 宁 工 业 大 学
《C++语言程序设计》课程设计(论文)
题目:
扫雷
院(系):
软 件 学 院
专业班级: 软件工程 111 班
学 号:
学生姓名:
指导教师:
翟宝峰
教师职称:
副教授
起止时间:2011.12.12-2011.12.25
课程设计(论文)任务及评语
院(系):软件学院
教研室:软件教研室
学 号
课程设计
(论文)
题目
学生姓名
专业班级 软件工程 166 班
扫雷
程序设计的任务与要求:
(1).掌握面向对象程序设计语言 C++的基本语法
(2).掌握 C++面向对象设计的思想
(3).掌握 VC++6.0 与 DEV C++ 开发工具的使用
(4). 运用标准 C++规范设计应用程序
设计过程中,要严格遵守设计的时间安排,听从指导教师的指导。
正确地完成上述内容,规范完整地撰写出设计报告。
课
程
设
计
(
论
文
)
任
务
指
导
教
师
评
语
及
成
绩
成绩:
指导教师签字:
年
月
日
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
目 录
第 1 章 课程设计目的与要求 ................................................... 1
1.1 设计目的 ............................................................ 1
1.2 实验环境 ............................................................ 1
1.3 预备知识 ............................................................ 1
1.4 设计要求 ............................................................ 1
第 2 章 课程设计内容 ......................................................... 2
2.1 课题描述 ............................................................ 2
2.2 系统设计 ............................................................ 2
2.2.1 功能分析 ...................................................... 2
2.2.2 面向对象设计 .................................................. 3
2.2.2 类成员描述 .................................................... 5
2.3 程序实现 ............................................................ 9
2.3.1 源码分析 ...................................................... 9
2.3.2 运行结果 ..................................................... 13
第 3 章 课程设计总结 ........................................................ 14
参考文献 ................................................................... 15
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
第 1 章 课程设计目的与要求
1.1 设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据
结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系
实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的
最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用 C++语言编写调试应用系统程序,训
练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象程序设计的方法。
(6)熟练掌握 C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序和修改程序。
1.2 实验环境
硬件要求能运行 Windows 操作系统的微机系统。C++语言应用程序开发软件使用:
VC++ 系统,或其他 C++语言应用程序开发软件。
1.3 预备知识
熟悉 C++语言程序设计的基本知识及 VC++编辑器的使用方法。
1.4 设计要求
1.仔细分析设计题目,画出程序流程图,编写程序源代码。
2.积极上机调试源程序,增强编程技巧与调程能力。
3.认真书写课程设计预习报告,课程设计说明书。
4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成
课程设计内容。
1
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
第 2 章 课程设计内容
2.1 课题描述
扫雷最原始的版本可以追溯到 1973 年一款名为“方块”的游戏。不久之后,“方块”
被改写成了游戏 Rlogic。在 Rlogic 里,玩家的任务是作为美国海军陆战队队员,为指
挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。两年后,汤姆·安
德森在 Rlogic 的基础上又编写出了游戏地雷,由此奠定了现代扫雷游戏的雏形。1981
年,微软公司的罗伯特和卡特两位工程师在 Windows 3.1 系统上加载了该游戏,扫雷游
戏才正式在全世界推广开来。
本课程设计实现类似于 Windows 操作系统自带的扫雷游戏。在课程设计中,系统开
发平台为 Windows XP,程序设计语言采用 Visual C++,程序运行平台为 Windows 2000/XP。
在程序设计中,把整个雷区看成一个二维数组,把雷方块定义为具有所在雷区二维数组
的行和列、当前状态、方块属性、历史状态的结构体。整个游戏程序包括了布雷、扫雷
过程和结果三个阶段,在处理鼠标响应事件中伴随着 GDI 绘图。程序通过调试运行,实
现了设计目标,能够同时满足扫雷游戏初学者和高手的需要。
2.2 系统设计
2.2.1 功能分析
本章的课程设计使用 C++语言编写一个与其类似的扫雷游戏。具体要求如下:
(1)选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何
一个方块便启动计时器。
(2)用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所
揭方块下无雷,则显示一个数字,该数字代表方块的周围的 8 个方块中共有多少颗雷。
(3)如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷
的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),
程序将显示的剩余雷数减少一个。
(4)扫雷胜利后,显示游戏胜利,失败后显示再来一局。
(5)用户可以改变游戏界面的颜色外观。
(6)游戏中用户可以通过菜单重新开始新游戏。
2
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
2.2.2 面向对象设计
1.类的设计
本程序设计了 CMineWnd 类、CDlgCustom 类、bomb 类、cview 类、CDlgHero 类、
CDlgNewRecord 类等。
CMineWnd 类作用:用于扫雷开始运行等操作。
cbombview 类作用:扫雷工作补充。
bomb 类作用:封装每颗雷的相关属性。
cview 类作用:完成扫雷的大部分工作。
CDlgHero 类作用:等级英雄榜。
CDlgNewRecord 类作用:重新开始新的游戏。
基类为 CMineWnd 类、bomb 类、cview 类。
派生类 CDlgHero 类由 CDialog 应用程序类继承,cbombview 类由 cview 类继承。
(1)定义类 bomb,封装每颗雷的相关属性。
class bomb
{
public:
int isbomb;//决定初始时是否是雷
bool issel; //判断区域是否被处理过且周围有雷
bool isdone;//判断递归时是否被处理过
int num; //周围雷数
bool findbomb; //排雷者认为是雷时置一(但是不一定真是雷)
} ;
(2)重载 cmainframe 中 precreatewindow,并设置相应属性,使其窗体大小固定,这样
就固定了显示区域的大小为初始 10 乘 10 个雷和外加雷区上部的控制区域,部分代码如下
cs.style=ws_overlapped|ws_sysmenu| ws_border|ws_minimizebox;
cs.cy = 10*15+6;
cs.cx = 10*15+60; //6 和 60 分别是横纵的附加值,用于边框、菜单、标题条、控制区
域。
(3)重载 cbombview 中 oncreate 函数创建位图按钮,该位图按钮的两幅位图对应了
正常、雷正确两种状态,当要显示被炸死的状态时应动态销毁该按钮,并重新创建一位图对
应正常和被炸死两种状态,将该位图按钮的 id 号定为 id_game_begin,这样一来当点击按钮
时便可重新开始游戏,部分代码如下。
crect rcclient;
getclientrect(&rcclient);
3
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
crect rect(rcclient.cx/2-8,10,rcclient.cx/2+8,20);
m_button.create("new",bs_defpushbutton|ws_visible|
bs_ownerdraw,rect,this,id_game_begin);
m_button.loadbitmaps(idb_face1, idb_face2);
2.UML 类图
CMineWnd
-CMineApp: int
-CMineWnd: int
-ExitInstance: int
-InitInstance: BOOL
+CMineWnd():virtual
+ResetRecord():void
+SetCustom():void
+LookUp(CData & data): int
+InitGame():void
+LoadBitmap():void
+FreeMines():void
+LayMines(UINT row, UINT col):void
bomb
-isbomb:int
-issel:bool
-isdone:bool
CDlgHero
-findbomb:bool
-num:intint
+DrawShell(CPaintDC &dc):void
+DrawButton(CPaintDC &dc):void
+SetBHolder(CString holder)
+SetBRecord(UINT record):void
+SetIHolder(CString holder)
图 2.1 扫雷游戏程序的 UML 类图
4
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
3.系统总体流程图
开始
开始
依照使用者初始设定
否
等待按键
否
左 键
是
右键
是
第一次按下方块
显示方块
计时器
否
时间到
是
延 按
下 方
块 周
围 展
开 非
地 雷
方块
否
1. 布置地雷
2. 启动计时器
按下方块是否
为地雷
是
显示分数
是 否 再玩
否
结
结束
2.2.2 类成员描述
图 2.2 系统总体流程图
1.程序编程中用到的类函数简单介绍:
CchildView:其中定义了
Drawboard——对扫雷棋盘进行了绘制
Drawbutton——将资源类中存有的脸的图片进行裁减选择加入到规定位置。
5