




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
青岛理工大学C+面向对象课程设计报告院(系): 专业: 学生姓名: 学号: 班级: 题目: 起迄日期: 设计地点: 指 导 教 师: 完成日期: 2013 年7月 5 日目录一、题目概述1二、设计内容2三、调试分析5四、设计总结12五、参考文献13六、附录13一、题目概述(一):选课题目: 题目:游戏 扫雷 设计内容:扫雷程序将要实现类似windows系统自带的扫雷程序功能即可以显示附近雷区雷的个数,同时在游戏成功和失败的时候能跳出新的对话框,并配有相对应的表情,还可以记录玩家玩耍的时间和剩余雷区雷的个数等基本功能。(二):选做次项目的意义: 意义:随着科学技术突飞猛进,知识经济初见端倪,特别是信息技术和网络技术的迅速发展和广泛应用,对社会的政治、经济、军事、科技和文化等领域产生越来越深刻的影响,也正在改变这人们的工作、生活、学习和文化交流方式。尤其在游戏方面更是影响甚大,各种网络游戏随处可见。尤其可以借助C+实现很多简单游戏的制作,其中扫雷就是一款适合单机玩耍的游戏。扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏。 不久之后,“方块”被改写成了游戏“Rlogic”。在“Rlogic”里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。两年后,汤姆安德森在“Rlogic”的基础上又编写出了游戏“地雷”,由此奠定了现代扫雷游戏的雏形。 1981年, 微软公司的 罗伯特杜尔 和 卡特约翰逊 两位工程师在Windows 3.1系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。 这款游戏的玩法是在一个9*9(初级),16*16(中级),16*30(高级),或自定义大小的方块矩阵中随机布置一定量的地雷(初级为10个,中级为40个,高级为99个)。由玩家逐个翻开方块,以找出所有地雷为最终游戏目标。如果玩家翻开的方块有地雷,则游戏结束。本课程设计实现类似于Windows操作系统自带的扫雷游戏。在课程设计中,系统开发平台为Windows XP/windows 7,程序设计语言采用Visual C+,程序运行平台为Windows XP/windows 7。在程序设计中,把整个雷区看成一个二维数组,把雷方块定义为具有所在雷区二维数组的行和列、当前状态、方块属性、历史状态的结构体。整个游戏程序包括了布雷、扫雷过程和结果三个阶段,在处理鼠标响应事件中伴随着GDI绘图。程序通过调试运行,实现了设计目标,能够同时满足扫雷游戏初学者和高手的需要。(三):程序所实现的功能: 本系统是使用Visual C+在C+的基础上创建的,并用MFC实现程序可视化,程序功能不是太多,但基本功能都可以实现,主要功能包括:(1)选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。(2)用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。(3)如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。(4)扫雷胜利后,显示游戏胜利,失败后显示再来一局。(5)用户可以改变游戏界面的颜色外观。(6)游戏中用户可以通过菜单重新开始新游戏。(四):本程序所使用的开发运行环境主要包括:开发工具: VC+6.0运行环境: Windows win7、windows xp(五):本程序设计要达到的最终目的:将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程C+语言教程的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用C+语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。(5)掌握面向对象程序设计的方法。(6)熟练掌握C+语言的基本语法,灵活运用各种数据类型。(7)进一步掌握在集成环境下如何调试程序和修改程序。二、设计内容(一):系统总体流程图: 开始依照使用者初始设定等待按键左键键右键第一次按下方块显示方块1 布置地雷2 启动计时器按下方块是否为地雷显示分数是否再玩玩结束延按下方块周围展开非地雷方块计时器时间到否否是是否否是是否图1.系统整体流程图(二):系统结构图: 扫雷窗体类模块背景音乐英雄榜级别选择鼠标开始窗体加载鼠标函数递归函数重开函数画图函数音乐函数图2. 系统结构图(三):布雷函数流程图开始生成随机的雷方块的坐标(x,y)判断(x,y)区域是否已经布下雷在(x,y)区域布雷,修改状态数据据。判断是否布下所有雷结束否是是否图3. 布雷函数流程图三、调试分析(一):游戏设计过程中所需窗体设计 图4 游戏选择界面设计 图5 帮助界面设计图6 自定义雷区界面设计图7 英雄榜界面设计(二):游戏过程中所出现的重要界面:图8.低级水平时游戏界面图9.中级水平时游戏界面图10.高级水平时游戏界面 图11.破纪录时界面图12.游戏失败时界面(二):关键代码及功能显示: (1)游戏自定义雷区:void CDlgCustom:OnOK() /设置长和宽UpdateData();if (m_uWidth 30) m_uWidth = 30;if (m_uHeight 24) m_uHeight = 24;if (m_uNumber m_uWidth * m_uHeight) m_uNumber = m_uWidth * m_uHeight - 1;CMineWnd *pMine = (CMineWnd*)AfxGetMainWnd();pMine-SetCustom(m_uWidth, m_uHeight, m_uNumber);CDialog:OnOK();void CDlgCustom:InitData(UINT xNum, UINT yNum, UINT mNum)m_uWidth = xNum;m_uHeight = yNum;m_uNumber = mNum;(2)点中雷区时:BOOL CMineWnd:IsInMineArea(UINT row, UINT col)return (row = 0 & row = 0 & col m_uXNum);/ 失败处理/void CMineWnd:Dead(UINT row, UINT col)/按钮所在的区域CRect rcBtn(m_uBtnRect1, 15, m_uBtnRect2, 39);/雷区所在的区域CRect rcMineArea(MINE_AREA_LEFT, MINE_AREA_TOP, MINE_AREA_LEFT + m_uXNum * MINE_WIDTH, MINE_AREA_TOP + m_uYNum * MINE_HEIGHT);UINT i, j;if (m_pMinesrowcol.uAttrib = ATTRIB_MINE) /失败点中雷for (i = 0; i m_uYNum; i+)for (j = 0; j m_uXNum; j+)m_pMinesrowcol.uState = STATE_BLAST;m_pMinesrowcol.uOldState = STATE_BLAST;if (m_pMinesij.uAttrib = ATTRIB_MINE& m_pMinesij.uState != STATE_FLAG) m_pMinesij.uState = STATE_MINE;m_pMinesij.uOldState = STATE_MINE;else /失败错误雷for (i = 0; i m_uYNum; i+)for (j = 0; j m_uXNum; j+) m_pMinesrowcol.uState = STATE_ERROR;m_pMinesrowcol.uOldState = STATE_ERROR;if (m_pMinesij.uAttrib = ATTRIB_MINE& m_pMinesij.uState != STATE_FLAG)m_pMinesij.uState = STATE_MINE;m_pMinesij.uOldState = STATE_MINE;/失败处理InvalidateRect(rcMineArea);m_uBtnState = BUTTON_DEAD;InvalidateRect(rcBtn);m_uGameState = GS_DEAD;if (m_uTimer != 0) /将定时器去激活KillTimer(ID_TIMER_EVENT);m_uTimer = 0;if (m_bSoundful) /失败声音播放sndPlaySound(LPCTSTR)LockResource(m_pSndDead), SND_MEMORY | SND_ASYNC | SND_NODEFAULT);(3)游戏胜利时声音代码:BOOL CMineWnd:Victory()UINT i, j;CRect rcBtn(m_uBtnRect1, 15, m_uBtnRect2, 39);/ 检测是否胜利for (i = 0; i m_uYNum; i+)for (j = 0; j m_uXNum; j+) if (m_pMinesij.uState = STATE_NORMAL) return FALSE;if (m_pMinesij.uState = STATE_DICEY) return FALSE;/胜利则作胜利处理m_uBtnState = BUTTON_VICTORY;m_uGameState = GS_VICTORY;Invalidate();if (m_uTimer != 0) /将定时器去激活KillTimer(ID_TIMER_EVENT);m_uTimer = 0;/胜利声音if (m_bSoundful)sndPlaySound(LPCTSTR)LockResource(m_pSndVictory), SND_MEMORY | SND_ASYNC | SND_NODEFAULT);(4)绘制笑脸和数字图形代码:void CMineWnd:DrawButton(CPaintDC &dc)CDC cdc;cdc.CreateCompatibleDC(&dc);cdc.SelectObject(m_bmpButton);dc.StretchBlt(m_uBtnRect0, 16, 24, 24, &cdc, 0, 24 * m_uBtnState, 24, 24, SRCCOPY);dc.Draw3dRect(m_uBtnRect1, 15, 26, 26, m_clrDark, m_clrDark); void CMineWnd:DrawNumber(CPaintDC &dc)CDC dcMemory;dcMemory.CreateCompatibleDC(&dc);dcMemory.SelectObject(m_bmpNumber);dc.Draw3dRect(16, 15, 41, 25, m_clrDark, COLOR_WHITE);dc.Draw3dRect(m_uNumRect0, 15, 41, 25, m_clrDark, COLOR_WHITE);int num;/ draw remaining mine numbersnum = (m_nLeaveNum0) ? 11 : m_nLeaveNum/100;dc.StretchBlt(17, 16, 13, 23, &dcMemory, 0, 276-23*(num+1), 13, 23, SRCCOPY);num = (m_nLeaveNum 0) ? -(m_nLeaveNum-num*100)/10 : (m_nLeaveNum-num*100)/10;dc.StretchBlt(30, 16, 13, 23, &dcMemory, 0, 276-23*(num+1), 13, 23, SRCCOPY);num = (m_nLeaveNum0) ? -m_nLeaveNum%10 : m_nLeaveNum%10;dc.StretchBlt(43, 16, 13, 23, &dcMemory, 0, 276-23*(num+1), 13, 23, SRCCOPY);/ draw take secondsnum = m_uSpendTime / 100;dc.StretchBlt(m_uNumRect0, 16, 13, 23, &dcMemory, 0, 276-23*(num+1), 13, 23, SRCCOPY);num = (m_uSpendTime-num*100)/10;dc.StretchBlt(m_uNumRect0 + 13, 16, 13, 23, &dcMemory, 0, 276-23*(num+1), 13, 23, SRCCOPY);num = m_uSpendTime%10;dc.StretchBlt(m_uNumRect0+26, 16, 13, 23, &dcMemory, 0, 276-23*(num+1), 13, 23, SRCCOPY);(5):获取某个小方块区域相邻8个区域的雷个数: UINT CMineWnd:GetAroundNum(UINT row, UINT col)UINT i, j;UINT around = 0;UINT minRow = (row = 0) ? 0 : row - 1;UINT maxRow = row + 2;UINT minCol = (col = 0) ? 0 : col - 1;UINT maxCol = col + 2;for (i = minRow; i maxRow; i+) for (j = minCol; j maxCol; j+)if (!IsInMineArea(i, j) continue;if (m_pMinesij.uAttrib = ATTRIB_MINE) around+;return around; 四、设计总结短学期的课程设计是一次非常珍贵的机会,这是一次可以让我们所学的理论与实际相结合的机会。我们选择了游戏扫雷这一题目。通过这次比较完整的一个程序的设计,我走出了纯理论的学习,从一种全新的角度去学习。并且在小团队实现的MFC过程中,除去知识的大量更新,我学到了很多东西。其实个人而言,我体会较深的一点是团队互相帮助学习的过程,自己看书学习的经验,以及从网上以及其他各种途径获得信息和知识的经验。理论与实际相结合的设计,锻炼了我综合运用所学的基础知识,解决实际问题的能力,同时也提高我查阅文献资料、对程序整体的把握等其他能力水平。而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,我的各方面经验都得到了极大的丰富。经过一个假期,没有近距离接触C+,因而一开学对进行MFC课程设计这一还算陌生的领域感到有些吃力。在同组的同学有着很强的C+实力,在进行编程的过程中,我向她学到了MFC的很多知识,交流中也总结出比书本上更精髓生动的语言。在自己琢磨MFC各种陌生知识的时候,队友的耐心与任性,对于知识的渴求,对于工作的专注,极大程度上鼓舞了我。我们在交流中,迸发出了很多设计灵感,互相建议改进的过程中,我们分别从各个方面共同改进着,这个已经不能仅仅称作课程设计的作品。从知识获得方面来说,各种已经学习到的C+知识以及各种从网上搜索来的案例,我们都是随着设计的不断深入而不断熟悉的。和老师以及同学的沟通交流更使我对程序整体的规划与设计有了新的认识,也对自己提出了新的要求。 提高是有限的但提高也是全面的。正是这一次设计让我积累了许多实际经验。也必然会让我在未来的工作学习中表现出更高的耐力、理解力、实践力。 顺利如期的完成本次课程设计给了我很大的信心,但是也为我指出很多不足的地方。学习其实就是一个不断完善的过程,正视自己的不足之处。在以后的工作和学习中不断的弥补这些不足之处,在以后的生活中也要保持同样的态度,不断地完善自己。为期二周不到的MFC课程设计就要这样画上一个句号了。从这不长不短的二周中,我获得了知识,学到了研究的坚持与韧性,这四周不仅仅是交出了一份作业,还对自己有了新的认识,实在是难得的机遇与经历。五、参考文献1 C+面向对象程序设计任凤华、李兰.西安电子科技大学出版社2 C+面向对象程序设计实验指导及习题解析任凤华、李兰。西安电子科技大学出版社3.C+程序设计实践教程(第2版).吴乃陵、李海文.高等教育出版社4 VisualC+课程设计与系统开发实例(第4版). 伍俊良 清华大学出版社5 深入浅出MFC(附光盘) . 侯俊杰. 华中科技大学出版社 六附录UINTm_uXNum;/ X方向小方块个数UINTm_uYNum;/ Y方向小方块个数UINTm_uMineNum;/ 总的雷个数int m_nLeaveNum;/ 剩余的雷个数UINTm_uSpendTime;/ 游戏开始击到目前所花费的时间UINTm_uGameState;/ 游戏状态UINTm_uTimer;/ 定时器标识UIN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国消毒设备行业市场发展现状及发展趋势与投资风险研究报告
- 生态修复外包合同
- 能源环保技术研发与转让合同
- 钢结构房施工合同
- 健康生活消费指导合同
- 公司技术转让协议与保密义务约定事项说明
- 社区垃圾分类及处理技术服务合同协议
- 车辆租赁合同2025简单版10篇
- 大学生实习劳动合同协议9篇
- 集合资金信托合同(一)与集合资金信托合同5篇
- GB/T 13869-2017用电安全导则
- GB/T 13738.2-2017红茶第2部分:工夫红茶
- GB/T 13012-2008软磁材料直流磁性能的测量方法
- GA/T 1768-2021移动警务身份认证技术要求
- 贯彻中国式《现代化》全文解读
- 日本神话课件
- 2023年广东成人学士学位英语考试真题与答案
- 部编人教版道德与法治四年级下册《合理消费》优质课件
- 毕业设计(论文)-基于安卓平台的签到管理系统设计
- 大学生中长跑锻炼焦虑心理的原因及对策研究获奖科研报告
- 烟花爆竹安全培训课件
评论
0/150
提交评论