示例#1
0
        private List <Square> GetSquaresCanAttack(Board board, int moveDirection)
        {
            Square        mySquare       = board.FindPiece(this);
            List <Square> availableMoves = new List <Square>();

            for (int colOffset = -1; colOffset < 2; colOffset += 2)
            {
                Square captureSquare = mySquare + new MoveOffset(moveDirection, colOffset);
                if (BoardQuery.IsWithinBounds(captureSquare) &&
                    BoardQuery.IsOppositeColourOnSquares(board, mySquare, captureSquare))
                {
                    availableMoves.Add(captureSquare);
                }
            }

            return(availableMoves);
        }
示例#2
0
        private List <Square> GetSquaresEnPassant(Board board, int moveDirection)
        {
            Square        mySquare       = board.FindPiece(this);
            List <Square> availableMoves = new List <Square>();

            for (int colOffset = -1; colOffset < 2; colOffset += 2)
            {
                Square sidewaysSquare = mySquare + new MoveOffset(0, colOffset);
                if (BoardQuery.IsWithinBounds(sidewaysSquare) &&
                    BoardQuery.IsOppositeColourOnSquares(board, mySquare, sidewaysSquare))
                {
                    Square previousSquare = sidewaysSquare + new MoveOffset(moveDirection * 2, 0);
                    if (board.PreviousBoard[previousSquare.Row, previousSquare.Col] == board.GetPiece(sidewaysSquare))
                    {
                        availableMoves.Add(sidewaysSquare + new MoveOffset(moveDirection, 0));
                    }
                }
            }
            return(availableMoves);
        }