Если игровое поле 11 х 11, как определить победителя? Я подсчитал, сколько выигрышных комбинаций может быть.
Некоторые ключи для идей
- Игра закончится, когда игрок забьет.
- Предположим, что игрок-человек рационален. Каждый ход направлен на победу в игре.
Подход
Создание указателя, указывающего на текущий ход. От указателя, просматривая 8 направлений:
- Левый
- Верно
- Выше
- Ниже
- Слева и выше
- Справа и ниже
- Слева и снизу
- Справа и выше
Для каждого направления, глядя на правильное следующее место
- Если есть такая же метка, перевод указателя на новое место
- Если точка пуста или имеет аналог или удар по краю, прекратите перемещение указателя
- Подсчитайте количество одинаковых отметок в этом направлении
Объедините количество следующих пар:
- Слева и справа (ряд)
- Вверху и внизу (столбец)
- Слева — вверху и справа — внизу (по диагонали)
- Слева — внизу и справа — вверху (противоположная диагональ)
Если длина любой комбинации больше или равна длине соединения, объявляется победитель и завершается игра.
Подход, кажется, работает; однако, как определить, что контрольная точка (указатель) находится в той же строке, или в том же столбце, или на той же диагонали, что и текущий ход?
Пометив каждый столбец и строку идентификатором, я могу определить позицию перемещения, представленную идентификатором столбца и идентификатором строки.
- Два последовательных хода одной и той же строки имеют расстояние 1 и имеют одинаковый идентификатор строки.
Если последнее условие проигнорировано, перемещение в столбец с идентификатором = 5 и строку с идентификатором = 2, а также перемещение в столбец с идентификатором = 0 и строку с идентификатором = 3 будут рассматриваться как два последовательных перемещения одной и той же строки.
- Два последовательных хода одного и того же столбца имеют расстояние n (n - количество столбцов)
- Два последовательных хода по одной и той же диагонали (левый — вверху и правый — внизу) имеют расстояние (n + 1)
- Два последовательных хода по одной и той же противоположной диагонали (слева — снизу и справа — вверху) имеют расстояние (n — 1) и разные идентификаторы строк.
Если проигнорировать последнее условие, перемещение по столбцу с идентификатором 0 и строке с идентификатором 2, а также столбцу с идентификатором 5 и строке с идентификатором 2 будет рассматриваться как два последовательных перемещения по одной и той же противоположной диагонали
Детали реализации кода можно найти здесь.
Спасибо за прочтение статьи. Не стесняйтесь оставлять отзывы, обсуждать и предлагать свой подход.