GNU/Linux xterm-256color bash 167 views

Приветствую рузья! Представляю вам свой (совместно с ИИ) питонический труд. grnMatrix И так что было до сих пор:

Так что же меня сподвигло меня самому (совместно с ИИ) создать подобную программу, хотя есть аж целых две программы действительно заслуживающих внимания? Оратимся с вопросом к мнению ИИ и почитаем его мнение? Проанализируй мой скрипт. Сравни его с cmatrix unimatrix greenrain tmatrix bash_matrix. Кратко назови те положительные черты, ради которых он был написан. Его ответ. Положительные черты твоего скрипта Твой скрипт явно создавался с целью улучшить визуальный и функциональный опыт “цифрового дождя”. Вот ключевые преимущества, ради которых он был написан:

  • Гибкость настройки: Огромное количество параметров (скорость, длина хвоста, затухание, плотность колонок, пульсация) позволяет пользователю адаптировать эффект под свои предпочтения.
  • Визуальная сложность: Градиент цветов хвоста, кривая затухания и пульсация яркости создают более богатый и современный вид по сравнению с классическими аналогами.
  • Разнообразие символов: Поддержка широкого набора символов (включая Unicode) делает эффект более разнообразным и уникальным.
  • Динамичность: Случайный сброс колонок, изменение символов в хвосте и адаптация к размеру окна добавляют живости и интерактивности.
  • Эмоциональная выразительность: Параметр EMOTION_INTENSITY и пульсация подчеркивают стремление к созданию “живого” и атмосферного эффекта. Итог Твой скрипт выделяется среди аналогов благодаря детальной настройке и визуальной изысканности. Он ближе к unimatrix по духу (Python, гибкость), но идет дальше за счет уникальных эффектов вроде градиента и пульсации. По сравнению с cmatrix и tmatrix, он менее оптимизирован для скорости, но компенсирует это богатством возможностей. Это отличный выбор для тех, кто хочет не просто “Матрицу”, а персонализированный и выразительный терминал-арт.

Да. Всё верно. Все цели достигнуты. Могу только от себя добавить. Создатели cmatrix unimatrix умнички и молодцы! Действительно постарались.

  • Дополню только, что к примеру мне не понятно зачем аргументы программе или конфигурационный файл, когда это иоткрытый исходный код. Я специально вынес все переменные в начало скрипта.
  • И как самая вкусная еда - это еда выращенная на своём огороде и приготовленная в собственной кухне, так и самый лучший скрипт - это скрипт написанный тобой и под тебя.
  • У меня повышенные эстетические требования ко всем этим скриптам. Требования, которые не выдерживает ни одна программа. Я понимаю, что это моя проблема. Ну так вот я и решил эту проблему.
  • Ещё одна причина это то, что данная программа - это часть ЕДИНОГО комплекса моего личного софта, над которым я работаю не первый год, а коиплекс - это целый живой организм в моём компьютере.

Подробное техническое описание программы grnMatrix.

  • Назначение программы Программа представляет собой визуальную анимацию, имитирующую эффект “цифрового дождя” из фильма “Матрица”. Символы падают сверху вниз по колонкам в терминале, создавая динамичный и атмосферный эффект. Реализация использует библиотеку curses для управления терминалом.
  • Основные характеристики
  • Язык программирования: Python 3
  • Библиотека: curses (управление терминалом)
  • Режим работы: Терминальный интерфейс
  • Особенности:
  • Настраиваемые символы, цвета и градиенты.
  • Плавное падение символов с затуханием хвоста.
  • Адаптация к изменению размера окна терминала.
  • Поддержка пульсации яркости и случайных сбросов колонок.
  • Структура программы
  1. Глобальные настройки:
  • Переменные для конфигурации анимации (например, SYMBOL_SET, HEAD_COLOR, TAIL_GRADIENT_COLORS, SYMBOL_FALL_SPEED и др.).
  • Определяют поведение и внешний вид эффекта.
  1. Класс MatrixColumn:
  • Отвечает за управление одной колонкой “дождя”.
  • Хранит позицию, скорость, длину хвоста и символы.
  1. Функция main:
  • Основной цикл программы.
  • Инициализирует curses, управляет отрисовкой и обновлением экрана.
  1. Точка входа:
  • Использует curses.wrapper(main) для корректной инициализации и завершения работы с терминалом.

### Основные компоненты

Настройка и кастомизация

Пользователь может изменять поведение и внешний вид анимации “Matrix Rain” через глобальные переменные, определенные в начале программы. Ниже приведен полный список параметров с объяснением их назначения и инструкциями по настройке:

  • [1] **SYMBOL_SET**:

    • Описание: Строка, содержащая набор символов, используемых в анимации (цифры, буквы, специальные знаки, Unicode-символы).
    • Значение по умолчанию: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*+-=[]{}|;:,.<>?/~│_─▔╴╵╶╷╌╎⌜⌝⌞⌟┌┐┘└╭╮╯╰┴┬⊺├┤┼⌈⌉⌊⌋"
    • Как настроить: Измените строку, добавляя или удаляя символы. Например, для использования только цифр: SYMBOL_SET = "0123456789".
  • [2] **HEAD_COLOR**:

    • Описание: Цвет символа в голове каждой колонки.
    • Значение по умолчанию: "white"
    • Как настроить: Укажите один из поддерживаемых цветов: "green", "red", "blue", "yellow", "white", "cyan", "magenta". Например, для красного: HEAD_COLOR = "red".
  • [3] **TAIL_GRADIENT_COLORS**:

    • Описание: Список цветов, формирующих градиент хвоста колонки.
    • Значение по умолчанию: ["cyan", "magenta", "magenta"]
    • Как настроить: Измените список, указав от 1 до нескольких цветов из списка: "green", "red", "blue", "yellow", "white", "cyan", "magenta". Например, для зеленого градиента: TAIL_GRADIENT_COLORS = ["green", "yellow"].
  • [4] **SYMBOL_FALL_SPEED**:

    • Описание: Базовая скорость падения символов (в строках за кадр).
    • Значение по умолчанию: 0.125
    • Как настроить: Увеличьте для ускорения (например, 0.25) или уменьшите для замедления (например, 0.05).
  • [5] **FADE_SPEED**:

    • Описание: Скорость затухания символов в хвосте (чем выше, тем быстрее исчезают).
    • Значение по умолчанию: 0.125
    • Как настроить: Увеличьте (например, 0.25) для быстрого затухания или уменьшите (например, 0.05) для более длинного шлейфа.
  • [6] **FRAME_RATE**:

    • Описание: Частота обновления экрана (кадров в секунду).
    • Значение по умолчанию: 20
    • Как настроить: Увеличьте (например, 30) для более плавной анимации или уменьшите (например, 10) для экономии ресурсов.
  • [7] **TAIL_LENGTH_MIN**:

    • Описание: Минимальная длина хвоста колонок (в строках).
    • Значение по умолчанию: 5
    • Как настроить: Установите меньшее значение, например, TAIL_LENGTH_MIN = 3, для более коротких хвостов.
  • [8] **TAIL_LENGTH_MAX**:

    • Описание: Максимальная длина хвоста колонок (в строках).
    • Значение по умолчанию: 34
    • Как настроить: Установите большее или меньшее значение, например, TAIL_LENGTH_MAX = 10, для контроля максимальной длины хвостов.
  • [9] **FADE_STEPS**:

    • Описание: Максимальное количество шагов затухания символов (влияет на плавность перехода).
    • Значение по умолчанию: 256
    • Как настроить: Уменьшите (например, 128) для более резкого затухания или увеличьте (например, 512) для большей плавности.
  • [10] **BOTTOM_FADE_BOOST**:

    • Описание: Коэффициент ускорения затухания в нижней части экрана.
    • Значение по умолчанию: 1.0
    • Как настроить: Увеличьте (например, 2.0) для быстрого исчезновения внизу или уменьшите (например, 0.5) для равномерного затухания.
  • [11] **CHAR_CHANGE_RATE**:

    • Описание: Вероятность смены символа в хвосте на каждом кадре.
    • Значение по умолчанию: 0.05
    • Как настроить: Увеличьте (например, 0.1) для частой смены символов или уменьшите (например, 0.01) для большей стабильности.
  • [12] **COLUMN_DENSITY**:

    • Описание: Доля ширины экрана, заполненная колонками (от 0 до 1).
    • Значение по умолчанию: 0.6
    • Как настроить: Увеличьте (например, 0.9) для плотного заполнения или уменьшите (например, 0.3) для редких колонок.
  • [13] **SYMBOL_BRIGHTNESS**:

    • Описание: Уровень яркости символов (влияет на использование A_BOLD, A_NORMAL, A_DIM).
    • Значение по умолчанию: 0.5
    • Как настроить: Увеличьте (например, 0.75) для более ярких символов или уменьшите (например, 0.25) для тусклых.
  • [14] **TAIL_FADE_CURVE**:

    • Описание: Кривая затухания хвоста (влияет на распределение яркости).
    • Значение по умолчанию: 0.7
    • Как настроить: Увеличьте (например, 1.0) для линейного затухания или уменьшите (например, 0.3) для резкого перехода.
  • [15] **RANDOM_RESET_CHANCE**:

    • Описание: Вероятность случайного сброса колонки на каждом кадре.
    • Значение по умолчанию: 0.002
    • Как настроить: Увеличьте (например, 0.01) для частых сбросов или уменьшите (например, 0.0005) для редких.
  • [16] **PAUSE_DURATION**:

    • Описание: Время паузы (в секундах) после сброса колонки.
    • Значение по умолчанию: 0.0
    • Как настроить: Установите, например, 1.0 для паузы в 1 секунду.
  • [17] **BACKGROUND_CHAR**:

    • Описание: Символ фона экрана.
    • Значение по умолчанию: ' '
    • Как настроить: Замените, например, на '.' для точечного фона.
  • [18] **SYMBOL_DIVERSITY**:

    • Описание: Доля символов из SYMBOL_SET, используемых в анимации (от 0 до 1).
    • Значение по умолчанию: 1.0
    • Как настроить: Уменьшите (например, 0.5) для использования половины символов.
  • [19] **MOVEMENT_VARIATION**:

    • Описание: Диапазон случайного отклонения скорости для каждой колонки.
    • Значение по умолчанию: 0.05
    • Как настроить: Увеличьте (например, 0.1) для большего разнообразия скоростей.
  • [20] **PULSE_RATE**:

    • Описание: Частота пульсации яркости (в циклах в секунду).
    • Значение по умолчанию: 0.3
    • Как настроить: Увеличьте (например, 0.5) для быстрой пульсации или установите 0.0 для отключения.
  • [21] **SCREEN_FILL_RATE**:

    • Описание: Доля экрана, заполненная случайными символами при запуске (от 0 до 1).
    • Значение по умолчанию: 0.0
    • Как настроить: Установите, например, 0.2 для заполнения 20% экрана.
  • [22] **PROGRESS_FILLED_CHAR**:

    • Описание: Символ, используемый для головы колонок.
    • Значение по умолчанию: '│'
    • Как настроить: Замените, например, на '█' для другого вида головы.
  • [23] **TEXT_PULSE_AMPLITUDE**:

    • Описание: Амплитуда пульсации яркости (влияет на интенсивность эффекта).
    • Значение по умолчанию: 0.0
    • Как настроить: Увеличьте (например, 0.5) для заметной пульсации.
  • [24] **EMOTION_INTENSITY**:

    • Описание: Общий множитель интенсивности анимации (влияет на скорость и затухание).
    • Значение по умолчанию: 0.6
    • Как настроить: Увеличьте (например, 1.0) для более активной анимации или уменьшите (например, 0.3) для спокойной.

Для изменения любого параметра достаточно открыть файл программы в текстовом редакторе и отредактировать значение соответствующей переменной в секции настроек перед запуском.

  1. Класс MatrixColumn
  • Конструктор __init__:

  • Принимает максимальную высоту экрана (max_y).

  • Инициализирует позицию (pos), скорость (speed), длину хвоста (tail_length) и символы хвоста (tail_chars).

  • Поддерживает паузу после сброса (paused).

  • Метод update:

  • Обновляет позицию колонки с учетом скорости и интенсивности (EMOTION_INTENSITY).

  • При достижении низа экрана или случайном сбросе (RANDOM_RESET_CHANCE) перезапускает колонку.

  • Обновляет символы хвоста с вероятностью CHAR_CHANGE_RATE.

  • Применяет градиент цвета и яркость к символам.

  1. Функция main
  • Инициализация:

  • Отключает курсор (curses.curs_set(0)).

  • Настраивает цвета через curses.init_pair (голова и градиент хвоста).

  • Создает буфер экрана и список колонок (columns).

  • Основной цикл:

  • Адаптируется к изменению размера окна терминала.

  • Применяет пульсацию яркости (если PULSE_RATE > 0).

  • Обновляет состояние колонок и буфер экрана.

  • Отрисовывает только измененные позиции (dirty_positions) для оптимизации.

  • Управляет частотой кадров через time.sleep(1 / FRAME_RATE).

  • Выход:

  • Завершает работу при нажатии клавиш ‘q’ или ‘Q’.

Алгоритм работы

  1. Инициализация терминала и цветов.
  2. Создание колонок с случайными параметрами.
  3. В цикле:
  • Обновление позиций и символов колонок.
  • Применение затухания к хвостам.
  • Отрисовка измененных позиций на экране.
  • Проверка ввода пользователя.
  1. Завершение при выходе.

Ограничения

  • Работает только в терминале с поддержкой curses.
  • Производительность зависит от размера окна и частоты кадров.

Пример запуска: ./grnMatrix.py Завершает работу при нажатии клавиш ‘q’ или ‘Q’.

asciinema: https://asciinema.org/a/709941

More by Grannik

lsix 0:31

by Grannik

untitled 0:50

by Grannik

untitled 3:16

by Grannik

Tesseract-ocr 1:42

by Grannik

See all