Первая часть (анализ кода) находится здесь: https://habr.com/post/420725/.
Алгоритм
Описание
Алгоритм непрерывно выполняет следующие шаги:
- Ждёт, пока не создастся новое тетримино.
- Проверяет тип нового созданного тетримино, тип следующего тетримино (фигура в поле предпросмотра) и содержимое игрового поля.
- Исследует все возможные способы добавления двух тетримино на игровое поле и оценивает каждую вероятность.
- Перемещает новое созданное тетримино, чтобы оно совпадало с местом наилучшенней обнаруженной вероятности.
Каждый из этих этапов подробно описан ниже.
Поиск блокировки
Рассмотрим упрощённую версию Tetris, в которой фигуры не падают автоматически. Единственный способ спустить фигуру вниз — это мягкий спуск. Убрав из игры тайминги, мы можем полностью описать состояние активного тетримино его позицией и ориентацией. Фигура имеет известное место изначального создания, а для преобразования из одного состояния в другое используются следующие операции:
- Перемещение на один шаг вниз
- Перемещение на один шаг влево
- Перемещение на один шаг вправо
- Поворот на один шаг против часовой стрелки
- Поворот на один шаг по часовой стрелке