Приветствую рузья! Представляю вам свой (совместно с ИИ) питонический труд. grnMatrix И так что было до сих пор:
- cmatrix Programming language: C Github: https://github.com/abishekvashok/cmatrix
- unimatrix Programming language: Python Github: https://github.com/will8211/unimatrix
- greenrain Programming language: C Github: https://github.com/aguegu/greenrain
- tmatrix Programming language: C++ Github: https://github.com/M4444/TMatrix
-
bash_matrix Programming language: Bash Github: Примеры: https://github.com/rdok/matrix-script, https://github.com/jcgonzalez25/MatrixRainBash
Теперь сравнение: Отметить можно только две программы это cmatrix - Наиболее знаменитый вариант. Классика жанра для терминала. А так же unimatrix - Наиболее хорошо написанная и исполняемая программа.JavaScript: Нет единого официального репозитория. Варианты можно глягуть у меня на сайте: https://grannik.neocities.org/
Так что же меня сподвигло меня самому (совместно с ИИ) создать подобную программу, хотя есть аж целых две программы действительно заслуживающих внимания? Оратимся с вопросом к мнению ИИ и почитаем его мнение? Проанализируй мой скрипт. Сравни его с cmatrix unimatrix greenrain tmatrix bash_matrix. Кратко назови те положительные черты, ради которых он был написан. Его ответ. Положительные черты твоего скрипта Твой скрипт явно создавался с целью улучшить визуальный и функциональный опыт “цифрового дождя”. Вот ключевые преимущества, ради которых он был написан:
- Гибкость настройки: Огромное количество параметров (скорость, длина хвоста, затухание, плотность колонок, пульсация) позволяет пользователю адаптировать эффект под свои предпочтения.
- Визуальная сложность: Градиент цветов хвоста, кривая затухания и пульсация яркости создают более богатый и современный вид по сравнению с классическими аналогами.
- Разнообразие символов: Поддержка широкого набора символов (включая Unicode) делает эффект более разнообразным и уникальным.
- Динамичность: Случайный сброс колонок, изменение символов в хвосте и адаптация к размеру окна добавляют живости и интерактивности.
- Эмоциональная выразительность: Параметр EMOTION_INTENSITY и пульсация подчеркивают стремление к созданию “живого” и атмосферного эффекта. Итог Твой скрипт выделяется среди аналогов благодаря детальной настройке и визуальной изысканности. Он ближе к unimatrix по духу (Python, гибкость), но идет дальше за счет уникальных эффектов вроде градиента и пульсации. По сравнению с cmatrix и tmatrix, он менее оптимизирован для скорости, но компенсирует это богатством возможностей. Это отличный выбор для тех, кто хочет не просто “Матрицу”, а персонализированный и выразительный терминал-арт.
Да. Всё верно. Все цели достигнуты. Могу только от себя добавить. Создатели cmatrix unimatrix умнички и молодцы! Действительно постарались.
- Дополню только, что к примеру мне не понятно зачем аргументы программе или конфигурационный файл, когда это иоткрытый исходный код. Я специально вынес все переменные в начало скрипта.
- И как самая вкусная еда - это еда выращенная на своём огороде и приготовленная в собственной кухне, так и самый лучший скрипт - это скрипт написанный тобой и под тебя.
- У меня повышенные эстетические требования ко всем этим скриптам. Требования, которые не выдерживает ни одна программа. Я понимаю, что это моя проблема. Ну так вот я и решил эту проблему.
- Ещё одна причина это то, что данная программа - это часть ЕДИНОГО комплекса моего личного софта, над которым я работаю не первый год, а коиплекс - это целый живой организм в моём компьютере.
Подробное техническое описание программы grnMatrix.
- Назначение программы Программа представляет собой визуальную анимацию, имитирующую эффект “цифрового дождя” из фильма “Матрица”. Символы падают сверху вниз по колонкам в терминале, создавая динамичный и атмосферный эффект. Реализация использует библиотеку curses для управления терминалом.
- Основные характеристики
- Язык программирования: Python 3
-
Библиотека:
curses(управление терминалом) - Режим работы: Терминальный интерфейс
- Особенности:
- Настраиваемые символы, цвета и градиенты.
- Плавное падение символов с затуханием хвоста.
- Адаптация к изменению размера окна терминала.
- Поддержка пульсации яркости и случайных сбросов колонок.
- Структура программы
- Глобальные настройки:
-
Переменные для конфигурации анимации (например,
SYMBOL_SET,HEAD_COLOR,TAIL_GRADIENT_COLORS,SYMBOL_FALL_SPEEDи др.). - Определяют поведение и внешний вид эффекта.
-
Класс
MatrixColumn:
- Отвечает за управление одной колонкой “дождя”.
- Хранит позицию, скорость, длину хвоста и символы.
-
Функция
main:
- Основной цикл программы.
-
Инициализирует
curses, управляет отрисовкой и обновлением экрана.
- Точка входа:
-
Использует
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) для спокойной.
Для изменения любого параметра достаточно открыть файл программы в текстовом редакторе и отредактировать значение соответствующей переменной в секции настроек перед запуском.
-
Класс
MatrixColumn
-
Конструктор
__init__: -
Принимает максимальную высоту экрана (
max_y). -
Инициализирует позицию (
pos), скорость (speed), длину хвоста (tail_length) и символы хвоста (tail_chars). -
Поддерживает паузу после сброса (
paused). -
Метод
update: -
Обновляет позицию колонки с учетом скорости и интенсивности (
EMOTION_INTENSITY). -
При достижении низа экрана или случайном сбросе (
RANDOM_RESET_CHANCE) перезапускает колонку. -
Обновляет символы хвоста с вероятностью
CHAR_CHANGE_RATE. -
Применяет градиент цвета и яркость к символам.
-
Функция
main
-
Инициализация:
-
Отключает курсор (
curses.curs_set(0)). -
Настраивает цвета через
curses.init_pair(голова и градиент хвоста). -
Создает буфер экрана и список колонок (
columns). -
Основной цикл:
-
Адаптируется к изменению размера окна терминала.
-
Применяет пульсацию яркости (если
PULSE_RATE > 0). -
Обновляет состояние колонок и буфер экрана.
-
Отрисовывает только измененные позиции (
dirty_positions) для оптимизации. -
Управляет частотой кадров через
time.sleep(1 / FRAME_RATE). -
Выход:
-
Завершает работу при нажатии клавиш ‘q’ или ‘Q’.
Алгоритм работы
- Инициализация терминала и цветов.
- Создание колонок с случайными параметрами.
- В цикле:
- Обновление позиций и символов колонок.
- Применение затухания к хвостам.
- Отрисовка измененных позиций на экране.
- Проверка ввода пользователя.
- Завершение при выходе.
Ограничения
-
Работает только в терминале с поддержкой
curses. - Производительность зависит от размера окна и частоты кадров.
Пример запуска: ./grnMatrix.py Завершает работу при нажатии клавиш ‘q’ или ‘Q’.
asciinema: https://asciinema.org/a/709941