Esempio n. 1
0
        // Создает новое положение доски (после хода)
        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);
        }
Esempio n. 2
0
        private bool CanEatKing()
        {
            Square enemyKing = FindEnemyKing();                    // Квадрат вражеского короля
            Moves  moves     = new Moves(this);                    // Возможные ходы для данного положения доски

            foreach (FigureOnSquare fs in YieldFigures())          // Идем по всем фигурам на доске
            {
                FigureMoving fm = new FigureMoving(fs, enemyKing); // Если фигура может побить квадрат короля и может двигаться, то шах
                if (moves.CanMove(fm))
                {
                    return(true);
                }
            }
            return(false);
        }