您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 项目11:Windows程序的功能设计——“扫雷”游戏
C#程序设计主讲教师:杨剑1项目11:Windows程序的功能设计——“扫雷”游戏一、教学内容及要求能力培养:1、理解基于Windows的应用程序的基本概念2、掌握Windows窗体和控件的常用属性。3、掌握一些常用的Windows窗体控件的使用。4、学会创建较为复杂的Windows应用程序。。核心技能点:1、Windows窗体应用程序中窗体、控件、事件的基本概念。2、Windows窗体控件的共同特性。3、常用的Windows窗体控件。扩展技能点:1、Windows窗体和控件的常用属性2、Windows窗体的设计和创建3、各种控件的综合应用教学内容:1、项目介绍。任务1:“扫雷”游戏(5分钟)2、案例演示:程序流程任务2:讲解程序设计流程。(15分钟)3、案例演示:主要功能实现任务3:讲解主要功能的实现方法。(30分钟)4、课内实践:任务4:利用C#/WinForms编程,编写一个小游戏“扫雷”。(130分钟)(1)游戏功能和Window中的扫雷功能相同。(2)程序界面显示当前剩余地雷数和用时。点击中间的按钮可以重新开始游戏。(3)左键点击每一个小方框,如果没有地雷,则显示其上下左右及对角线共8个小方框中的地雷数。1代表上下左右及斜角合计有一颗雷,依次类推,2则有2颗,3则有3颗,如果其周围没有雷(0),则不显示,并将和其相临(上下左右及对角线共8个小方框)中地雷数为0的方框都显示出来。如果该方框是地雷,则游戏结束,并显示所有雷的位置。在确定是炸弹的方格上点右键出现一个旗子,表示你认为这是一个雷,上方显示的地雷数减1。在有旗子的方框中再点击将出现问号,表示你不确定这里有没有炸弹。再点击将取消标志。C#程序设计主讲教师:杨剑2(4)在游戏菜单中,可以设置雷区的大小及地雷的数量。(5)具体功能,可以参考Windows的扫雷游戏二、教学重点、难点及解决办法教学重点:1、Windows窗体控件的共同特性2、常用的Windows窗体控件教学难点:1、Windows窗体的设计和创建2、各种控件的综合应用教学方法:基于CDIO的课程改革,应用了CDIO教育模式。以“做中学”为出发点,实施“知识讲解案例化、课内课外协作化、实战演练一体化”的教学模式。由传统的教师引导课堂转变为以学生为主体,课本中的知识点讲解转变为“项目”主导,将传统的课堂模式转变为了以实际经验为核心。三、教学设计1、教学进程工程化将教学内容按CDIO理念,以项目为核心,并结合课程内容设计了四个环节的内容,包括构思环节、设计环节、实现环节、运作环节,同时,在课程的教学过程中,主要采用“做中学”的教学理念来实现“教学做”一体化。以项目为载体,将抽象的知识融入到项目中,通过项目的学习将知识点分解,将“工程”教学思想体现在教学中,进而提高学生的学习效果。2、教学设计递进化根据“工程化”的思想,教学模式的设计呈递进化趋势,每一个教学项目的实现将分成四个部分来完成:任务的明确,实施方案的编写,项目的实施和项目的评价3、实践设计层次化在项目的实施过程中,主要组织层次化教学。在教学中,采取“基础实验”“综合实验”,“综合性课程设计”的设计。4、课程考核工程化考核以过程考核和工程验收测试相结合的方式进行。本门课程采取的是形成性考核方式,考试成绩由本门课程学习期间的多项过程成绩组合而成5、知识讲解案例化根据CDIO的思想,对知识点采取案例化教学法,6、课内课外协作化C#程序设计主讲教师:杨剑37、实战演练一体化为了让学生对所学课程加深理论知识,并能够将相关知识结合到实际应用中,学生需要自选一个相关主题进行综合项目的开发,提高综合应用能力。在这个环节中,学生是主体,教师主要负责引导和监控,学生需要在这个阶段发挥自身能力,以团队的形式完成项目,并由此锻炼学生的团队合作意识。四、教学过程1、项目介绍。任务1:“扫雷”游戏(5分钟)(1)程序开始界面如图所示。第一个文本框(左)显示当前剩余地雷数,第二个文本框显示用时。点击中间的按钮可以重新开始游戏。(2)左键点击每一个小方框,如果没有地雷,则显示其上下左右及对角线共8个小方框中的地雷数。1代表上下左右及斜角合计有一颗雷,依次类推,2则有2颗,3则有3颗,如果其周围没有雷(0),则不显示,并将和其相临(上下左右及对角线共8个小方框)中地雷数为0的方框都显示出来。如果该方框是地雷,则游戏结束,并显示所有雷的位置。在确定是炸弹的方格上点右键出现一个旗子,表示你认为这是一个雷,上方显示的地雷数减1。在有旗子的方框中再点击将出现问号,表示你不确定这里有没有炸弹。再点击将取消标志。C#程序设计主讲教师:杨剑4(3)在游戏菜单中,可以设置雷区的大小及地雷的数量。(4)具体功能,可以参考Windows的扫雷游戏2、案例演示:程序流程任务2:讲解程序设计流程。(15分钟)3、案例演示:主要功能实现任务3:讲解主要功能的实现方法。(30分钟)(1)请自行准备几张图片:地雷、炸开的地雷、旗子、笑脸、哭脸(2)雷区可以用Button二维数组;Button[,]butMine=newButton[N,N];N表示行总数和列总数(3)为记录地雷的分布及相关信息。可以设置一个结构。structMineInfo{publicintrow;//行号publicintcol;//列号publicintdata;//1表示有地雷,0表示没有地雷publicintnum;//其上下左右及对角线的地雷数//鼠标右击了几次:0,1,2,对应的按钮在空白-旗子-问号之间切换,-1表示已显示了数字publicintstyle;,}//这里的0,1,2,-1等取值可以考虑使用枚举更好一点。定义一个MineInfo的数组存储每个方框的地雷信息。MineInfo[,]mineInfo=newButton[N,N];C#程序设计主讲教师:杨剑5(4)初始化地雷的分布及相关信息:用一个二重循环,内循环语句为:mineInfo[i,j]=newMineInfo()mineInfo[i,j].row=i;mineInfo[i,j].col=j;mineInfo[i,j].data=0;mineInfo[i,j].style=0;(5)布雷。Randomr=newRandom();while(countNUM)//NUM为地雷总数,count为当前已布雷数,初始为0{introw=r.Next(0,N);intcol=r.Next(0,N);if(mineInfo[row,col].data==0){mineInfo[row,col].data=1;count++;}}在布完雷后,需要计算出每个方框其上下左右及对角线的地雷数,即为mineInfo[row,col].num赋值;(6)在窗体上布局地雷(按钮)。可以使用一个容器控件:Panel来容纳地雷按钮,由于雷区大小和雷数是变化的,所以按钮需要动态添加。首先:清空Panel中的所有子容器:panel1.Controls.Clear();然后,使用循环生成每一个:butMine,并设置所正确的位置,和相关信息:butMine[i,j]=newButton();//实例化每一个按钮intw=panel1.Size.Width/N;//panel的宽度inth=panel1.Size.Height/N;//panel的高度intx=panel1.Location.X;//panel的位置(x轴),示例,通过该属性可以得到一个控件的坐标inty=panel1.Location.Y;//panel的位置(y轴)butMine[i,j].Size=newSize(w,h);//按钮的尺寸butMine[i,j].Location=newPoint(i*w,j*h);//按钮的位置(以panel的x,y坐标为参照)butMine[i,j].FlatStyle=FlatStyle.Standard;//按钮的外观butMine[i,j].Tag=mineInfo[i,j];//把地雷信息添加到按钮的Tag属性中。//添加按钮的鼠标单击事件的响应函数为But_MouseDownbutMine[i,j].MouseDown+=newMouseEventHandler(But_MouseDown);panel1.Controls.Add(butMine[i,j]);//把按钮添加到Panel中(7)在But_MouseDown(objectsender,MouseEventArgse)中完成游戏主要C#程序设计主讲教师:杨剑6操作。可以通过:e.Button==MouseButtons.Right知道是按了右键;同样:e.Button==MouseButtons.Left是按了左键。1)当按了右键,且style==0,表示第一次右击,显示旗子2)当按了右键,且style==1,表示第二次右击,显示问号3)当按了右键,且style==2,表示第三次右击,回到空白状态4)当按了左键,且style==0,如果是地雷,显示地雷爆炸。并:but.MouseDown-=newMouseEventHandler(But_MouseDown);//删除单击事件处理程序(but为获取的被点击的按钮)游戏结束!如果不是地雷:则在按钮上显示周围有几颗雷,通过以下程序设置按钮形态:but.FlatStyle=FlatStyle.Flat;but.FlatAppearance.MouseDownBackColor=but.FlatAppearance.MouseOverBackColor=but.BackColor;but.FlatAppearance.BorderColor=Color.White;but.MouseDown-=newMouseEventHandler(Form1_MouseDown);//删除单击事件处理程序同时,如果其周围地雷数为0,按钮上不显示数字,但需依次激发周围8个按钮的鼠标单击事件。以将周围所有四周没有地雷的按钮翻出来。这可以通过按钮的PerformClick();方法完成。(注:周围、四周是指其上下左右及对角线共8个小方框)4、课内实践:任务4:利用C#/WinForms编程,编写一个小游戏“扫雷”。(130分钟)(1)游戏功能和Window中的扫雷功能相同。(2)程序界面显示当前剩余地雷数和用时。点击中间的按钮可以重新开始游戏。(3)左键点击每一个小方框,如果没有地雷,则显示其上下左右及对角线共8个小方框中的地雷数。1代表上下左右及斜角合计有一颗雷,依次类推,2则有2颗,3则有3颗,如果其周围没有雷(0),则不显示,并将和其相临(上下左右及对角线共8个小方框)中地雷数为0的方框都显示出来。如果该方框是地雷,则游戏结束,并显示所有雷的位置。在确定是炸弹的方格上点右键出现一个旗子,表示你认为这是一个雷,上方显示的地雷数减1。在有旗子的方框中再点击将出现问号,表示你不确定这里有没有炸弹。再点击将取消标志。(4)在游戏菜单中,可以设置雷区的大小及地雷的数量。(5)具体功能,可以参考Windows的扫雷游戏五、参考资料[1]VisualC#.NET程序设计教程(第2版),罗福强,白忠建,杨剑,人民邮电出版C#程序设计主讲教师:杨剑7社,2012-8[2]C#入门经典(第5版),(美)沃森,(美)内格尔等著,齐立波翻译,黄静审校,清华大学出版社,2010-12[3]精通C#(第6版),(美)特罗尔森著,姚琪琳等译,人民邮电出版社,2013-07[4]精通C#5.0与.NET4.5高级编程——LINQ、WCF、WPF和WF,张敬普,丁士锋等编著,清华大学出版社,2014-02
本文标题:项目11:Windows程序的功能设计——“扫雷”游戏
链接地址:https://www.777doc.com/doc-4711215 .html