Joysi
41 уровень

Реализация стратегии.

Пост из группы Архив info.javarush.ru
2599 участников
Судя по записям задач поиска контуров, brainfuck кодирования многим интересна алгоритмика, как одна из сторон программирования. Предлагаю вам реализовать "мозги" следующей игры. И если, авторов решения будет несколько, можно устроить "соревнование". Я накидал код реализации игры с выдачей результатов на консоль. Исходники на https://github.com/maratsr/MatrixGame Для реализации своего алгоритма необходимо создать реализацию интерфейса IGameStrategy и реализовать в нем: 1) метод getTurn(). Где собственно и происходит поиск оптимального хода 2) метод toString(). Просто вывод информации о вашем методе. Достаточно: 1) добавить код в getTurn() класса MyGameStrategy, где прописать алгоритм. Весь упор именно на алгоритмику, а не собственно знание Java. 2) добавить его одним из игроков в метод static main класса Game для игры. Всего то пару десятков строк реализации... Для облегчения написания собственного алгоритма я привел примеры реализаций (как заготовки): NonZeroFirstValueGameStrategy - Поиск первого доступного элемента MaxValueGameStrategy - Поиск максимального значения в строке или колонке RandomValueGameStrategy - Случайный ход Для тестирования вашего алгоритма можете посоревноваться с ними. Можете также изменить кол-во игроков, размер начальной матрицы и т.п. Game - основной класс, реализующий игру: - Генерирует поле игры. - Создает игроков с их стратегиями. - В процессе игры передает ход стратегиям и ограничивает время принятия решения (в случае его превышения, прерывает стратегию). - Выводит в консоль ход игры и ее результат. Вариантов реализации прочих стратегий вагон: Перебор на первые 2,3,4... хода с выбором лучшего ("ветви и границы"). Можете по ходу нахождения хода присваивать его аргументу функции move, процесс перебора программа прервет и в качестве решения возьмет ход, найденный до этого момента. Подсчет сумм элементов колонок или строк матрицы + поиск с учетом этого... Можно добавить элементы случайности... и т.п. и т.д. P.S. Буду также благодарен, если кто подскажет более правильный способ (чем Executor + Future) для ограничения времени работы любого метода (который не знает что его время выполнения лимитировано).">