예제 #1
0
        // реализация интерфейса 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]
            });
        }
예제 #2
0
        // реализация интерфейса 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]
            });
        }