2.实现技术分析
经过分析,是不是发现扫雷的的玩法其实很简单,实现的技术也不难,全是静态的没有动画的存在。
方块的表现很像一个只能按一次的按钮(事实上,在大学的时候我就是直接继承的按钮控件)。
但这一次为了能使用到更多C#相关的东西我使用了更加麻烦的自定义控件的方式。
方块有三种表现形式,为特殊性,但很显然也具有共性,所以在设计的时候,我把按钮共性抽离出来,设计成了一个抽象的基类Cube。方块有三种类型,但因为我懒,所以把其中的两种(空白和数字)合并为了NumCube类,包含地雷的为BombCube类,这两个类分别继承了Cube。
Cube的实现:

Cube类中拥有以下字段:

ImageSource cubeNormalPic
ImageSource cubeOnPic
ImageSource cubeDownPic
ImageSource cubeDisablePic
ImageSource cubeFlagPic
这5个字段是用来设置Cube在各个状态所显示的图片的(普通,鼠标进入,左键按下,失能,标记)
Bool isEnable
Bool isFlag
这两个字段就是标记Cube是否被使能和Flag
Image cubeImageHigh
Image cubeImageLow
这2个是两个image控件,作用是用来显示图片,之所以要2个图片是因为旗子图片被设计为一个叠加在Cube上的图片。
下面再来重点讲下下面2个东西:
displayCube
mouseEvent
在设计中,这是两个接口,分别用来处理鼠标事件和方块的展开。不同于直接在内部直接实现接口,将两个接口设计为Cube属性是为了能动态的修改这两个接口的实现方式,不至于每次修改都需要对Cube内的代码进行修改,且可以实现每个不同的Cube都使用不同的代码而不需要使用重写,这种方式在设计模式中也叫“策略模式”。
Cube只拥有一个方法,那就是Open,但这个方法其实也是有display接口代理实现。
public void Open()
{
if (displayCube != null)
{
displayCube.Open(this);
}
}
displayCube.Open(this)之所以要把自身传入,是因为Open方法要用到Cube自己的参数和方法。
BombCube继承自Cube










