public bool MovementIsPos(FiguresMovements figm) // проверяем возможно ли движение для фигуры { this.figm = figm; // получаем и сохраняем ход return (MovementPosFrom() && // проверяем возможность пойти с той клетки, на которой находимся MovementPosTo() && // проверяем возможность пойти на ту клетку, куда собираемся MovementPosForFigure()); // проверяем возможность фигуры сделать ход }
bool KingEatPos() // короля можно есть { Squares enemyking = FindEnemyKing(); // находим местоположение вражеского короля Movements movements = new Movements(this); // создаем все ходы возможные на доске foreach (FigureOnSquare figs in SortFigures()) // перебираем все фиугуры на доске в список всех фигур { FiguresMovements figm = new FiguresMovements(figs, enemyking); // идём на клетку вражеского короля if (movements.MovementIsPos(figm)) // проверяем можем ли пойти на клетку вражеского короля { return(true); } } return(false); }
public Board Moving(FiguresMovements figm) // создаём хода { Board next = new Board(fenchess); // создание доски next.SetFigureOn(figm.from, Figures.zero); // клетку, откуда фигура пошла, делаем пустой next.SetFigureOn(figm.to, figm.transformation == Figures.zero ? figm.figure : figm.transformation); // в клетку, куда пошла фигура, добавляем фигуру с учётом превращения для пешки if (ChangeColor == Colors.black) { next.MovingNumb = next.MovingNumb + 1; // увеличиваем количество ходов на 1 } next.ChangeColor = ChangeColor.FlipColor(); // меняем цвет next.GenFenChess(); // вызываем функцию генерации фигур по fen return(next); }
void FindAllMovements() // метод для поиска всех ходов { AllMovements = new List <FiguresMovements>(); // создаем пустой список foreach (FigureOnSquare figs in board.SortFigures()) // перебираем все фигуры на клетках доски того цвета который делает ход { foreach (Squares to in Squares.SortSquares()) // перебираем все клетки куда можно пойти { FiguresMovements figm = new FiguresMovements(figs, to); if (movement.MovementIsPos(figm)) // проверяем может ли быть выполнен конкретный ход { if (!board.IsCheckAftertM(figm)) { AllMovements.Add(figm); } } } } }
public Chess1 Moving(string move) { FiguresMovements figm = new FiguresMovements(move); // генерация хода if (!movement.MovementIsPos(figm)) // проверяем возможно ли сделать ход { return(this); // если ход сделать нельзя - позиция не изменяется } if (board.IsCheckAftertM(figm)) // проверяем есть ли шах после хода { return(this); } Board newBoard = board.Moving(figm); // создаём доску после выполнения хода Chess1 newChess = new Chess1(newBoard); // создание шахмат от новой доски return(newChess); }
public bool IsCheckAftertM(FiguresMovements figm) // проверка на шах после хода { Board after = Moving(figm); // делаем ход return(after.KingEatPos()); // проверяем можно ли съесть короля после хода }