Если игровое поле 11 х 11, как определить победителя? Я подсчитал, сколько выигрышных комбинаций может быть.

Некоторые ключи для идей

  • Игра закончится, когда игрок забьет.
  • Предположим, что игрок-человек рационален. Каждый ход направлен на победу в игре.

Подход

Создание указателя, указывающего на текущий ход. От указателя, просматривая 8 направлений:

  • Левый
  • Верно
  • Выше
  • Ниже
  • Слева и выше
  • Справа и ниже
  • Слева и снизу
  • Справа и выше

Для каждого направления, глядя на правильное следующее место

  • Если есть такая же метка, перевод указателя на новое место
  • Если точка пуста или имеет аналог или удар по краю, прекратите перемещение указателя
  • Подсчитайте количество одинаковых отметок в этом направлении

Объедините количество следующих пар:

  • Слева и справа (ряд)
  • Вверху и внизу (столбец)
  • Слева — вверху и справа — внизу (по диагонали)
  • Слева — внизу и справа — вверху (противоположная диагональ)

Если длина любой комбинации больше или равна длине соединения, объявляется победитель и завершается игра.

Подход, кажется, работает; однако, как определить, что контрольная точка (указатель) находится в той же строке, или в том же столбце, или на той же диагонали, что и текущий ход?

Пометив каждый столбец и строку идентификатором, я могу определить позицию перемещения, представленную идентификатором столбца и идентификатором строки.

  • Два последовательных хода одной и той же строки имеют расстояние 1 и имеют одинаковый идентификатор строки.

Если последнее условие проигнорировано, перемещение в столбец с идентификатором = 5 и строку с идентификатором = 2, а также перемещение в столбец с идентификатором = 0 и строку с идентификатором = 3 будут рассматриваться как два последовательных перемещения одной и той же строки.

  • Два последовательных хода одного и того же столбца имеют расстояние n (n - количество столбцов)
  • Два последовательных хода по одной и той же диагонали (левый — вверху и правый — внизу) имеют расстояние (n + 1)
  • Два последовательных хода по одной и той же противоположной диагонали (слева — снизу и справа — вверху) имеют расстояние (n — 1) и разные идентификаторы строк.

Если проигнорировать последнее условие, перемещение по столбцу с идентификатором 0 и строке с идентификатором 2, а также столбцу с идентификатором 5 и строке с идентификатором 2 будет рассматриваться как два последовательных перемещения по одной и той же противоположной диагонали

Детали реализации кода можно найти здесь.

Спасибо за прочтение статьи. Не стесняйтесь оставлять отзывы, обсуждать и предлагать свой подход.