Python-скрипт, який створює ефект "цифрового дощу" (падаючого зеленого коду) з культового фільму "Матриця" безпосередньо у вашому терміналі.
Скрипт використовує стандартні модулі Python і не потребує встановлення сторонніх бібліотек.
- Автентичний вигляд: напівширинна японська катакана (саме її використали у фільмі) з домішкою цифр і знаків. Напівширинні символи моноширинні, тому сітка не "розповзається" — повноширинні (
アカサ) займають два стовпці й ламають вирівнювання. - Плавна анімація: 30 кадрів на секунду зі стабілізацією темпу — час рендера кадру вираховується з паузи, тому швидкість не залежить від потужності машини.
- Спокійний темп: символи не падають, а плавно опускаються — близько 3 рядків на секунду, тому шлях через екран займає понад десяток секунд.
- "Живий" дощ: кожен струмок рухається зі своєю швидкістю (0.05–0.16 клітинки за кадр), тому потік не виглядає як "строй".
- Довгий хвіст із згасанням: слід завдовжки 10–34 символи, градієнт із 10 відтінків зеленого (ANSI 256) від яскраво-білої "голови" краплі до майже чорного кінця. Довжина задається в клітинках і не залежить від швидкості струмка.
- Мерехтіння: частина видимих символів змінюється на льоту, як у фільмі.
- На все вікно: розмір полотна беремо напряму в терміналу через
os.get_terminal_size(), тому кадр займає весь екран. Зміна розміру вікна підхоплюється на льоту. - Жодних залежностей: працює "з коробки" (тільки вбудовані
os,random,shutil,sys,time). - Безпечне закриття: анімація йде в альтернативному буфері екрана, тому історія терміналу не затирається. Курсор і налаштування повертаються через
finally— навіть якщо скрипт впаде з помилкою, а не тільки післяCtrl+C.
-
Переконайтеся, що у вас встановлено Python 3.
-
Відкрийте термінал у папці з файлом
Martix_ver2.py. -
Виконайте команду:
python3 Martix_ver2.py
(або
python Martix_ver2.py— залежно від налаштувань вашої операційної системи).Зверніть увагу на велику літеру M в імені файлу: на Linux регістр має значення.
-
Щоб зупинити ефект і повернутися до звичайного терміналу, натисніть
Ctrl + C.
Усі "крутилки" зібрані на початку Martix_ver2.py — правити код не потрібно, достатньо змінити значення константи:
| Константа | Типове значення | Що робить |
|---|---|---|
FPS |
30 |
Кадрів на секунду. Більше — плавніше (спробуйте 60), менше — економніше до процесора. |
DROP_SPEED |
(0.05, 0.16) |
Швидкість руху в клітинках за кадр: мінімум і максимум. Зменшуйте, щоб дощ став ще повільнішим, (0.3, 0.8) дає різкий "злива"-режим. |
TRAIL_LEN |
(10, 34) |
Довжина хвоста в символах. |
SPAWN_CHANCE |
0.0022 |
Густота дощу — шанс запустити нову краплю в порожньому стовпці за кадр. При типовому значенні одночасно активна приблизно половина стовпців. |
FLICKER_RATIO |
0.07 |
Наскільки активно мерехтять уже намальовані символи. |
FIXED_SIZE |
None |
None — на все вікно терміналу. Задайте кортеж, напр. (120, 40), щоб зафіксувати розмір полотна. |
Швидкість руху і плавність картинки — це різні речі: FPS відповідає за плавність, DROP_SPEED — за темп падіння. Щоб дощ став повільнішим, але не "смикався", зменшуйте DROP_SPEED, а FPS не торкайтеся.
Скрипт використовує ANSI-ескейп коди для кольорів, керування курсором і альтернативного буфера екрана. Потрібен термінал із підтримкою 256 кольорів — це майже всі сучасні: iTerm2, Terminal.app, Windows Terminal, GNOME Terminal, Konsole, Alacritty, вбудовані термінали VS Code та PyCharm.
Для катакани потрібен шрифт із японськими глифами. Якщо замість символів видно порожні прямокутники (□), поставте шрифт із підтримкою CJK — наприклад, Menlo, Cascadia Code, JetBrains Mono або Noto Sans Mono CJK.
- Скрипт сам вмикає обробку ANSI-кодів у
cmd.exe(викликos.system("")при старті), тому кольори працюють і там. - Усе ж наполегливо рекомендується запускати його у Windows Terminal, сучасному PowerShell або у вбудованому терміналі вашого редактора коду — там краща підтримка кольорів і шрифтів з катаканою.
Екран описується трьома сітками однакового розміру: символ у клітинці, її вік у кадрах і час життя (через скільки кадрів вона згасне). Кожен кадр вік усіх видимих клітинок збільшується на одиницю, а колір вибирається за відношенням вік / час_життя — так виходить плавний градієнт хвоста.
Краплі — це окремі об'єкти, що знають лише позицію голови, швидкість і довжину сліду. Коли голова йде за нижній край екрана, крапля зникає, а її хвіст догасає самостійно, бо згасання прив'язане до клітинок, а не до краплі.
Кадр збирається в один рядок і виводиться одним викликом write() — код кольору дописується лише тоді, коли він змінюється відносно попередньої клітинки. Це зменшує кадр приблизно вп'ятеро й прибирає мерехтіння картинки.