我目前正在创建一盘棋,由以下类:国际象棋游戏的设计和Singleton模式
- ChessPiece - 对于所有不同的棋子,用MovementBehaviour实例变量
- MovementBehaviour组成 - 由PawnMovementBehaviour实现的接口, KingMovementBehaviour等类定义 如何移动每个块类型
- 器ChessBoard - 与像addPiece()/ removePiece()功能的ChessPiece [] [] 2D阵列由......组成/ replacePiece()等
- 播放 - 小类有助于关联哪个片属于哪个演奏人
- 游戏 - 主要的课程首先要询问玩家的名字和想要的棋子颜色,然后通过实例化棋盘并让玩家移动转过 转到达到将军。
我想知道如果我应该使用Singleton模式(关于ChessBoard类)?目前我不是,我正在将棋盘的实例传递给棋子移动功能,以便棋子可以理解其周围环境。这是因为当然移动被认为是合法的,这取决于任何时候在棋盘上占用/空的空间。
当涉及到典当时,注意MovementBehaviour:en-passant取决于对手的previoius移动。 Castling需要考虑其他因素(不能通过检查进行城堡检查,这两件棋子都不得在castling之前移动)。如果我是你,我不会选择单身。把棋盘作为每件棋子的父对象似乎对我来说是合理的。 – Bathsheba
你希望从Singleton模式中获得什么?如果有的话,您的设计的灵活性和一致性会产生什么样的成本? – GaryF