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)); } }
/// <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); }
/// <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()]++; }