189 8069 5689

详解从零开始---用C#制作扫雷游戏-创新互联

学C#的原因其实挺简单的,因为一直对游戏挺感兴趣,查了下比较流行的游戏引擎Unity的主要开发语言是C#,所以就决定从C#入手,学学面向对象的编程方法。

成都创新互联服务紧随时代发展步伐,进行技术革新和技术进步,经过十余年的发展和积累,已经汇集了一批资深网站策划师、设计师、专业的网站实施团队以及高素质售后服务人员,并且完全形成了一套成熟的业务流程,能够完全依照客户要求对网站进行成都网站制作、成都网站建设、建设、维护、更新和改版,实现客户网站对外宣传展示的首要目的,并为客户企业品牌互联网化提供全面的解决方案。

以前基本都做的是嵌入式开发,做嵌入式久了,基本上只用C语言,C语言面向过程的特性在嵌入式编程这种资源极度受限的情况确实十分有利,但这种方式在面对大型软件的开发的时候就很难胜任了。编程的模式其实是一种思维习惯,习惯久了以后,想改变确实是一个艰难的过程···

说起C#,其实在大学的时候学过一个学期,说来惭愧那时候倒也没把它当一门面向对象的语言(其实是当时根本不知道面向对象是啥),感觉跟C语言也就一点语法差异,把所有的用法全部归为语法不同,说来也神奇,这种方法倒也能编程。最终学期结束的时候交上去一份用Winform开发的扫雷游戏结束了我的C#学习,在那之后就再也没碰过C#。

现在重拾C#,为了免除掉不必要的干扰,并没有直接在Unity上学习,而是仍然在VS中学习,但这次选择了比较新的WPF,而不是WInform,作为学习,第一个任务还是跟以前一样做一个扫雷游戏。

写在不怎么前面的前面:本文主要分享下程序分析过程,具体的实现方法不是本文重点,对实现有问题的朋友可以自行评论区留言索要源码或者提问^_^。

一、分析

1.游戏分析

那进入正题,应该如何完成这个游戏。忽略细枝末节的部分(如计时,显示剩余雷数,菜单栏等)不说,就单说这个游戏的主体:扫雷区。

在游戏没开始的时候,扫雷区放眼望去其实只有一个东西,那就是方块...

详解从零开始---用C#制作扫雷游戏

忽略光影效果不谈(是的,我又忽略了···),所有方块的颜色都一样,都响应相同的事件,那就是左键和右键。左键点开方块,右键给方块做个标记,认定为地雷。再继续分析,方块具有不同的种类。有的方块点开之后周围会有一大片方块一起打开。有的方块下面是地雷,点开就GameOver。还有方块下面是数字,代表着周围有多少个地雷。(果然,我又忽略了鼠标两个键同时按自动打开周围格子和第二次右键可以显示问号的功能···但其实之后会发现这个功能其实要增加也会很简单)。

所以,先来总结下扫雷游戏实现的核心:

  1. 方块会响应鼠标事件(左键按下,左键单击,右键按下,鼠标移入,鼠标移出)。
  2. 方块被点开后的效果有三种(炸弹,数字,空),其中为空的时候会自动展开周围所有的方块。
  3. 方块只能被打开一次,之后不再响应按键事件。
  4. 当插旗的方块数和地雷数相等,并且每个包含地雷的方块都被插了旗,则游戏胜利。
  5. 当包含地雷的方块被打开,则游戏失败。

2.实现技术分析

经过分析,是不是发现扫雷的的玩法其实很简单,实现的技术也不难,全是静态的没有动画的存在。

方块的表现很像一个只能按一次的按钮(事实上,在大学的时候我就是直接继承的按钮控件)。

但这一次为了能使用到更多C#相关的东西我使用了更加麻烦的自定义控件的方式。

方块有三种表现形式,为特殊性,但很显然也具有共性,所以在设计的时候,我把按钮共性抽离出来,设计成了一个抽象的基类Cube。方块有三种类型,但因为我懒,所以把其中的两种(空白和数字)合并为了NumCube类,包含地雷的为BombCube类,这两个类分别继承了Cube。

Cube的实现:

详解从零开始---用C#制作扫雷游戏

Cube类中拥有以下字段:

详解从零开始---用C#制作扫雷游戏

ImageSource cubeNormalPic
ImageSource cubeOnPic
ImageSource cubeDownPic
ImageSource cubeDisablePic
ImageSource cubeFlagPic

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:详解从零开始---用C#制作扫雷游戏-创新互联
转载来于:http://cdxtjz.cn/article/djpphp.html

其他资讯