Пока Google тянет с выпуском новой флагманской нейросети, я решил проверить недавно выпущенную нейросеть Gemini 3.8 Flash High в деле оптимизации. Checkers трогать не стал, потому что оставил его для флагманской модели, а для эксперимента взял другую игрушку - Extris (Тетрис), созданную мной тоже с помощью ИИ.
В старой версии игровой ИИ думал с долгими паузами. Но после оптимизации алгоритма он стал думать в разы быстрее. Вот что об этом пишет Gemini:
----------------
В обновленной версии файла ai.s логика принятия решений (интеллект) осталась прежней: ИИ старается опустить фигуру как можно ниже, собрать линии, не оставлять под блоками пустых "дыр" и держать поле ровным.
Однако техническая начинка была полностью переписана ради колоссального ускорения работы. Процессор Sega Genesis (Motorola 68000) довольно медленный, и старый код заставлял игру тормозить (проседать по кадрам), пока ИИ думал. Новый код решает эту проблему.
Ниже представлен простой и понятный список всех ключевых обновлений:
1. Переход на "карандаш и ластик" вместо бесконечного ксерокопирования поля
* Как было: Чтобы примерить фигуру в разные места, старый ИИ каждый раз создавал полную копию всего игрового поля в памяти. За одну секунду он мог копировать поле целиком десятки и сотни раз.
* Как стало: Теперь поле копируется всего один раз. Фигура "рисуется" на поле, ИИ оценивает ситуацию, а затем сразу же "стирает" именно эти 4 кубика обратно.
* Что это дает: Огромная экономия оперативной памяти и времени процессора. Исчезает главная причина "заикания" игры при появлении новой фигуры.
2. Быстрая проверка столкновений (только 4 реальных блока)
* Как было: Фигура в Тетрисе вписана в невидимую квадратную сетку 4x4 (16 клеток). Старый ИИ каждый раз перебирал все 16 клеток сетки (даже пустые), чтобы понять, не врезалась ли фигура в стену или другие блоки.
* Как стало: В начале хода новый алгоритм один раз запоминает точные координаты только реальных 4 кубиков фигуры (check_coll_fast). При падении проверяются только эти 4 точки.
* Что это дает: Проверка падения фигуры вниз стала быстрее примерно в 3–4 раза.
3. Запоминание состояния стакана ("умный пересчет")
* Как было: Примеряя фигуру, ИИ заново сканировал все 12 колонок поля сверху донизу, чтобы посчитать высоту столбиков и найти опасные "дыры" (пустоты под блоками).
* Как стало:
- Перед началом размышлений ИИ один раз запоминает базовую высоту и количество дыр во всех колонках (base_heights, base_holes).
- Во время примерки специальная маска (dirty_mask) отмечает только те колонки, куда упала фигура (обычно это 2–3 колонки из 12).
- Пересчитываются только затронутые колонки, а остальные берутся из готовой памяти.
* Что это дает: Скорость оценки качества хода выросла в разы. ИИ больше не тратит время на анализ тех частей поля, которые фигура вообще не затронула.
4. Ускоренный поиск собранных линий
* Как было: Проверка заполненности рядов шла по сложной формуле со смещениями и лишними математическими операциями умножения на каждом шаге.
* Как стало: Память теперь сканируется последовательно ("в один проход") — процессор просто идет по цепочке ячеек подряд, что для чипа Sega Genesis является самым естественным и быстрым режимом.
* Что это дает: Мгновенный подсчет очков за сгорающие линии без нагрузки на видеочип.
5. Облегченный код для процессора (микро-оптимизации)
* Как было: В старом коде функции постоянно сохраняли во временный стек и доставали обратно кучу служебных данных процессора (movem.l), использовали "тяжелые" 32-битные числа там, где хватило бы маленьких 16-битных.
* Как стало: Код переписан на короткие команды (инструкции с суффиксом .s, цикл dbf, прямое чтение регистров). Функции стали легковесными.
* Что это дает: Меньше микро-задержек на уровне выполнения инструкций процессором консоли.
Итог для игрока:
* Интеллект остался тем же: Бот не стал глупее или хитрее — он выбирает те же самые идеальные позиции, что и раньше.
* Исчезли "лаги" и просадки FPS: Игра работает плавно (стабильные 60 кадров в секунду), даже если на экране одновременно играют два ИИ на высокой скорости.
* Мгновенный отклик: ИИ тратит на расчет хода доли миллисекунды вместо нескольких кадров анимации.
----------------
Благодаря такой оптимизации в игру теперь можно добавить новый режим игры человека против ИИ.
Для сравнения выкладываю старую и обновленную версии Extris. Для обновленной выкладываю так же и исходный код с ai.s. Все в архиве.
Чтобы активировалась демонстрационная игра ИИ, на титульном экране подождите 20 секунд.