// реализация интерфейса IPlayer public CellCoordinates NextMove(CellState.cellState[,] CurrentState, byte qtyCellsForWin, bool isHuman, TimeSpan remainingTimeForGame, int remainingQtyMovesForGame) { // инициализация локального игрового поля CreateLocalBoard(CurrentState, qtyCellsForWin); int[] myMove = { 0, 0 }; if (WorkBoard == null) { WorkBoard = new WorkBoardClass(Board.GetLength(0)); } // список координат рабочего поля List <int[]> workBoardCoords = WorkBoard.SetWorkBoard(Board); // если поле пустое, сразу занимаем ячеку вблизи середины поля if (firstCoord[0] != 0) { return(new CellCoordinates() { X = firstCoord[0], Y = firstCoord[1] }); } // Вызов алгоритма в многопоточном режиме myMove = solver.GetOptimalStep(Board, workBoardCoords); // создаем CellCoordinates и возвращаем наш ход return(new CellCoordinates() { X = (byte)myMove[0], Y = (byte)myMove[1] }); }
// реализация интерфейса IPlayer public CellCoordinates NextMove(CellState.cellState[,] CurrentState, byte qtyCellsForWin, bool isHuman, TimeSpan remainingTimeForGame, int remainingQtyMovesForGame) { // инициализация локального игрового поля CreateLocalBoard(CurrentState, qtyCellsForWin, isHuman); // если играет человек if (isHuman) { // создаем GUI if (GUI == null) { GUI = new Form1(); GUI.SetGUI(Board.GetLength(0), playerID); GUI.ShowDialog(); } // передаем GUI GUI.GetBoard(Board); // ожидаем хода человека while (GUI.HumanMove == null) { ; } return(new CellCoordinates() { X = (byte)GUI.HumanMove[0], Y = (byte)GUI.HumanMove[1] }); } int[] myMove = { 0, 0 }; // Создаем экземпляр рабочего поля if (WorkBoard == null) { WorkBoard = new WorkBoardClass(Board.GetLength(0)); } // список координат рабочего поля List <int[]> workBoardCoords = WorkBoard.SetWorkBoard(Board); // если поле пустое, то сразу занимаем ячеку вблизи середины поля if (firstCoord[0] != 0) { byte[] temp = firstCoord; firstCoord = new byte[2] { 0, 0 }; return(new CellCoordinates() { X = temp[0], Y = temp[1] }); } // Вызов алгоритма в многопоточном режиме myMove = solver.GetOptimalStep(Board, workBoardCoords); // создаем CellCoordinates и возвращаем наш ход return(new CellCoordinates() { X = (byte)myMove[0], Y = (byte)myMove[1] }); }