код как в матрице в cmd

Текстовый дождь, как в «Матрице»

Приятная кодовая безделушка.

Недавно мы делали проект про полёт в космос в 3D, где использовали для рисования библиотеку p5 и принципы ООП. Тогда мы ограничились одним классом и объектами на основе этого класса.

Сегодня будет интереснее — мы сделаем два класса, причём объекты одного класса будут состоять из объектов другого класса. Это нужно, чтобы воссоздать эффект «Матрицы»: когда буквы одновременно и падают, и сменяются.

Что делаем

Тучку, из которой падают буквы, как в фильме «Матрица»:

код как в матрице в cmd. картинка код как в матрице в cmd. код как в матрице в cmd фото. код как в матрице в cmd видео. код как в матрице в cmd смотреть картинку онлайн. смотреть картинку код как в матрице в cmd. код как в матрице в cmd. картинка код как в матрице в cmd. код как в матрице в cmd фото. код как в матрице в cmd видео. код как в матрице в cmd смотреть картинку онлайн. смотреть картинку код как в матрице в cmd.

Зачем мы это сделаем? Ради красоты, ради искусства, ради JavaScript.

Последовательность действий будет такая:

Обратите внимание, что тучка и символы — это разные сущности, их можно спокойно использовать отдельно друг от друга.

Подготовка страницы

Используем для проекта стандартный HTML-шаблон.

Чтобы символы выглядели красиво и мы могли ими управлять, подключим стили Font Awesome — это такой набор правил по оформлению шрифтов.

Настраиваем стили

Сначала сделаем то же самое, что и в проекте со звёздами — разрешим задавать размеры всех элементов в разных единицах одновременно, обнулим отступы и растянем страницу на всё окно браузера.

Затем зададим общие свойства для той области, где будет нарисована тучка — размеры и положение. Отдельно пропишем свойство z-index — оно виртуально приподнимет слой с тучкой выше остальных, чтобы тучка закрывала те символы, которые появились внутри неё, но которым ещё рано появляться.

Последнее, что сделаем здесь, — настроим саму область, где будут видны падающие буквы. Всё это пока делается чистым CSS, никакого программирования.

Рисуем тучку

Чтобы нарисовать тучку, используем теги и

. Первый тэг говорит браузеру, что в выбранном блоке будем рисовать векторную графику.

👉 Векторная графика состоит не из отдельных пикселей, а из элементов — линий, прямоугольников, кругов и прочих геометрических фигур. Эти фигуры можно объединять друг с другом, рисовать их любого размера и цвета и комбинировать как угодно, чтобы получить нужный рисунок. Подробно мы это разобрали в отдельной статье про графику.

рисует линию по заданным правилам. Вкратце эти правила можно описать так:

У нас ещё будет отдельная статья с разбором, как работает SVG, а пока просто используем готовый код:

Что такое объекты, классы, методы и конструкторы?

Далее мы будем использовать понятия «объект», «метод», «класс» и «конструктор». Это базовые понятия ООП. Если хотите углубиться — читайте наш цикл, а пока вот основные положения:

Объект — это «коробка», в которой могут лежать данные и действия. В нашем случае объектами будут отдельные сменяющиеся буквы и «потоки» из этих букв. Объекты можно вкладывать в объекты.

Класс — это «чертёж», по которому наша программа может изготовить много одинаковых объектов, как на конвейере. В нашем случае нам нужно, чтобы программа рисовала сотни букв в десятках потоков, и изготавливать их мы будем не вручную, а с помощью класса.

Конструктор — это действие, которое совершает программа при создании объекта. Без конструктора объект просто висел бы в памяти, а с конструктором он сразу при создании будет выполнять какое-то действие. В нашем случае конструктор будет у класса «Поток», чтобы при создании такого потока в него сразу добавлялось несколько сменяющихся букв.

Готовим основной скрипт

Вся дождевая магия будет происходить в отдельном скрипте, который мы напишем после кода с тучкой. Чтобы рисовать было проще, подключим библиотеку p5 и пропишем основные переменные для скрипта:

Проектируем поведение символов

Чтобы не прописывать поведение для каждого символа в отдельности, а задать общие правила для всех, сделаем класс Symbol. Каждый объект, созданный на основе этого класса, будет вести себя так, как написано в классе. Это даст нам предсказуемое поведение для каждого символа и сократит количество кода.

В конструкторе класса мы пропишем начальные координаты для символа, его скорость, а также смену символа через некоторое время, чтобы получить эффект как в «Матрице». Чтобы все символы не обновлялись одновременно, используем в конструкторе генератор случайных чисел — он выберет случайное время обновления для каждого нового символа.

Также сделаем метод rain() — он будет отвечать за падение символа вниз, как капля дождя. Логика простая: если символ ещё не улетел за край, сдвигаем его вниз на значение скорости.

Собираем символы в потоки

Следующий шаг — собрать символы в потоки, чтобы они красиво падали из тучки. Поток — это от 2 до 5 символов, падающих друг за другом. При этом каждый символ независимо от других меняется во время падения, потому что мы прописали это в классе символов.

Конструктор просто создаёт массив случайного размера, а метод generateSymbols(x,y) как раз и наполнит этот массив нужными символами. При этом каждый символ — это объект класса Symbol, свойство которых мы написали выше.

Отдельный метод render() будет отвечать за отрисовку потока. Обратите внимание — внутри этого метода мы вызываем метод из другого класса, который отвечает за падение символов.

Запуск

В проекте со звёздами мы выяснили, что для запуска и работы библиотеки p5 используются две функции — setup() для подготовки к запуску и draw(), которая по кругу выполняет свой код.

Для подготовки нам нужно создать холст, где будем рисовать падающие буквы и сформировать потоки. Потоки будем делать так:

Для анимации в функции draw() мы будем делать всего две вещи — постоянно очищать фон и отрисовывать потоки.

Можно скопировать и запустить у себя готовый код, а можно посмотреть на тучку на странице проекта.

Что дальше

Будем осваивать SVG-рисование в браузере — рисовать всякие классные и красивые штуки.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *