MFC扫雷 课程设计报告.doc
《MFC扫雷 课程设计报告.doc》由会员分享,可在线阅读,更多相关《MFC扫雷 课程设计报告.doc(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、宿 迁 学 院Windows程序设计课程考核报告班 级: 学 号: 姓 名: 得 分: 2013年12月20日 目录 1.设计目的及要求-11.1设计目的及问题描述-11.2设计要求-11.3软件、硬件环境- 12. 课程设计步骤- 13. 课程设计内容- 13.1 概要设计- 2 3.1.1 程序总体框架描述- 23.1.2程序常用类声明- 3 3.2主要技术- 4 3.3系统设计结果 (界面截图、操作流程)-13 4.设计总结- 16 4.1遇到的问题及如何解决- 16题目:扫雷游戏1. 设计目的及要求 1.1设计目的及问题描述 系统地学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编
2、程环境Visual C+并在此环境下设计并实现一个简单扫雷游戏,该扫雷游戏应能实现如下功能:(1) 雷区上部左侧显示总雷数减被标明有雷区域的数目。(2)雷区上部中间位置显示一按钮用于开局和显示鼠标动作的结果。(3)雷区上部右侧显示扫雷的时间。1.2设计要求(1)能独立搭建可视化程序编程环境,掌握V is ua l C+ + 6 .0 的安装、运行和使用。(2)总体要求:用面向对象编程的思想与方法,实现一个扫雷游戏的分析与设计阶段的开发工作,开发工具使用Visual C+6。(3)编写设计方案,设计过程,源程序文件结构,分析实验方案,并对实验做出总结。1.3软件、硬件环境 开发工具:Micros
3、oft Visual C+ 6.0软件和Windows 2000/XP操作系统2. 课程设计内容 扫雷小游戏的开发与实现3. 课程设计步骤 步骤大致上可以分为三个部分,分别为:画面初始、游戏者按下第一个方块和为非地雷方块时展开。 画面初始时,以游戏者最后一次设定的地雷区大小为范围画出地雷区,但此时并未产生地雷。当游戏者按下第一个方块时产生地雷资料并启动定时器,为何在游戏者按下第一个方块才产生地雷资料呢?其主要的用意在于不要让游戏者第一次就踩到地雷,这样在某种程度上可以提高游戏者游玩的气氛。接着就是如何判断按下的方块是非地雷时的处理,这也是整个游戏的技术核心,我们可以通过递归的观念来检查周边的方
4、块是否含有地雷及是否继续往外翻开。3.1 概要设计 相信大多数使用Windows操作系统的使用者,对这款游戏都不陌生。这款游戏不止操作简单,规则也不难,再加上游戏速度的控制机制得宜,让整个游戏在操作过程中充满了快乐与紧张的气氛。除了游乐当中能带给使用者快乐之外,游戏的设计内容无形中也不断训练使用者的逻辑思考能力,对于依靠高度脑力工作的现代人,都可以通过这个游戏,不时的检验一下自己,所以我们不难发现,在各种可携带的电子产品上都有这款游戏的踪影。 当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1 程序总体框架描述 扫雷游戏的开发主要包括两大
5、部分:一个部分是布雷,该部分主要将雷随机布置在游戏区域内,以避免出现相同的雷区布置地图。另一部分是扫雷,该部分包括判断鼠标左键点击某区域该区域是否是雷,如果是雷该如何操作,如果不是雷该如何操作,鼠标右键点击某区域时如果判断该区域是雷则加以标记,如果不是雷也加以标记,以及当鼠标双击某区域时,判断与该区域相邻的其它8个区域是否是雷并做一个标记。 扫雷游戏窗体类模块窗体加载构造函数鼠标左键鼠标右键画图函数鼠标点击函数开始函数递归函数图1 系统功能图3.1.2程序常用类声明首先定义一个雷类: class Lei243 /定义一个雷类public: int weitu; /显示哪一个位图 int shu
6、mu;/这个位置相应的值; 接着是在View类添加变量和函数:int leftnum; /剩下雷数int leinum;/雷数int jieshu;/结束short second; /计时int secondstart; /开始计时CBitmap m_Bitmap12;/位图数组CBitmap m_anniu4;/按扭位图数组int m_RowCount;/雷区行数 int m_ColCount; /雷区列数 Lei243 lei5050; /最大雷区void leizero(); /这个位置周围雷数为0afx_msg int OnCreate(LPCREATESTRUCT lpCreateS
7、truct);afx_msg void OnLButtonDown(UINT nFlags, CPoint point);/鼠标按下左键afx_msg void OnLButtonUp(UINT nFlags, CPoint point);/鼠标左键抬起afx_msg void OnRButtonDown(UINT nFlags, CPoint point);/鼠标按下右键afx_msg void OnTimer(UINT nIDEvent);/计时器函数afx_msg void OnStart();/开始函数3.2主要技术 构造函数:由于构造函数是程序运行时就执行的,所以,除了对变量赋值之外
8、,我们还可以把游戏的核心结构即内部数组赋值:先是把全部格子的位图和雷数赋值为0,然后调用随机函数按指定雷数赋值为-1,最后把不是雷的格子的雷数赋值为相应的值。CMy243ztyslView:CMy243ztyslView()/ TODO: add construction code here for(int ii=0;ii16;ii+)m_Bitmapii.LoadBitmap(IDB_BITMAP14+ii); for(int jj=0;jj4;jj+)m_anniujj.LoadBitmap(IDB_ANNIU1+jj); second=0; /计时 secondstart=0; /1时开
9、始计时 m_RowCount=25; /行数 m_ColCount=16; /列数 leinum=80; /雷数 leftnum=leinum; /剩余雷数 jieshu=0; /jieshu=1时停止 int aa=0; for(int i=0;im_RowCount;i+)/初始化为0for(int j=0;jm_ColCount;j+)leiij.shumu=0;leiij.weitu=0;CTime time=GetCurrentTime();/获取当前时间int s;s=time.GetSecond();/获取秒数do/设置40个雷int k=(rand()*s)%m_RowCoun
10、t;/以当前秒数为产生随机算法int l=(rand()*s)%m_ColCount; if(leikl.shumu!=-1) /为了避免一个位置同时算两个雷 /只允许当前位置不是雷时赋值为雷leikl.shumu=-1; aa+; while(aa!=leinum); /给方格赋值,计算雷数for(int a=0;am_RowCount;a+)for(int b=0;bm_ColCount;b+)if(leiab.shumu=0)for(int c=a-1;ca+2;c+)for(int d=b-1;d=0&c=0&dFillRect(myrect1,&mybrush1);CBrush my
11、brush; /画黑框 mybrush.CreateSolidBrush(RGB(0,0,0); CRect myrect(20,10,70,40); pDC-FillRect(myrect,&mybrush);CRect myrect2(325,10,375,40); pDC-FillRect(myrect2,&mybrush); CPen mypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,2,RGB(255,255,255); myoldPen=pDC-SelectObject(&mypen);pDC-MoveTo(20,40);/画黑框的白线pDC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC扫雷 课程设计报告 MFC 扫雷 课程设计 报告
限制150内