| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| nuitka.txt | 2025-03-26 | 8.9 kB | |
| grnMatrix.py | 2025-03-26 | 9.8 kB | |
| grnMatrixREADME.md | 2025-03-26 | 22.3 kB | |
| Totals: 3 Items | 40.9 kB | 0 |
Приветствую рузья! Представляю вам свой (совместно с ИИ) питонический труд. *** 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 JavaScript: Нет единого официального репозитория. Варианты можно глягуть у меня на сайте: https://grannik.neocities.org/ Теперь сравнение: Отметить можно только две программы это cmatrix - Наиболее знаменитый вариант. Классика жанра для терминала. А так же unimatrix - Наиболее хорошо написанная и исполняемая программа.
Так что же меня сподвигло меня самому (совместно с ИИ) создать подобную программу, хотя есть аж целых две программы действительно заслуживающих внимания? Оратимся с вопросом к мнению ИИ и почитаем его мнение? Проанализируй мой скрипт. Сравни его с 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 codeberg: https://codeberg.org/Grannik/grnMatrix github: https://github.com/Grannik/grnMatrix gitlab: https://gitlab.com/grannik/grnmatrix