예제 #1
0
        private void ValidateIfLimitExceeded(IPiece piece)
        {
            var colorType = piece.GetColorType();

            if (countOfPieces[colorType] >= piece.CountLimit)
            {
                throw new LimitExceededException(string.Format("Exceed the limit of {0} pawn", piece.PieceColor));
            }
        }
예제 #2
0
        /// <summary>
        /// Remove a piece from a coordinate.
        /// </summary>
        /// <param name="coordinate">The coordinate of the square a piece is removed from.</param>
        /// <returns></returns>
        public IChessBoard RemovePiece(IPiece piece, Coordinate coordinate)
        {
            // validation
            CoordinateValidator.ValidateIfInsideChessBoard(coordinate);
            ValidatePieceAtCoordinate(piece, coordinate);

            // remove
            pieces[coordinate.X, coordinate.Y] = null;
            piece.ChessBoard = null;
            countOfPieces[piece.GetColorType()]--;
            return(this);
        }
예제 #3
0
        /// <summary>
        /// Add a piece to a square when setting up a chess board.
        /// </summary>
        /// <param name="piece">A piece object.</param>
        /// <param name="coordinate">The coordinate of a square into which a piece is to be added.</param>
        public void AddPiece(IPiece piece, Coordinate coordinate)
        {
            // validation
            CoordinateValidator.ValidateIfInsideChessBoard(coordinate);
            piece.ValidateCoordinate(coordinate);
            ValidateDuplicatePositioning(piece, coordinate);
            ValidateIfLimitExceeded(piece);

            // add
            piece.Coordinate = coordinate;
            pieces[coordinate.X, coordinate.Y] = piece;
            piece.ChessBoard = this;
            countOfPieces[piece.GetColorType()]++;
        }