C++语言程序设计课程设计扫雷
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
辽宁工业大学
《C++语言程序设计》课程设计(论文)题目:扫雷
院(系):软件学院
专业班级:软件工程111班
学号:
学生姓名:
指导教师:翟宝峰
教师职称:副教授
起止时间:
课程设计(论文)任务及评语
目录
第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操作系统自带的扫雷游戏。在课程设计中,系统开发平台为Windows XP,程序设计语言采用Visual C++,程序运行平台为Windows 2000/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,封装每颗雷的相关属性。
class bomb
{
public:
统总体流程图
图系统总体流程图
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. 系统结构图如图所示。