public IPiece Create(ColourOfPiece colour, KindOfPiece kind, bool isFirstMovie = true) { ICheckStrategyFactory checkStrategyFactory = new CheckStrategyFactory(); ICheckStrategy checkStrategy = checkStrategyFactory.Create(kind, isFirstMovie); return(new ChessPiece(colour, kind, checkStrategy)); }
private void CastlingDecoratorChanges(IPiece piece, Position position, ChessboardModel chessboard) { var strategyFacctory = new CheckStrategyFactory(); switch (piece.Kind) { case KindOfPiece.Knight: piece.CheckStrategy = strategyFacctory.Create(piece.Kind, false); if (chessboard[0, position.Y].Piece?.Kind == KindOfPiece.Rook) { chessboard[0, position.Y].Piece.CheckStrategy = strategyFacctory.Create(KindOfPiece.Rook, false); } if (chessboard[7, position.Y].Piece?.Kind == KindOfPiece.Rook) { chessboard[7, position.Y].Piece.CheckStrategy = strategyFacctory.Create(KindOfPiece.Rook, false); } break; case KindOfPiece.Rook: piece.CheckStrategy = strategyFacctory.Create(piece.Kind, false); if (position.X == 0) { chessboard[4, position.Y].Piece.CheckStrategy = strategyFacctory.CreateKingStrategyWithCastlingDecorator(TypeOfCastling.Short); } else if (position.X == 7) { chessboard[4, position.Y].Piece.CheckStrategy = strategyFacctory.CreateKingStrategyWithCastlingDecorator(TypeOfCastling.Long); } break; default: throw new ApplicationException("unexpected argument"); } }