




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学号:课程设计题目扫雷游戏学院计算机学院专业软件工程班级0803班姓名徐泽前指导教师2023年7月15日扫雷游戏1规则描述游戏开始后,系统会在雷区的小方块中随机布下若干个地雷。部署完毕后,系统会在其他非雷方块中填充一些数字。某一个具体数字表示与其紧邻的8个方块中雷方块的数量,玩家可以根据这些信息去半段时候可以打开某些方块,并把认为是地雷的方块打上标记,当玩家吧所有地雷找出来后,其余非雷方块区域都已打开,这时游戏结束。在游戏过程中一旦错误的打开了雷方块则立即失败,游戏结束;当玩家标识的地雷数量超过程序设定,虽然打开了全部其余方块,游戏仍不会结束。2软件环境WindowsXPMicrosoftVisualC++3功能需求分析游戏需要提供两个计数器,一个用来显示用户扫雷所花费的时间,以秒为单位;一个用来显示当前还剩多少个雷方块。另外提供一个按钮,用来开始游戏。在游戏区域方面,按功能将它分成两大区域:雷区和提示区。提示区除了上面提供的计数器外,还包括两个按钮,一个用来开始游戏,一个用来显示版本信息。游戏过程中,当玩家用鼠标点击相应的方块,程序就会做出相应的鼠标响应时间,程序处理这些鼠标时间的过程中会伴随着GDI绘图,而众多鼠标事件的处理,都是围绕着实现扫雷程序的算法而衍生的。4程序实现4.1界面设计图1界面设计图4.2具体实现4.21布雷随机获取一个状态为非雷的点,将它的属性标识为雷,重复这样的工作,直到布下足够的累为止,流程图如下在CMineWind类中添加游戏的布雷模块的处理函数,该函数的具体实现如下所示:VoidCMineWnd::LayMines(UINITrow,UINTcol){Srand((unsigned)time(NULL));UINTi,j;for(UNITindex=0;index<m_uMineNum;){i=rand()%m_uYNum;j=rand()%m_uXNumif(i==row&&j==col)continue;if(m_pMines[i][j].uAttrib!=ATTRIB_MINE){m_pMines[i][j].uAttrib=ATTRIB_MINElindex++;}}}4.22扫雷当布雷完毕后,接下来就是扫雷了,从开始扫雷到游戏结束的整个过程中,游戏会根据鼠标的不同动作,做出相应的计算以及反馈。也就是说,只需要将算法加载到各种鼠标的时间处理中,就可以实现整个游戏的核心。接下来就分析不同的鼠标时间,应该做出什么样的计算处理。鼠标左击事件流程如下:voidCSweepmineDlg::OnLButtonDown(UINTnFlags,CPointpoint)//单击事件{ //TODO:Addyourmessagehandlercodehereand/orcalldefault GRID*grid=GetLikeGrid(point); if(grid!=NULL) { grid->m_IsShow=TRUE; if(grid->m_State==ncMINE) { ShowAllMine(); Invalidate(); KillTimer(1); MessageBox("你输了,请再接再厉!"); if(MessageBox("是否继续新游戏?","系统提示",MB_YESNO |MB_ICONQUESTION)==IDYES) { OnButstart(); } else OnCancel(); } elseif(grid->m_State==ncNULL) DownNullShow(grid); Invalidate(); } CDialog::OnLButtonDown(nFlags,point);}VoidCSweepmineDlg::OnLButtonDblClk(UINTnFlags,CPointpoint)//双击事件,进行拓展{ GRID*grid=GetLikeGrid(point); if(grid!=NULL) { intnum=IsNumber(grid->m_State); if(num!=9) { grid->m_IsShow=TRUE; DblClkNum(grid,num); } Invalidate(); } CDialog::OnLButtonDblClk(nFlags,point);}鼠标右击事件:voidCSweepmineDlg::OnRButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault GRID*grid=GetLikeGrid(point); if(grid!=NULL) { if(m_Flag==70) { MessageBox("标记已用完!"); return; } if(grid->m_State==ncFLAG) { for(inti=0;i<70;i++) { if(m_FlagRect[i]==grid->m_Rect) { grid->m_State=m_FlagState[i]; m_FlagState[i]=ncUNDOWN; m_FlagRect[i]=0; grid->m_IsShow=FALSE; m_Flag--; CStringstr; str.Format("剩余地雷数:%d",70-m_Flag); m_Number.SetWindowText(str); } } } else { if(grid->m_IsShow==FALSE) { m_FlagRect[m_Flag]=grid->m_Rect; m_FlagState[m_Flag++]=grid->m_State; CStringstr; str.Format("剩余地雷数:%d",70-m_Flag); m_Number.SetWindowText(str); grid->m_State=ncFLAG; grid->m_IsShow=TRUE; if(IsWin()) { KillTimer(1); MessageBox("你赢了"); if(MessageBox("是否继续新游戏?","系统提示",MB_YESNO |MB_ICONQUESTION)==IDYES) { OnButstart(); } else OnCancel(); } } } Invalidate(); } CDialog::OnRButtonDown(nFlags,point);}关键技术:在设计扫雷游戏时,现在对话框中绘制软件的背景位图,绘制的位图是以一个网格为单位的,然后在网格中随机布雷,并通过算法计算无雷网格中应该显示的数据。如果当前网格周围的8个网格中没有地雷,则显示为空地,否则,周围的8个网格中有几个地雷则显示数字几,当用户翻开空地时,会自动翻开空地周围的数字,通过鼠标右键可以标记地雷,并可以取消地雷标记,用户胜利的条件是将所有得嘞都标记出来。如果标记的地雷为止都是地雷的位置则游戏胜利,标记数和地雷数是相同的,所以当标记用完而游戏还没有结束时,说明标记的地雷有错误,这样扫雷游戏结束5程序运行结果程序运行结果如图6总结体会不足在课程设计的这段日子里,发现自己有很多的知识还没有掌握好,最先的时候,学习的都是一些基本的理论知识,觉得个人掌握的还是很好的。应用后才发现缺点和不足。在课程设计中间,出了很多错误,不是把引用弄错了,就是把代码写错地方了。有时候,往往把写在数据层的代码,写到了逻辑层。而在接口层的时候,却发现在其他地方没有定义。点击运行的时候,错误一大片。最后,只有重新开始,最后发现调用函数可以让程序层次清晰很多。
C#这么语言,是目前世界上非常流行的语言之一。而我学习的只是处在一个入门的位置上。我们需要在今后发更多的时间去了解这门功能强大的语言,之所以应用c#,也是让自己接触更多的编程语言。学习并应用它。让自己有更大的提高。通过课程设计我发现编程能力要提高,方法很多,最重要的就是练习,可以认真学习教材上面的例题,最后把上面的代码自己写一遍,看看运行的结果和教材给出的结果是否一致。要学会看代码,最好的方法就是看设计器中的代码。通过实践找出一个很好的方法去调试程序,寻找并改正程序中错误。
参考文献[1]karliWatson,hristianNagel编C#入门经典(第四版)清华大学出版社2023.12[2]王小科、吕双编C#从入门到精通清华大学出版社2023.9[3]宋学江、赵兰编C#轻松入门人民邮电出版社202
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年质量管理体系考试题及答案
- 2025年视觉传达设计模拟测试题及答案
- 零售转型面试题及答案
- 数据传输速率优化试题及答案
- java抖音电商面试题及答案
- 机电工程中的创新思维训练及试题与答案
- 如何高效利用在线课程备考信息系统项目管理师试题及答案
- 网络工程师考试的重要性深度剖析试题及答案
- 项目管理实务考点解读试题及答案
- 公共政策对环境正义的影响考题及答案
- 防范恶劣天气安全教育
- 第七章邮轮游客投诉心理及处理技巧46课件
- 深圳市住房公积金管理中心员额人员招聘真题2024
- 梅州市大埔县客家围屋小学-携数同行静待花开-二年级下册数学家长会【课件】
- 耳鼻喉护理学试题及答案
- 2025年广西高考历史模拟预测试卷(含答案解析)
- 《张宇托福听力》课件
- 2024-2025学年人教版五年级下册期末测评数学试卷(二)含答案
- 人工智能助力医院管理与运营效率提升
- 湖北中储粮直属库新建储备仓项目建设可行性研究报告
- 2025年就业指导课程
评论
0/150
提交评论