Процесс сдачи:

  1. создать пустой приватный репозиторий на гитхабе и добавить меня.
  2. создать начальный коммит в master
  3. создать dev ветку от master и вести дальнейшую разработку в ней. При желании можно больше веток сделать, главное - не коммитить в мастер.
  4. написать код и запушить в dev
  5. создать pull request, призвать меня в ревью, дождаться результатов и исправить ошибки. Этот шаг может повторяться несколько раз.

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

Базовый функционал

  1. Реализовать работающую стратегию игры в русские шашки. Правила игры: https://en.wikipedia.org/wiki/Russian_draughts. Под работоспособностью подразумевается время выбора хода быстрее секунды и адекватные ходы. Если очень хочется сделать игру по другим правилам - пишите мне в личку, скорее всего я буду не против.
  2. Достаточно сделать перебор в глубину на 4-6 полуходов и какую-то адекватную функцию оценки.
  3. Сохранение текущего состояния доски в файл по нажатию клавиши S и загрузку из файла нажатием L.
  4. Проверка на валидность ходов мышкой - что ход в свою очередь, что он возможен и т.п. Аккуратно обработать логику с поеданием фигур.
  5. Сделать тесты:
    • Набор простых позиций на доске с только одним "выигрышным" ходом и лимитами по времени.
    • Игра алгоритма с самим собой и проверка времени работы для каждого хода.
    • Кодом тестов можно меняться друг с другом - главное, чтобы они покрывали какое-то адекватное количество возможных ситуаций.

Требования к коду: PEP8, аннотации типов в неочевидных местах.

Бонусная часть:

  1. Реализовать min-max с отсечением заведомо плохих вариантов. Он должен работать с тем же результатом, что и min-max, но за меньшее время. Также можно добавить какие-нибудь эвристики.
  2. Доделать GUI и сделать игру:
    • выбор сложности и цвета игрока.
    • игра до какого-то результата, игрок и ИИ ходят по очереди
    • сообщения о победе/поражении
    • выход из игры с автосохранением в файл и загрузка при последующем запуске. Реализовать это через машину состяний.
  3. Сделать историю, дать игроку возможность нажатием "z" откатывать состояние на ход назад.
  4. Основная сложность будет не в реализации конкретных деталей, а в том, чтобы они сочетались друг с другом.

Полезные ссылки

О коде в этом репозитории:

Здесь есть некоторый заготовочный код:

  1. цикл игры в pygame, который позволяет мышкой расставить по доске фигуры как хочется и посмотреть, как ходит искусственный интеллект в том или ином случае.
  2. Заготовки для игровой доски и ИИ.

Я советую использовать его, но при желании можно написать что-то своё.