예제 #1
0
 void Awake()
 {
     if (_instance == null)
     {
         _instance = this;
     }
     else
     {
         DestroyImmediate(this);
     }
     CurrentBoard = new BoardTobit();
     deskView     = new Field[CurrentBoard.rowsOfBoard, CurrentBoard.columnsOfBoard];
     isGameOver   = CurrentBoard.IsGameOver();
     activePlayer = CurrentBoard.CurrentPlayer;
 }
예제 #2
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);
    }
예제 #3
0
    private void CopyBoard(BoardTobit boardMover, Figure[,] newboard)
    {
        Figure[,] oldBoard = boardMover.board;
        int rows = board.GetLength(0);
        int cols = board.GetLength(1);

        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                if (oldBoard[i, j] != null)
                {
                    newboard[i, j] = new Figure(oldBoard[i, j]);
                }
            }
        }
    }
예제 #4
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);
    }
예제 #5
0
 public BoardTobit(BoardTobit boardMover)
     : this()
 {
     CurrentPlayer = (boardMover.CurrentPlayer == FigureColor.WHITE) ? FigureColor.BLACK : FigureColor.WHITE;
     CopyBoard(boardMover, board);
 }