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)); }
public ICheckStrategy Create(KindOfPiece kindsOfPiece, bool isFirstMovie) { switch (kindsOfPiece) { case KindOfPiece.Knight: return(new KnightCheckStrategy()); case KindOfPiece.Queen: return(new QueenCheckStrategy()); case KindOfPiece.Rook: if (isFirstMovie) { var checkStrategy = new RookCheckStrategy(); var firstMoveDecorator = new FirstMovieDecorator(); firstMoveDecorator.Component = checkStrategy; return(firstMoveDecorator); } else { return(new RookCheckStrategy()); } case KindOfPiece.Pawn: return(new PawnCheckStrategy()); case KindOfPiece.King: if (isFirstMovie) { return(CreateKingStrategyWithCastlingDecorator(TypeOfCastling.Both)); } else { return(new KingCheckStrategy()); } case KindOfPiece.Bishop: return(new BishopCheckStrategy()); default: throw new ApplicationException("unexpected argument"); } }
public AdvancePiece(ColourOfPiece colour, KindOfPiece kind, ICheckStrategy checkStrategy) : base(colour, kind, checkStrategy) { IsFirstMove = true; }
public ChessPiece(ColourOfPiece colour, KindOfPiece kind, ICheckStrategy checkStrategy) { Colour = colour; Kind = kind; CheckStrategy = checkStrategy; }