Простой Алгоритм Проверки Победы В Крестики-Нолики На Нестандартном Поле

Я столкнулся с проблемой, что у молодых программистов, которые только начинают изучать языки, алгоритмы вызывают больше трудностей, чем синтаксис языка.

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

Единственным исключением из правил могут стать профильные технические специальности в университетах, где преподают алгоритмы.

Несмотря на то, что алгоритм решения может быть очень простым, многие не знают, как подойти к решению задачи.

Я рассмотрю пример проверки на победу в игре в крестики-нолики, но на поле 6х6 и блоке последовательных заполненных значений, равных 4. По сути здесь представлен универсальный алгоритм, только вместо переменных я использовал константы.

И это практически не зависит от языка, на котором осуществляется эта проверка.

Я предлагаю начинающим программистам сначала решить задачу графически, а затем перевести ее на тот или иной язык.

Для создания этого алгоритма подойдет клетчатый лист бумаги и ручка.

Итак, у нас есть поле 6х6.

Простой алгоритм проверки победы в крестики-нолики на нестандартном поле

Блок последовательно заполненных элементов, достаточный для победы, равен 4.

Простой алгоритм проверки победы в крестики-нолики на нестандартном поле

Думаю, теперь (просто поле из двух картинок) стало намного понятнее, как решить эту проблему.

Фактически нам предстоит решить 2 независимые задачи:

  1. Найдите все завершенные последовательности в блоке 4x4.
  2. Найдите все квадраты 4х4 в квадрате 6х6.


1. Найдите все завершенные последовательности в блоке 4х4.

Почему мы проверяем блок 4х4? Все просто; возможны только 2 диагонали нужного нам размера.

Используя двоичную логику (1&1=1 и 1&0=0), мы можем легко выполнить тест в циклах.

Для этого нам понадобится по 1 переменной для каждой диагонали.

Пусть toright — логическая переменная, в которую мы записываем результат проверки диагонали сверху слева направо вниз.

И влево, чтобы проверить диагональ сверху справа в низ слева.

Первоначально мы установим значение true для этих переменных.

Далее каждую ячейку сравниваем по диагонали с символом «Х» или «О».

Разумеется, мы делаем это с помощью 2-х вызовов, либо сравниваем всё с «Х», либо всё с «О».

Сравниваем каждую ячейку диагонали с нашим символом и получаем результат (истина) или (ложь).

Затем мы выполняем логическую операцию (&) между результатом и нашим правом.

Результат этой операции снова записываем в toright. Если на каком-то этапе мы получим результат (false), то все дальнейшие права всегда будут равны (false).

Это следует из правила логических операций (1&0=0).

Давайте напишем это на Java:

   

boolean checkDiagonal(char symb) {

Теги: #крестики-нолики #проверка победы #Образовательный процесс в ИТ
Вместе с данным постом часто просматривают: