Exemplo n.º 1
0
 public FigureMoving(FigureOnSquare fs, Square to, Figure promotion = Figure.none)
 {
     this.figure    = fs.figure;
     this.from      = fs.square;
     this.to        = to;
     this.promotion = promotion;
 }
Exemplo n.º 2
0
        public List <string> GetAllValidMovesForFigureAt(int x, int y)
        {
            var validMoves   = new List <string>();
            var targetSquare = new Square(x, y);

            if (!targetSquare.IsOnBoard())
            {
                return(validMoves);
            }

            var targetFigure = board.GetFigureAt(targetSquare);

            if (targetFigure == Figure.None || targetFigure.GetColor() != board.MoveColor)
            {
                return(validMoves);
            }

            var          figureOnSquare = new FigureOnSquare(targetFigure, targetSquare);
            MovingFigure movingFigure;

            foreach (var squareTo in Square.YieldSquares())
            {
                movingFigure = new MovingFigure(figureOnSquare, squareTo);
                if (currentMove.CanMove(movingFigure) &&
                    !board.IsCheckAfterMove(movingFigure))
                {
                    validMoves.Add(((char)('a' + squareTo.X)).ToString() + (squareTo.Y + 1));
                }
            }

            if (targetFigure == Figure.BlackKing || targetFigure == Figure.WhiteKing)
            {
                if (CanKingCastle(true))
                {
                    validMoves.Add($"g{y + 1}");
                }
                if (CanKingCastle(false))
                {
                    validMoves.Add($"c{y + 1}");
                }
            }

            return(validMoves);
        }
Exemplo n.º 3
0
        public IChessGame Castle(bool isToKingside)
        {
            var            isWhiteSide = board.MoveColor == Moves.Helpers.Color.White;
            var            king        = (isWhiteSide) ? Figure.WhiteKing : Figure.BlackKing;
            var            rookFigure  = (isWhiteSide) ? Figure.WhiteRook : Figure.BlackRook;
            var            y           = (isWhiteSide) ? 0 : 7;
            var            stepX       = (isToKingside) ? 1 : -1;
            FigureOnSquare rook;

            if (stepX == -1)
            {
                rook = new FigureOnSquare(rookFigure, new Square(0, y));
            }
            else
            {
                rook = new FigureOnSquare(rookFigure, new Square(7, y));
            }
            var firstKingDestSquare = new Square(4 + stepX, y);
            var finalKingDestSquare = new Square(firstKingDestSquare.X + stepX, y);

            var nextBoard = board.Castle(new MovingFigure(new FigureOnSquare(king, new Square(4, y)), finalKingDestSquare), new MovingFigure(rook, firstKingDestSquare));

            return(new ChessGame(nextBoard));
        }