Home
Name Modified Size InfoDownloads / 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 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) для спокойной.

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

  1. Класс MatrixColumn
  2. Конструктор __init__:
  3. Принимает максимальную высоту экрана (max_y).
  4. Инициализирует позицию (pos), скорость (speed), длину хвоста (tail_length) и символы хвоста (tail_chars).
  5. Поддерживает паузу после сброса (paused).

  6. Метод update:

  7. Обновляет позицию колонки с учетом скорости и интенсивности (EMOTION_INTENSITY).
  8. При достижении низа экрана или случайном сбросе (RANDOM_RESET_CHANCE) перезапускает колонку.
  9. Обновляет символы хвоста с вероятностью CHAR_CHANGE_RATE.
  10. Применяет градиент цвета и яркость к символам.

  11. Функция main

  12. Инициализация:
  13. Отключает курсор (curses.curs_set(0)).
  14. Настраивает цвета через curses.init_pair (голова и градиент хвоста).
  15. Создает буфер экрана и список колонок (columns).

  16. Основной цикл:

  17. Адаптируется к изменению размера окна терминала.
  18. Применяет пульсацию яркости (если PULSE_RATE > 0).
  19. Обновляет состояние колонок и буфер экрана.
  20. Отрисовывает только измененные позиции (dirty_positions) для оптимизации.
  21. Управляет частотой кадров через time.sleep(1 / FRAME_RATE).

  22. Выход:

  23. Завершает работу при нажатии клавиш 'q' или 'Q'.

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

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

Ограничения

  • Работает только в терминале с поддержкой 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

Source: grnMatrixREADME.md, updated 2025-03-26