Крестики-Нолики 5 в ряд
- 26
- 0
- Опубликовано: 2021-09-02
Также были максимально расписаны блоки в коде, чтобы заказчица смогла защитить разработку. Помимо этого, были сделаны блок-схемы на самого бота и описание паттернов и модулей⚙
Скриншоты работы, описание модулей и паттернов приложу к посту.
Кратко о том, как работает бот:
1) Ищет все потенциальные ходы. Ход считается потенциальным, если в квадратной области 5х5 вокруг него есть непустая клетка
2) Для каждого потенциального хода ищет самый весомый шаблон по каждому из направлений: горизонталь (вправо\влево), вертикаль (вверх\вниз), основная диагональ (влево и вверх\вправо и вниз), побочная диагональ (вправо и вверх\влево и вниз). Шаблоны заранее созданы и взвешены
3) Суммирует самые весомые шаблоны по каждому из направлений. Если шаблоны есть в 2 и более направлениях, вес удваивается (вилка)
4) Ищет самый весомый ход
Шаблоны(паттерны) проектирования:
Состояние - каждая клетка игрового поля - это состояние (крестик\нолик\пусто). Так же состояния используются для управления игровым циклом (Context::Scene)
Неполноценный синглтон - структура Context создается один раз и используется на протяжении всей работы программы
Притянутая за уши стратегия - поведения бота зависит от того, за какую сторону он играет (Bot::move(board, side))
Притянутый за уши фасад - поиск победителя и вычисление хода бота происходят по вызову одной функции.