예제 #1
0
 public override void Undo()
 {
     if (executed)
     {
         TargetTile.DetachPiece();
         SelectedTile.AttachPiece(Piece, PieceHasMoved);
         if (Piece is IEnPassantable)
         {
             IEnPassantable enPassantablePiece = Piece as IEnPassantable;
             enPassantablePiece.CurrentlyEnPassantable = false;
         }
         executed = false;
     }
 }
예제 #2
0
 public override void Execute()
 {
     if (!executed)
     {
         SelectedTile.DetachPiece();
         TargetTile.AttachPiece(Piece, true);
         if (Piece is IEnPassantable)
         {
             IEnPassantable enPassantablePiece = Piece as IEnPassantable;
             enPassantablePiece.CurrentlyEnPassantable = true;
         }
         executed = true;
     }
 }
예제 #3
0
 public void DisableEnPassantables(Alliance alliance)
 {
     foreach (Tile tile in Board.CurrentState.Tiles)
     {
         if (!tile.IsVacant)
         {
             if (tile.Piece is IEnPassantable)
             {
                 if (tile.Piece.Alliance == alliance)
                 {
                     IEnPassantable enPassantablePiece = tile.Piece as IEnPassantable;
                     enPassantablePiece.CurrentlyEnPassantable = false;
                 }
             }
         }
     }
 }
예제 #4
0
        public override ReadOnlyCollection <Move> GetCandidateMoves(BoardState board, ChessPiece piece)
        {
            ReadOnlyCollection <Tile> CandidateTiles = GetCandidateTiles(board, piece);

            List <Move> CandidateMoves = new List <Move>();

            foreach (Tile tile in CandidateTiles)
            {
                if (tile.Piece is IEnPassantable)
                {
                    IEnPassantable enPassantablePiece = tile.Piece as IEnPassantable;
                    if (enPassantablePiece.CurrentlyEnPassantable)
                    {
                        CandidateMoves.Add(new EnPassantMove(board[piece.Row, piece.Column], board[piece.Row + MovementBaseStepY, piece.Column + MovementBaseStepX], tile));
                    }
                }
            }
            return(CandidateMoves.AsReadOnly());
        }