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; }
// Оценка за поедание фигур 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); }
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]); } } } }
//Делаем ход "фигурой" 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); }
public BoardTobit(BoardTobit boardMover) : this() { CurrentPlayer = (boardMover.CurrentPlayer == FigureColor.WHITE) ? FigureColor.BLACK : FigureColor.WHITE; CopyBoard(boardMover, board); }