《面向对象程序设计》大作业--基于C#的一款扫雷游戏资料.docx
《《面向对象程序设计》大作业--基于C#的一款扫雷游戏资料.docx》由会员分享,可在线阅读,更多相关《《面向对象程序设计》大作业--基于C#的一款扫雷游戏资料.docx(82页珍藏版)》请在咨信网上搜索。
1、面向对象程序设计大作业-基于C#的一款扫雷游戏(完整版)资料(可以直接使用,可编辑 优秀版资料,欢迎下载)子程序中输出的结果:【答案】DC. 使用HAVING子句的同时可以使用WHERE子句9编写一个按学号删除的程序,删除CJK.DBF数据表(结构同第8题)中的指定记录。即:输入一个学号,在数据表中查找是否有此学号,如果没有则给出相应提示,如果存在此学号,则从数据表中将其删除。要求可以多次删除,直到输入的学号为“000”时,结束程序的运行。【答案】数据查询A. BOF()和EOF()均为.T.B. BOF()和EOF()均为.F.【答案】Memo23. 在SQL的SELECT查询中,HAVIN
2、G字句不可以单独使用,总是跟在_子句之后一起使用。accept 姓名: to xmnumother=numother+1面向对象程序设计大作业项目名称基于C#的一款扫雷游戏班级组员一、开发环境开发环境:vs2021开发语言:C#二、系统功能设计1.创建项目功能实现创建项目,找图片素材2.界面设计介绍关于扫雷游戏界面的设计提出希望在对应级别(初级、中级、高级、自定义)的按钮的显示勾,以表示目前的游戏等级。3.雷区绘制界面中雷区的绘制方法4.菜单操作有两个时候需要对它进行操作,一个是加载上次游戏设置的时候,一个是在游戏过程中进行设置的时候,设计菜单中的相关方法5.内部实现内部埋雷,放雷,标旗子,标
3、问号的方法6整体完善写游戏的胜利条件,自定义游戏的初始化及相关调试任务三、实现1、 创建项目功能实现玩过扫雷的读者应该知道,扫雷需要用到三种图片素材地雷、红旗、问号。当右击一个方块的时候,会插上红旗,表示游戏者认为该方块内有地雷;再次右击该方块,会变成问号,表示不确定该方块内是否有地雷;第三次右击该方块,问号消失,恢复到初始的状态。我们前往Iconfinder寻找合适的图标,并且通过Photoshop或者Illustrator的处理得到我们所需要的图标。文章中含有下载地址的图标资源可以使用右键目标另存为进行下载。通过一定的搜索以及图片的处理,得到了下面一组素材图标,下载地址:Doubbt、Fl
4、ag、Mine。除了这些素材以外,我们还需要找一个图标,使得整个程序看上去更加正式一点,这里使用图标如下,注意程序图标的后缀为ico,下载地址:favicon接下来,我们打开Visual Studio 2021开始创建工程,界面如下:创建好的项目如下图所示。我们需要对这个窗口的几项属性进行修改,首先通过Text属性将它的标题修改为“Minesweeper”;通过FormBorderStyle属性将它的大小设置为“FixedSingle”,即为不可调节窗口大小; 通过MaximizeBox属性将它的最大化按钮设置为“False”,即最大化按钮失效;通过Name属性将它的名称修改为“Form_Ma
5、in”,修改这个属性主要用于后面书写代码的方便; 通过BackColor属性将它的背景修改为“White”。如下图所示:我们可以顺便修改一下这个窗口的代码文件的名称。在右上方找到解决方案资源管理器,右击Form_1.cs重命名Form_Main.cs,程序会自动将下面包含的文件名也都改成一致的名称。如图所示:接下来我们需要修改一下程序的图标,将刚才下载的favicon文件放到Minesweeper/Minesweeper文件夹下,同时将三个图标资源放到Minesweeper/Minesweeper/Resources文件夹下(Resources文件夹需要自己新建),如下图所示:在属性栏中找到I
6、con属性,并且定位到favicon.ico文件,如下图所示:此时,我们按下快捷键Ctrl + S对整个工程进行保存,并且按下快捷键Ctrl + F5运行查看我们的程序,效果如下:2、 界面设计这一节我们主要介绍关于扫雷游戏界面的设计,此处我们借鉴经典扫雷界面的设计方法,首先需要创建一个菜单栏。具体方法在左边找到工具箱窗口,展开其中的菜单和工具栏,找到MenuStrip选项,如图所示:只需要双击该条目就可以在窗口中新建一个菜单栏,如图所示:对于这个控件(我们习惯上将窗口中的东西称作为控件),我们还是需要修改它的一些属性,对于个人习惯而言,我习惯于修改它的Name属性,这样编程的时候不至于将很多
7、控件混淆。我们将它的Name属性修改为“MenuStrip_Main”。单击“请在此键入”,输入“Game(&G)”,其中&G整体会显示成G这个字母下面加一个下划线,这样在用户使用的时候就可以通过按下字母G来访问这个按键了。(当然,顶层菜单还需要按下Alt键,例如Alt + G键。)输入以后的界面如图所示:使用同样的方法,创建如下图所示的一个菜单栏:注意到,图中的分割线,只需要输入一个减号,即“”,再按下回车键即可得到。我们一次介绍一下各个选项的功能,以便读者对它们有一个基本的了解。菜单一共有两组,一个为游戏(Game),一个为帮助(Help):其中游戏菜单下分别包含了新游戏(New Game
8、)、初级(Beginner)、中级(Intermediate)、高级(Expert)、设置(Setting)、标记(Mark)、音效(Audio)、排行榜(Rank)、退出(Exit);而帮助菜单下仅包含关于(About)。其中新游戏用来开始一场新的游戏;初级、中级、高级,用于选择不同的游戏难度;设置用于自定义扫雷区域的大小以及地雷的数目;标记用于设置是否启用红旗、问号这一类的标记;音效用于设置是否启用音效;排行榜用于对游戏时间进行排名(仅记录初级、中级、高级的结果,对于自定义游戏的结果不进行记录);退出用于退出游戏。最后,关于用来显示游戏的一些关于信息。对于初级、中级、高级、标记、音效这几个
9、菜单,我们需要在它的前面显示它的状态,即是否被选中,如果选中了就会在它的前面出现一个勾,如果没有选中,则没有,这是我们以后需要实现的功能,在此先进行说明。至此,我们的菜单栏就制作完成了。接下来我们需要制作一个用来记录地雷数目以及用时的功能。我们选择工具箱中容器的TableLayoutPanel,双击该项目,会在窗口中创建一个TableLayoutPanel控件。同样我们先将它的Name属性修改为“TableLayoutPanel_Main”。展开它的Size属性,将Height属性修改为48。同时修改它的Dock属性,选择Bottom,如图所示:我们会发现它会自动吸附在底部,如果改成别的参数则
10、会吸附在别的位置,这里我们设置为Bottom。同时将RowCount属性设置为1,ColumnCount属性设置为9。打开Columns属性对话框,按照下图进行修改:这里进行一些解释,其中Column1、Column3、Column5、Column7、Column9为中心对称的,用来设置边距,不放置任何控件,纯粹为了排版需要。接下来我们需要在Column2、Column8中分别放置地雷(Mine_Show.png)以及秒表(Timer.png)的图标,表示剩余的地雷数目以及已用时长。而Columns4、Columns6中分别放置用于显示地雷数目以及已用时长的文本。下载地址:地雷、秒表。在工具箱
11、中展开公共控件,找到PictureBox,将它拖动到TableLayoutPanel的第二个列中,同时将它的Name属性设置为“PictureBox_Mine”,Dock属性设置为Fill(表示充满整个页面,此处的页面即TableLayoutPanel中Column2全部),BackgroundImage属性定位到Mine_Show.png文件(通过导入按钮),BackgroundImageLayout属性设置为Stretch(表示自动缩放图像大小)。使用同样的方法加入一个PictureBox控件,将它放到Column8中,同时将Name属性设置为“PictureBox_Timer”,Back
12、groundImage属性定位到Timer.png文件,其余与PictureBox_Mine设置相同。其中图片导入的方法如下图所示:接下来我们需要添加两个用于显示内容的Label控件,展开工具箱中的公共控件,找到Label控件,分别拖动到Column4和Column6,并且将Dock属性设置为Fill,TextAlign属性设置为MiddleCenter(使文字显示在控件中心),Font属性设置为“Consolas, 16.2pt”(即Consolas字体,字号三号)。其Name属性及Text属性分别修改为“Label_Mine”和“Label_Timer”。同时将它们的ForeColor属性
13、分别设置为“DarkRed”和“HotTrack”(这项属性用于设置文字显示的颜色)。至此界面已经基本完成了,但是我们还需要增加一个控件Timer,用来计时。展开工具箱中的组件,双击Timer。这个控件不会在界面上显示,但是会在后台进行计时功能。同样,我们将它的Name属性修改为“Timer_Main”,Interval属性修改为“1000”(这里为计时间隔,以毫秒为单位,此处为1000毫秒,即1秒计时一次)。最后按下Ctrl + F5进行编译查看结果,相较于第一节中的界面已经有了很大的改观,如图所示:到这里或许读者会问,最为重要的扫雷区域怎么制作呢,关于这个区域,我们将会使用程序来生成,而不
14、是使用控件。我们将会在下一节中进行讲解。3、 雷区绘制这一节我们主要涉及界面中雷区的绘制方法。首先来考虑几个问题。为了保存整个雷区的信息,我们需要哪些数据。显然,除了要保存雷区的宽度和高度(分别定义为宽和高方向上方块的个数)外,还需要保存地雷的数目。这样我们需要用到三个变量nWidth, nHeight, nMineCnt分别保存雷区的宽度、雷区的高度以及地雷的数目。右击窗口,选择查看代码,也可以使用快捷键F7,如下图所示:可以看到这样的代码界面:在图示位置添加下图所示的代码,用来定义扫雷区域的基本变量,它们的含义在上文或者注释中都有提及:为了方便设置这三个参数,我们可以定义一个新的函数Set
15、Game,如下图所示:这样,我们就可以通过调用SetGame函数来设置游戏的参数了。为了方便阅读,我们可以为这个函数加上一个注释,在函数名上方输入”/“,程序会自动生成一个注释块,如下图所示:输入相关信息,第二行的内容是用来对函数的作用进行说明,下面的三行分别用来对三个参数的作用进行说明,将它们修改如下:这样当我们输入这个函数的时候(当然,我们目前还不需要调用这个函数。),就会显示出来对应的注释,如下图所示:到目前为止,我们的代码应该是这样的:接下来我们可以定义几个辅助函数,分别表示设置游戏参数为初级、中级、高级,如下图所示:在我们开始游戏的时候,我们希望它自动获取上次的游戏设置,如果这是第一
16、次开始游戏,那么将游戏设置为初级。我们先来看一下第一个需求,自动获取上次的游戏设置,这就意味着我们需要在上次游戏关闭的时候将上次的游戏设置保存下来。保存到哪里呢,我们在这里采用Setting文件来保存这些数据。工程创建的时候,系统会自动生成一个Setting文件。因此我们不需要自己创建,只需要使用原有的Setting文件即可。在右方解决方案资源管理器面板中展开Properties,右击Settings.settings,选择打开即可。打开后的界面如图所示:按照下图对它进行设置,设置完成后按Ctrl + S进行保存。注意到第四栏值,我们将它初始化为初级的参数,也就完成了我们刚才的第二个需求无法找
17、到上一次设置的时候,我们将它置为初级模式。就行了,我们需要通过代码将这些参数读入到定义的变量中去,加入如下图所示的代码:有了这些参数我们就可以绘制雷区了,我们假定雷区为3232的小方块,并且四周有一圈宽度为1的留白,用于与其它雷区区别,这样,每个雷区的实际大小为3434。接下去,我们将窗口切换到界面布局,选中主窗口,在左边的属性面板中,单击事件按钮,并找到Paint事件,双击该条目,系统会自动创建一个事件,我们将在这里绘制雷区。如下图所示:添加Paint事件以后,程序会自动跳到代码编辑窗口,并且会看到如下的代码:将Paint函数中的内容修改如下:然后,我们按下Ctrl + F5就可以看到下面的
18、效果:看上去感觉样式很奇怪,后边多出了很多空白的区域,而且下方还有一些部分没有显示出来,因为我们还没有根据游戏的参数调整窗口的大小。新建一个名为UpdateSize的函数,输入下图的代码:接下来我们在SetGame函数中调用这个函数,使得修改游戏参数的时候自动修改窗口大小,代码如下:最后不要忘记了在初始化读入上次游戏参数后也需要修改窗口大小,代码如下:最后按Ctrl + F5编译运行,得到最终结果:到目前为止,扫雷的界面已经基本出来了,下一节我们主要介绍一下菜单的相关代码。4、菜单操作我们现在的程序单击菜单的时候不会有任何反应,这一节我们主要介绍菜单的相关代码,使得菜单能够正常使用。在第二节中
19、,我们曾经提出希望在对应级别(初级、中级、高级、自定义)的按钮的显示勾,以表示目前的游戏等级。我们有两个时候需要对它进行操作,一个是加载上次游戏设置的时候,一个是在游戏过程中进行设置的时候,我们先介绍第一种情况。按照下图修改代码:注意到beginnerBToolStripMenuItem、intermediateIToolStripMenuItem、expertEToolStripMenuItem、settingSToolStripMenuItem分别表示四个等级的菜单的名称,通过修改它们的Checked属性来达到修改对应项目前面勾的状态。我们还需要在初始化函数中调用这个函数:这时候,我们运行
20、就会发现Beginner菜单前面的勾被选中了:下面我们来处理一下各个菜单按钮的事件,我们只需要双击菜单上的按钮,程序会自动创建对应的单击事件,我们只需要在其中书写代码即可。我们首先来创建Beginner、Intermediate、Expert、Exit、About菜单项目对应的事件。我们先介绍Beginner、Intermediate、Expert菜单项目对应的代码:接下来,我们处理Exit事件,我们希望在退出游戏之前询问游戏者是否确认退出,代码如下:然后,我们来处理About事件,我们希望得到类似Windows默认关于窗口的界面。为此,首先我们需要引用一个类,在代码的开头部分加上下图高亮部分
21、的代码:为了实现这样的功能,我们需要调用Windows系统内部的一个API,添加这样一个函数:在About事件中添加如下代码进行调用:运行以后查看结果如下图所示:可能细心的读者会发现,虽然我们通过菜单修改了游戏等级,但是我们窗口中的雷区却没有发生变化,因为我们没有在菜单被按下的时候没有调用UpdateSize函数。在三个按钮的事件中添加对UpdateSize函数的调用即可。代码如下:在此运行的时候,我们发现修改游戏等级的时候,游戏界面也会发生相应的变化。但是还有一点瑕疵,就是在大规模变成小规模的时候,边上会有多余的雷区。为了修正这个Bug,我们需要将原来Paint事件中代码放在一个新的函数Pa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象程序设计 面向 对象 程序设计 作业 基于 C# 一款 扫雷 游戏 完整版 资料
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。