TicTacToe предложил переместить

#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 (победа второго игрока). Для нелистового узла значение определенного хода является максимальным (или минимальным, в зависимости от того, какой это ход игрока) из его значений. Это определение вычисляется рекурсивно; затем алгоритм предложит переместить с максимальным или минимальным значением.