コード例 #1
0
 public bool CanMove(FigureMoving fm) //можно ли пойти
 {
     this.fm = fm;
     return(CanMoveFrom() &&  //можно ли пойти с той клетки куда мы идем
            CanMoveTo() &&    //можно ли пойти на ту клетку куда собрались идти
            CanFigureMove()); //может ли фигура сделать этот ход
 }
コード例 #2
0
ファイル: Board.cs プロジェクト: valdek1999/ChessOnline
        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();//после того как сделан ход запускается генерация fen
            return(next);
        }
コード例 #3
0
ファイル: Board.cs プロジェクト: valdek1999/ChessOnline
        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);
        }
コード例 #4
0
        public Chess Move(string move)                //функция позволяющая делать ход Pe2e4(пешка переместилась с e2 на e4) Pe7e8Q(Q - это в кого она превратилась)
        {
            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); //иницализирует новый шахматный экзеплеяр с новым fen и board

            return(nextChess);
        }
コード例 #5
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);                   //если да,добавляет в список все возможных ходов.
                 }
             }
         }
     }
 }
コード例 #6
0
ファイル: Board.cs プロジェクト: valdek1999/ChessOnline
        public bool IsCheckAfterMove(FigureMoving fm)//будет ли поставлен шах после хода
        {
            Board after = Move(fm);

            return(after.CanEatKing());
        }