#java #algorithm #tic-tac-toe
#java #алгоритм #крестики-нолики
Вопрос:
Вещи, которые нельзя изменить:
enum CellLocation{TOP_LEFT,TOP_CENTER,TOP_RIGHT,CENTRE_LEFT, .. and so on}
enum CellState{OCCUPIED_BY_X,OCCUPIED_BY_O,EMPTY}
Интерфейс игровой доски, который содержит только один метод:
CellState getCellState(CellLocation cellLocation);
Интерфейс консультанта, который также содержит один метод:
CellLocation suggest(GameBoard gameBoard);
Моя задача — создать класс, который реализует интерфейс консультанта, и перезаписать данный метод suggest (метод также должен решить, какой игрок является следующим -> вывод Cellocation должен иметь ПУСТОЕ состояние)
Итак, моя проблема в том, что я не уверен, с чего начать. Я думал о том, чтобы создать временную карту внутри метода suggest и заполнить все данные следующим образом:
HashMap<CellLocation, CellState> temporaryBoard = new HashMap<>();
temporaryBoard.put(CellLocation.TOP_LEFT,gameBoard.getCellState(CellLocation.TOP_LEFT));
temporaryBoard.put(CellLocation.TOP_CENTRE,gameBoard.getCellState(CellLocation.TOP_CENTRE));
temporaryBoard.put(CellLocation.TOP_RIGHT,gameBoard.getCellState(CellLocation.TOP_RIGHT));
temporaryBoard.put(CellLocation.CENTRE_LEFT,gameBoard.getCellState(CellLocation.CENTRE_LEFT));
temporaryBoard.put(CellLocation.CENTRE_CENTRE,gameBoard.getCellState(CellLocation.CENTRE_CENTRE));
temporaryBoard.put(CellLocation.CENTRE_RIGHT,gameBoard.getCellState(CellLocation.CENTRE_RIGHT));
temporaryBoard.put(CellLocation.BOTTOM_LEFT,gameBoard.getCellState(CellLocation.BOTTOM_LEFT));
temporaryBoard.put(CellLocation.BOTTOM_CENTRE,gameBoard.getCellState(CellLocation.BOTTOM_CENTRE));
temporaryBoard.put(CellLocation.BOTTOM_RIGHT,gameBoard.getCellState(CellLocation.BOTTOM_RIGHT));
поэтому я могу легко работать с ним. Я не уверен, что мне следует создавать временную игровую доску для себя или нет.
Любая идея будет оценена.
Комментарии:
1. Я получил точно такое же упражнение. Вас наняла компания T *****k?
Ответ №1:
Из вопроса не совсем ясно, но если требуется, чтобы реализация предложила наилучший возможный ход, это можно сделать с помощью минимаксного алгоритма, целью которого является выполнение возможного хода (таким образом, создавая доску с меньшим количеством возможных ходов для другого игрока) и повторно просматривает игровое дерево до тех пор, пока не будет найден наилучший возможный ход.лист найден. Затем листу концептуально присваивается значение 1
(победа первого игрока), 0
(ничья) или -1
(победа второго игрока). Для нелистового узла значение определенного хода является максимальным (или минимальным, в зависимости от того, какой это ход игрока) из его значений. Это определение вычисляется рекурсивно; затем алгоритм предложит переместить с максимальным или минимальным значением.