// Оценка за поедание фигур private float DoKill(MoveTobit move, BoardTobit currentDesk) { float points = pointKill; // Начальное значение оценки FigureColor oppositePlayer = IsOppositeColor(move.figure.Color); //текущий цвет противника List <Figure> oldFigures = GetListFigures(currentDesk.board).FindAll(x => x.Color == oppositePlayer); //находим все фигуры противника до хода BoardTobit b = (BoardTobit)currentDesk.MakeMove(move); //Делаем ход с поеданием фигуры противника List <Figure> newFigures = GetListFigures(b.board).FindAll(x => x.Color == oppositePlayer); if (newFigures.Count == 0)// провеяем остались ли фигуры у противника { return(Mathf.Infinity); } points += pointKill * (oldFigures.Count - newFigures.Count); return(points); }
//Делаем ход "фигурой" public override Board MakeMove(Move m) { BoardTobit movedBoard = new BoardTobit(this); MoveTobit currentMove = (MoveTobit)m; Figure fig = new Figure(currentMove.figure); fig.Move(currentMove, ref movedBoard.board); if (currentMove.haveKill) { Move[] nextKillMoves = fig.GetMoves(ref movedBoard.board); if (Array.Exists(nextKillMoves, x => ((MoveTobit)x).haveKill)) { Move nextMove = Array.Find(nextKillMoves, x => ((MoveTobit)x).haveKill); movedBoard = (BoardTobit)movedBoard.MakeMove(nextMove); } } return(movedBoard); }