Exemplo n.º 1
0
    // Оценка за поедание фигур
    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);
    }
Exemplo n.º 2
0
    //Делаем ход "фигурой"
    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);
    }