上节说道了对这个游戏 面向对象的分析,各位读者 ,有什么不懂,尽情给我留言把!!!!!!
闲话少说,这节我们对 游戏的实体类,先进行伪代码分析,然后进行源代码的分析。
我们先看这些类的整体的架构如下图所示:
Piece类 代表相应的棋子的类, 他应该有 位置这个属性,而位置的最好的体现是通过纵坐标横坐标来体现;相应形状这个属性代表是黑色用户控件还是白棋的用户控件。
类型属性代表代表这是黑棋, 还是白棋;
索引属性 插入相应的索引的位置。 相应源代码如下:
private UserControl _shape;
private Position _position;
///
/// Gets or sets the X.
///
/// The X.
public int X
{
get { return _position.X; }
set { _position.X = value; }
}
///
/// Gets or sets the Y.
///
/// The Y.
public int Y
{
get { return _position.Y; }
set { _position.Y = value; }
}
///
/// Gets or sets the position.
///
/// The position.
public Position Position
{
get { return _position; }
set { _position = value; }
}
public PieceType Type { get; set; }
public int Index { get; set; }
///
/// Initializes a new instance of the class.
//
public Piece()
{
_position = new Position(0,0);
}
///
/// Gets the shape.
///
/// The shape.
public UserControl Shape
{
get
{
if (_shape == null)
{
if (Type == PieceType.Black)
_shape = new BlackPieceComponent();
if (Type == PieceType.White)
_shape = new WhitePieceComponent();
}
return _shape;
}
}
PieceBoard(棋盘) 这个类 是用于对棋盘进行面向对象的处理后的类, 他有那些属性和方法了
首先,考虑整块游戏只需要一块棋盘,因此我们是不是用单例模式来产生这快棋盘。 说道单例模式的话,有一个 相应类事例和产生单独一个对象的方法。
棋盘棋盘本身就是盛放棋子的容器,因此我们这里需要一个盛放棋子的数组,为什么是数组啊? 因为棋盘是15*15方格子。
相应的源代码如下
public class PieceBoard
{
static PieceBoard _Instance { get; set; }
public Piece[,] pieces { get; set; }
private PieceBoard()
{
Init();
}
private void Init()
{
pieces = new Piece[AppConfig.BoardWidth, AppConfig.BoardWidth];
}
public static PieceBoard GetPieces()
{
lock (_Instance)
{
if (_Instance==null)
{
_Instance = new PieceBoard();
}
}
return _Instance;
}
}
怎么知道谁赢了,当然是有一套复杂判断连五子的方法,显然,我们需要一套复杂,的算法。这节我们不说他,说一说储存胜利结果的类。
WinningResult 他有哪些属性,谁取胜的一个枚举的属性,一个那种棋子属性,一个棋子的泛型数组。可能读者就纳闷了,前两个属性需要
还好理解,而一个棋子的泛型数组 是干嘛的,首先他不是吃饭的。他是把每个胜利结果下的棋子储存起来,以做以后判断使用。
相应的源代码如下:
public class WinningResult
{
public WinningType wtype { get; set; }
public PieceType ptype { get; set; }
public List piecs;
public WinningResult()
{
piecs = new List();
}
}
这里说他两个枚举类型,源代码就不用多贴了,PieceType棋子的类型分别 代表的 白色、黑色类型。 WinningType 胜利的类型, 有水平,垂直,斜起方向。
你会问我为什么要枚举,简而言之,就是避免**数字, 更好的见名之义。 增强源代码的可读性。 是1更好理解, 还是Black更好的理解,你说了
我这节说的够多了,就此休笔把!!! 欲知后事如何,且听下回分解。