Unlaw 3.13.0: раннер Dash и новый вывод игр в терминале

Что я сделал в Unlaw 3.13.0. Новая игра Dash, бесконечный раннер в терминале и в ul desk, и переписанный с нуля вывод игр, который больше не тормозит.

Originalsprache: Russisch

Вышел Unlaw 3.13.0. Обновиться можно командой ul update.

Dash: бесконечный раннер

В аркаде ul game появилась шестая игра. Механика как у динозаврика, который браузер показывает без интернета, но персонаж и рисовка свои: бежит лиса, нарисованная блочными символами.

  • Лиса бежит сама, мир едет навстречу и постоянно ускоряется.
  • Прыжок: пробел, стрелка вверх, W или клик. Вниз в воздухе ускоряет падение, вниз на земле пригибает.
  • Препятствия: кактусы трёх размеров группами по одному-три и птицы на трёх высотах. Низкую надо перепрыгнуть, среднюю можно перепрыгнуть или пройти пригнувшись, под высокой можно просто пробежать.
  • Расстояние между препятствиями растёт вместе со скоростью, поэтому честная игра всегда проходима. Это проверяет тест: бот на 20 случайных раскладках бежит по 5 минут на каждой сложности и не врезается.
  • Очки идут за пройденное расстояние, каждые 100 очков счёт мигает, после 700 наступает ночь. Облака плывут медленнее земли.
  • Три сложности, как у остальных игр. На hard быстрый старт, короткие промежутки, птицы с самого начала, а после группы кактусов иногда сразу летит птица.

Терминал не сообщает, сколько держится клавиша, поэтому высота прыжка фиксированная, а приседание длится треть секунды и продлевается автоповтором.

Запустить: ul game dash. В ul desk игра появилась на вкладке Games сама, рекорды общие с терминалом.

Вывод игр в терминале: переписан с нуля

Игры в терминале подтормаживали, и я нашёл почему. Каждый кадр, 30 раз в секунду, программа заново печатала весь экран и сбрасывала стиль на каждом цветном куске. На тетрисе в окне 100×30 выходило около 15 КБ на кадр, почти 450 КБ в секунду.

Теперь программа держит предыдущий кадр и отправляет в терминал только изменившиеся клетки. Если на экране ничего не поменялось, не пишется ни байта. Если нажимать клавишу каждый кадр, выходит около 200 байт, примерно в 70 раз меньше. Кадры идут ровно каждые 1/30 секунды: раньше время отрисовки прибавлялось к паузе между кадрами.

Заодно я переделал внешний вид:

  • В терминалах с полным цветом, как Ghostty, игры рисуются своей палитрой. В остальных остаются обычные 16 цветов.
  • Новое меню аркады: заголовок, описание каждой игры, рекорды справа.
  • У каждой игры строка со счётом над полем, рамки со скруглёнными углами, поле по центру окна.
  • Окна паузы и конца игры с тенью поверх затемнённой игры.
  • Если уменьшить окно посреди игры, она встаёт на паузу и ждёт, а не рисует мусор.
  • Движения мыши больше не забивают очередь ввода.
  • Терминал восстанавливается при любом выходе, даже если программа упала.

В ul desk игры выглядят как раньше: страница получает тот же поток кадров, его формат не менялся.

Что не изменилось

Я ничего не удалял, старые команды и конфиги работают. Правила игр и рекорды остались прежними. Команды, которые вы отредактировали вручную, обновление не трогает.

Дальше

В планах по-прежнему локальная модель ul lm laya и память агента.

Ссылки

← Alle Beiträge