void SetFigureOn(Squares square, Figures figure) // метод для установки фигур { if (square.PosOnBoard()) { figures[square.x, square.y] = figure; } }
public char GFigure(int x, int y) // вычисляем местоположение каждой фигуры { Squares square = new Squares(x, y); // берём клетку, которая была передана Figures fig = board.GetFigureOn(square); // вычисляем фигуру return(fig == Figures.zero ? '.' : (char)fig); // если фигура существует, возвращаем символ, иначе обнуляем }
} // превращение пешки в другую фигуру public FiguresMovements(FigureOnSquare fos, Squares to, Figures transformation = Figures.zero) // информация о фигуре на клетке { this.figure = fos.figure; // исходная фигура this.from = fos.square; // стартовая позиция this.to = to; // позиция после сделанного хода this.transformation = transformation; // превращение для пешки }
public Figures GetFigureOn(Squares square) // определяем какая фигура на какой клетки находится { if (square.PosOnBoard()) // проверка присутствия клетки на доске { return(figures[square.x, square.y]); } return(Figures.zero); // если клетка оказалась за доской }
public IEnumerable <FigureOnSquare> SortFigures() // перебираем фигуры { foreach (Squares square in Squares.SortSquares()) // перебираем все клетки { if (GetFigureOn(square).GetColor() == ChangeColor) // если на клетке находитсья фигура цвета который ходит { yield return(new FigureOnSquare(GetFigureOn(square), square)); // мы возвращаем её } } }
private Squares FindEnemyKing() { Figures enemyking = ChangeColor == Colors.black ? Figures.WKing : Figures.BKing; // определяем цвет вражеского короля foreach (Squares square in Squares.SortSquares()) // перебираем все клетки { if (GetFigureOn(square) == enemyking) // проверяем искомая фигура равна ли вражескому королю { return(square); } } return(Squares.zero); }
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); }
private bool MovementStraightPos() // возможность двигаться прямо { Squares on = figm.from; // исходная клетка откуда начинается движение do { on = new Squares(on.x + figm.SignX, on.y + figm.SignY); // создаем новую клетку со смещением на 1 if (on == figm.to) // если пришли на нужную клетку { return(true); } }while (on.PosOnBoard() && board.GetFigureOn(on) == Figures.zero); // проверка на местонохождение клетки на доске и взятие фигуры return(false); }
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 FigureOnSquare(Figures figure, Squares square) { this.figure = figure; this.square = square; }