
Правила игры:
Начинают игру чёрные, игроки ходят поочерёдно. Красная фишка может ходит в любую смежную ячейку, чёрные — только вверх либо в сторону.
Чёрные выигрывают, заблокировав красную фишку так, что она не может сделать ход. Красные выигрывают либо достигнув нижней ячейки, либо после 10 пассивных (не вверх) ходов чёрных подряд.
Выиграть компьютер чёрными фишками оказалась не простая задача. Я нашёл несколько стратегий, но любое отклонение от них вело к поражению. И тогда я решил написать программу, которая подсказывала бы мне, какой ход я могу сделать, чтобы не проиграть. Ещё было интересно узнать, можно ли заблокировать красную фишку не в верхней ячейке, а в боковой.
В результате получилась Military Game (with hints) (кликните, чтобы запустить).
Как это работает:
Программа просчитывает, является ли игровая ситуация (ситуация описывается расположением фишек на поле и ходящей стороной) выигрышной, используя следующие правила теории игр:
1) ситуация является выигрышной для игрока А, если хотя бы один ход ведёт в проигрышную ситуацию для игрока Б;
2) ситуация является проигрышной для игрока А, если все ходы ведут в выигрышные ситуации для игрока Б.
То есть, если я своим ходом делаю противнику выигрышную ситуацию — то я проигрываю, и наоборот. Оценив все игровые ситуации, мы можем сказать, как нужно ходить, чтобы выиграть: выигрышными (для нас) будут все ходы, которые ведут в проигрышные (для противника) ситуации.
Для того, чтобы визуально показывать выигрышные ходы, я декомпильнул Military Game прекрасной программой jad, добавил туда свои класс и рисование зелёных стрелок в соответствующий
paintComponent
метод. Ну вот и все. Наслаждайтесь!А вспомнил всю эту историю я благодаря хаброчеловеку filу и его заметке о сапере.