В предыдущей игре «Крестики-нолики» я реализовал базовую логику, где компьютер обучался ходам, запоминая сыгранные партии. Эта программа использовала принцип накопления опыта: алгоритм анализировал предыдущие ходы, чтобы предсказывать наилучшие комбинации для победы или защиты. Однако этот подход был больше сосредоточен на долгосрочном улучшении навыков компьютера, а не в реальном времени.
Сегодня я хочу представить новую версию игры с логическим подходом, который работает мгновенно, без необходимости обучения. Этот метод сосредоточен на стратегическом анализе текущей ситуации на доске, что делает игру более интересной и сложной.
Основные изменения в логике компьютера
В новой версии игры я разработал алгоритм, который позволяет компьютеру:
- Эффективно блокировать угрозы игрока. Если пользователь собирает два крестика подряд, компьютер тут же ставит нолик, чтобы перекрыть линию и предотвратить поражение.
- Ставить стратегические ходы. Если угрозы нет, компьютер делает ход, основываясь на доступных ячейках, чтобы затруднить игроку создание победных комбинаций.
Логика игры
Инициализация игрового поля
Размер игрового поля и длина победной линии задаются пользователем. Это позволяет экспериментировать с различными уровнями сложности: от классической игры на поле 3×3 до более сложных вариаций на 100×100 с победной длиной линии до 100.
После старта программа создает пустое поле в виде двумерного массива, где каждый элемент представляет клетку.
Ходы игрока
Каждый ход игрока обновляет массив, соответствующий игровому полю. Программа проверяет:
- Победил ли игрок. Если пользователь завершает линию нужной длины (по горизонтали, вертикали или диагонали), игра завершает текущую сессию, выводя сообщение о победе игрока.
- Остались ли свободные клетки. Если ход игрока не привел к победе, программа проверяет, есть ли еще свободные клетки. Если нет, она завершает игру с уведомлением о ничьей.
Логика компьютера
После каждого хода игрока программа запускает функцию компьютера, которая выполняет следующие шаги:
- Блокировка угрозы: Компьютер анализирует каждую клетку, чтобы найти комбинации, где у игрока есть два крестика подряд, а третья клетка свободна.
Если такая угроза обнаружена, компьютер ставит нолик в эту клетку, блокируя победный ход игрока. - Случайный ход в безопасной зоне: Если угрозы нет, компьютер выбирает случайную свободную клетку, чтобы усложнить игроку создание победной комбинации.
- Проверка на победу: После хода программа проверяет, привел ли он к победе компьютера. Если да, то выводится соответствующее сообщение.
- Проверка на ничью: Если победа не достигнута и свободных клеток больше нет, программа завершает игру с уведомлением о ничьей.
Преимущества логического подхода
- Мгновенная реакция. В отличие от обучающейся программы, новый алгоритм работает без предварительных данных. Он анализирует только текущее состояние доски, что делает игру быстрой и независимой от накопленного опыта.
- Гибкость настроек. Возможность выбора размера доски и длины победной линии позволяет адаптировать сложность игры для разных пользователей.
- Сложность для игрока. Компьютер не только защищается от поражения, но и активно стремится к победе, что делает его достойным противником.
Особенности нового алгоритма
Блокировка угрозы
Функция blockThreat реализует анализ всех клеток игрового поля. Компьютер временно ставит свой символ в каждую свободную клетку, чтобы проверить, завершит ли это победную линию для игрока. Если да, он оставляет символ в этой клетке, блокируя ход.
function blockThreat(player) {
for (let i = 0; i < boardSize; i++) {
for (let j = 0; j < boardSize; j++) {
if (board[i][j] === "") {
board[i][j] = player;
if (checkWinner(player)) {
board[i][j] = "O"; // Блокируем угрозу
return true;
}
board[i][j] = ""; // Откат
}
}
}
return false;
}
Проверка победы
Функция checkWinner анализирует все возможные линии на доске: горизонтали, вертикали и диагонали. Если все ячейки в линии принадлежат одному игроку, программа возвращает true.
Выводы
Этот проект показал, насколько мощным может быть логический подход в разработке игр. Усовершенствованная версия программы делает игру более сбалансированной и сложной для игрока. Возможность настройки параметров игры добавляет универсальность, позволяя использовать её как для развлечения, так и для тренировки стратегического мышления.
С этим алгоритмом компьютер больше не просто реагирует на действия игрока — он становится активным и умным противником, который заставляет задуматься перед каждым ходом.
Сыграть в игру вы сможете здесь: https://sergsergius.ru/%d1%83%d0%bc%d0%bd%d1%8b%d0%b5-%d0%ba%d1%80%d0%b5%d1%81%d1%82%d0%b8%d0%ba%d0%b8-%d0%bd%d0%be%d0%bb%d0%b8%d0%ba%d0%b8-%d0%be%d0%bd%d0%bb%d0%b0%d0%b9%d0%bd/
HTML с кодом расположен здесь: https://sergsergius.ru/forum/topic/%d0%ba%d0%be%d0%b4-html-%d0%be%d0%bd%d0%bb%d0%b0%d0%b9%d0%bd-%d0%b8%d0%b3%d1%80%d1%8b-%d0%ba%d1%80%d0%b5%d1%81%d1%82%d0%b8%d0%ba%d0%b8-%d0%bd%d0%be%d0%bb%d0%b8%d0%ba%d0%b8/#postid-247