コード例 #1
0
ファイル: Chess.cs プロジェクト: VitaliiKharchuk/ChessEngine
        public List <string> GetValidCaptures()
        {
            var figuresOnSquares = Board.GetFigureOnSquares();
            var squares          = Square.GetBoardSquares();
            var validMoves       = new List <string>();

            var opponentCollor = MoveColor == Color.black ? Color.white : Color.black;

            foreach (var figuresOnSquare in figuresOnSquares)
            {
                foreach (var to in squares)
                {
                    foreach (Figure promotion in figuresOnSquare.Figure.YieldPromotions(to))
                    {
                        FigureMoving fm = new FigureMoving(figuresOnSquare, to, promotion);

                        if (IsValidMove(fm) &&
                            Board.GetFigureAt(to).GetFigureColor() == opponentCollor)
                        {
                            validMoves.Add(fm.ToString());
                        }
                    }
                }
            }

            return(validMoves);
        }
コード例 #2
0
ファイル: Chess.cs プロジェクト: 0gIH04KA/MyChess
        /// <summary>
        ///
        /// проверка возможности следующего хода
        ///
        /// </summary>
        ///
        /// <param name="move">
        ///
        /// строковое представление хода
        ///
        /// </param>
        ///
        /// <returns>
        ///
        /// возвращаем новую доску с текущим ходом
        ///
        /// </returns>
        public Chess Move(string move)
        {
            FigureMoving figureMoving = new FigureMoving(move);

            /// <summary>
            ///
            /// если нельзя совершить указаный ход
            ///
            /// </summary>
            ///
            /// <returns>
            ///
            /// возвращаем текущее расположение шахмат
            ///
            /// </returns>
            if (!_moves.CanMove(figureMoving))
            {
                return(this); //ToDo : add new exception данный ход не возможен!!
            }
            if (_board.IsCheckAfter(figureMoving))
            {
                return(this);//ToDo : add new exception данный ход не возможен, IsCheck!!
            }

            Board nextBoard = _board.Move(figureMoving);
            Chess nextChess = new Chess(nextBoard);

            return(nextChess);
        }
コード例 #3
0
ファイル: Moves.cs プロジェクト: WildOrc/ChessRules
 public bool CanMove(FigureMoving fm)
 {
     this.fm = fm;
     return
         (CanMoveFrom() &&
          CanMoveTo());
 }
コード例 #4
0
ファイル: Moves.cs プロジェクト: 0gIH04KA/MyChess
        /// <summary>
        ///
        /// мметод который описывает движение фигуры по игровой доске
        ///
        /// </summary>
        ///
        /// <param name="figureMoving">
        ///
        /// фиуга которая совершает движение
        ///
        /// </param>
        ///
        /// <returns>
        ///
        /// возвращает логическое значение может ли совершить указаная фигура
        /// совершить данное движение по игровой доске
        ///
        /// </returns>
        public bool CanMove(FigureMoving figureMoving)
        {
            _figureMoving = figureMoving;

            return(CanMoveFrom() &&
                   CanMoveTo() &&
                   CanFigureMove());
        }
コード例 #5
0
 public bool CanMove(FigureMoving fm)
 {
     this.fm = fm;
     return
         // Можно ли пойти с этой клетки
         (CanMoveFrom() &&
          // Можно ли пойти куда собрались ходить
          CanMoveTo() &&
          // Может ли фигура сделать этот ход
          CanFigureMove());
 }
コード例 #6
0
        public Chess Move(string move)
        {
            if (!IsValidMove(move))
            {
                return(this);
            }
            FigureMoving fm        = new FigureMoving(move);
            Board        nextBoard = board.Move(fm);
            Chess        nextChess = new Chess(nextBoard);

            return(nextChess);
        }
コード例 #7
0
ファイル: Chess.cs プロジェクト: VitaliiKharchuk/ChessEngine
        public Chess Move(string move)
        {
            var fm = new FigureMoving(move);

            if (!IsValidMove(fm))
            {
                return(this);
            }

            var nextBoard = Board.Move(fm);

            return(new Chess(nextBoard));
        }
コード例 #8
0
 public NextBoard(string fen, FigureMoving fm)
     : base(fen)
 {
     this.fm = fm;
     MoveFigures();
     DropEnpassant();
     SetEnpassant();
     MoveCastleRook();
     UpdateCastleFlags();
     MoveNumber();
     MoveColor();
     GenerateFEN();
 }
コード例 #9
0
        public Board Move(FigureMoving fm)
        {
            Board next = new Board(fen);

            next.SetFigureAt(fm.from, Figure.none);
            next.SetFigureAt(fm.to, fm.promotion == Figure.none ? fm.figure : fm.promotion);
            if (moveColor == Color.black)
            {
                next.moveNumber++;
            }
            next.moveColor = moveColor.FlipColor();
            next.GenerateFEN();
            return(next);
        }
コード例 #10
0
ファイル: Chess.cs プロジェクト: bumerang37/ChessRules
        public bool isValidMove(string move)
        {
            FigureMoving fm = new FigureMoving(move);

            if (!moves.CanMove(fm))
            {
                return(false);
            }
            if (board.IsCheckAfter(fm))
            {
                return(false);
            }
            return(true);
        }
コード例 #11
0
        bool CanEatKing()
        {
            Square badKing = FindBadKing();
            Moves  moves   = new Moves(this);

            foreach (FigureOnSquare fs in YieldFigures())
            {
                FigureMoving fm = new FigureMoving(fs, badKing);
                if (moves.CanMove(fm))
                {
                    return(true);
                }
            }
            return(false);
        }
コード例 #12
0
ファイル: Chess.cs プロジェクト: gnandyil/GameChess
        public Chess Move(string move) // Pe2e4        Pe7e8Q
        {
            FigureMoving fm = new FigureMoving(move);

            if (!moves.CanMove(fm))
            {
                return(this);
            }
            if (board.IsCheckAfterMove(fm))
            {
                return(this);
            }
            Board nextBoard = board.Move(fm);
            Chess nextChess = new Chess(nextBoard);

            return(nextChess);
        }
コード例 #13
0
 void FindAllMoves()
 {
     allMoves = new List <FigureMoving>();
     foreach (FigureOnSquare fs in board.YieldFigures())
     {
         foreach (Square to in Square.YieldSquares())
         {
             FigureMoving fm = new FigureMoving(fs, to);
             if (moves.CanMove(fm))
             {
                 if (!board.IsCheckAfterMove(fm))
                 {
                     allMoves.Add(fm);
                 }
             }
         }
     }
 }
コード例 #14
0
ファイル: NextBoard.cs プロジェクト: 0gIH04KA/MyChess
        public NextBoard(string fen, FigureMoving figureMoving)
            : base(fen)
        {
            _figureMoving = figureMoving;

            MoveFigures();

            DropEnpassant();
            SetEnpassant();

            MoveCastlingRook();
            UpdateCastleFlags();

            UpdateMoveNumber();
            UpdateMoveColor();

            GenerateFEN();
        }
コード例 #15
0
        // Принимает ход в виде Pe2e4   Pe7e8Q
        public Chess Move(string move)
        {
            FigureMoving fm = new FigureMoving(move);

            // Если нельзя сделать ход..
            if (!moves.CanMove(fm))
            {
                return(this);
            }
            if (board.IsCheckAfterMove(fm))
            {
                return(this);
            }
            Board nextBoard = board.Move(fm);
            Chess nextChess = new Chess(nextBoard);

            return(nextChess);
        }
コード例 #16
0
 public IEnumerable <string> YieldValidMoves()
 {
     foreach (FigureOnSquare fs in board.YieldMyFigureOnSquares())
     {
         foreach (Square to in Square.YieldBoardSquares())
         {
             foreach (Figure promotion in fs.figure.YieldPromotions(to))
             {
                 FigureMoving fm = new FigureMoving(fs, to, promotion);
                 if (moves.CanMove(fm))
                 {
                     if (!board.IsCheckAfter(fm))
                     {
                         yield return(fm.ToString());
                     }
                 }
             }
         }
     }
 }
コード例 #17
0
ファイル: Chess.cs プロジェクト: VitaliiKharchuk/ChessEngine
        public IEnumerable <string> YieldValidMoves()
        {
            var figuresOnSquares = Board.GetFigureOnSquares();
            var squares          = Square.GetBoardSquares();

            foreach (var figuresOnSquare in figuresOnSquares)
            {
                foreach (var to in squares)
                {
                    foreach (Figure promotion in figuresOnSquare.Figure.YieldPromotions(to))
                    {
                        FigureMoving fm = new FigureMoving(figuresOnSquare, to, promotion);

                        if (IsValidMove(fm))
                        {
                            yield return(fm.ToString());
                        }
                    }
                }
            }
        }
コード例 #18
0
ファイル: Chess.cs プロジェクト: 0gIH04KA/MyChess
        /// <summary>
        ///
        /// перебор всех фигур текущего игрока которые могут совершить ход на игровой доске
        ///
        /// </summary>
        ///
        /// <returns>
        ///
        /// возвращает все фигуры которые могут совершть ход
        ///
        /// </returns>
        public IEnumerable <string> YieldValidMoves()
        {
            foreach (FigureOnSquare figureOnSquare in _board.YieldFiguresOnSquare())
            {
                foreach (Square to in Square.YieldBoardSquare())
                {
                    foreach (Figure promotion in figureOnSquare.FigurE.YeldPromotions(to))
                    {
                        FigureMoving figureMoving = new FigureMoving(figureOnSquare, to, promotion);

                        if (_moves.CanMove(figureMoving))
                        {
                            if (!_board.IsCheckAfter(figureMoving))
                            {
                                yield return(figureMoving.ToString());
                            }
                        }
                    }
                }
            }
        }
コード例 #19
0
ファイル: Chess.cs プロジェクト: bumerang37/ChessRules
        public Chess Move(string move)
        {
            if (!isValidMove(move))
            {
                return(this);
            }

            FigureMoving fm = new FigureMoving(move);

            if (!moves.CanMove(fm))
            {
                return(this);
            }

            if (board.IsCheckAfter(fm))
            {
                return(this);
            }
            Board nextBoard = board.Move(fm);
            Chess nextChess = new Chess(nextBoard);

            return(nextChess);
        }
コード例 #20
0
ファイル: Chess.cs プロジェクト: VitaliiKharchuk/ChessEngine
        public List <string> GetValidMoves()
        {
            var figuresOnSquares = Board.GetFigureOnSquares();
            var squares          = Square.GetBoardSquares();
            var validMoves       = new List <string>();

            foreach (var figuresOnSquare in figuresOnSquares)
            {
                foreach (var to in squares)
                {
                    foreach (Figure promotion in figuresOnSquare.Figure.YieldPromotions(to))
                    {
                        FigureMoving fm = new FigureMoving(figuresOnSquare, to, promotion);

                        if (IsValidMove(fm))
                        {
                            validMoves.Add(fm.ToString());
                        }
                    }
                }
            }

            return(validMoves);
        }
コード例 #21
0
 public Board Move(FigureMoving fm)
 {
     return(new NextBoard(fen, fm));
 }
コード例 #22
0
ファイル: Chess.cs プロジェクト: VitaliiKharchuk/ChessEngine
 public bool IsValidMove(FigureMoving fm)
 {
     return(Moves.CanMove(fm) && !Board.IsCheckAfter(fm));
 }
コード例 #23
0
 /// <summary>
 ///
 /// метод которы отвечает за движение фигур по игровой доске
 ///
 /// </summary>
 ///
 /// <param name="figureMoving">
 ///
 /// фигура которая совершает ход
 ///
 /// </param>
 ///
 /// <returns>
 ///
 /// возвращает новую игровую доску
 ///
 /// </returns>
 public Board Move(FigureMoving figureMoving)
 {
     return(new NextBoard(_fen, figureMoving));
 }
コード例 #24
0
        public bool IsCheckAfterMove(FigureMoving fm)
        {
            Board after = Move(fm);

            return(after.CanEatKing());
        }
コード例 #25
0
ファイル: Board.cs プロジェクト: evgrussia/Chess-game
        internal bool IsCheckAfter(FigureMoving fm)
        {
            Board after = Move(fm);

            return(after.CanEatKing());
        }