- создать пустой приватный репозиторий на гитхабе и добавить меня.
- создать начальный коммит в master
- создать dev ветку от master и вести дальнейшую разработку в ней. При желании можно больше веток сделать, главное - не коммитить в мастер.
- написать код и запушить в dev
- создать pull request, призвать меня в ревью, дождаться результатов и исправить ошибки. Этот шаг может повторяться несколько раз.
В задаче есть простор для действий - делайте как считаете нужным, я в первую очередь буду оценивать код и используемые подходы.
- Реализовать работающую стратегию игры в русские шашки. Правила игры: https://en.wikipedia.org/wiki/Russian_draughts. Под работоспособностью подразумевается время выбора хода быстрее секунды и адекватные ходы. Если очень хочется сделать игру по другим правилам - пишите мне в личку, скорее всего я буду не против.
- Достаточно сделать перебор в глубину на 4-6 полуходов и какую-то адекватную функцию оценки.
- Сохранение текущего состояния доски в файл по нажатию клавиши S и загрузку из файла нажатием L.
- Проверка на валидность ходов мышкой - что ход в свою очередь, что он возможен и т.п. Аккуратно обработать логику с поеданием фигур.
- Сделать тесты:
- Набор простых позиций на доске с только одним "выигрышным" ходом и лимитами по времени.
- Игра алгоритма с самим собой и проверка времени работы для каждого хода.
- Кодом тестов можно меняться друг с другом - главное, чтобы они покрывали какое-то адекватное количество возможных ситуаций.
Требования к коду: PEP8, аннотации типов в неочевидных местах.
- Реализовать min-max с отсечением заведомо плохих вариантов. Он должен работать с тем же результатом, что и min-max, но за меньшее время. Также можно добавить какие-нибудь эвристики.
- Доделать GUI и сделать игру:
- выбор сложности и цвета игрока.
- игра до какого-то результата, игрок и ИИ ходят по очереди
- сообщения о победе/поражении
- выход из игры с автосохранением в файл и загрузка при последующем запуске. Реализовать это через машину состяний.
- Сделать историю, дать игроку возможность нажатием "z" откатывать состояние на ход назад.
- Основная сложность будет не в реализации конкретных деталей, а в том, чтобы они сочетались друг с другом.
- min-max: https://en.wikipedia.org/wiki/Minimax
- пример работы шахматного алгоритма: https://www.freecodecamp.org/news/simple-chess-ai-step-by-step-1d55a9266977/
- книжка game programming patterns, советую прочитать главы про Command, State и Event queue: https://gameprogrammingpatterns.com/contents.html
О коде в этом репозитории:
Здесь есть некоторый заготовочный код:
- цикл игры в pygame, который позволяет мышкой расставить по доске фигуры как хочется и посмотреть, как ходит искусственный интеллект в том или ином случае.
- Заготовки для игровой доски и ИИ.
Я советую использовать его, но при желании можно написать что-то своё.