Для создания «эффекта Матрицы» в командной строке Windows, необходимо написать текстовый файл с кодом и сохранить с расширением *.bat, потом запустить. Писать можно например в блокноте, при сохранении указать имя файла «имя.bat».
Простейший пример кода:
Пример:
- Нажмите, чтобы открыть на Facebook (Открывается в новом окне)
- Нажмите, чтобы поделиться на Twitter (Открывается в новом окне)
- Нажмите, чтобы поделиться записями на Pinterest (Открывается в новом окне)
- Нажмите, чтобы поделиться на LinkedIn (Открывается в новом окне)
- Нажмите, чтобы поделиться записями на Tumblr (Открывается в новом окне)
- Нажмите, чтобы поделиться в Telegram (Открывается в новом окне)
- Ещё
- Нажмите, чтобы поделиться записями на Pocket (Открывается в новом окне)
- Нажмите, чтобы поделиться в Skype (Открывается в новом окне)
- Нажмите, чтобы поделиться на Reddit (Открывается в новом окне)
- Нажмите, чтобы поделиться в WhatsApp (Открывается в новом окне)
- Нажмите для печати (Открывается в новом окне)
Источник: ixnfo.com
Как сделать Заставку из фильма «МАТРИЦА» на Python [ Pygame ]
Рисуем код из «Матрицы» на PHP
Однажды мне пришла в голову идея сделать динамически создаваемый фон для блога в виде пресловутого кода из фильма «Матрица». После убийства вечера и половины ночи я-таки достиг желаемого результата, и решил поделиться им с народом. К сожалению, я не нашёл подобной реализации, а иметь динамически создаваемую «матрицу» как фон бложика таки хочется.
Итак, пишем генератор кода «Матрицы» на PHP с использованием библиотеки gd.
Итак, поставлены следующие требования к генерируемой картинке:
1. Столбики кода не должны быть равны по длине, длина должна выбираться случайно
2. Яркость цвета должна нарастать сверху вниз
3. Расположение столбиков должно быть случайным, но они не должны налезать друг на друга
4. Полученная картинка не должна кэшироваться браузерами, дабы при каждом обновлении получался новый код
5. Код не должен улетать за пределы картинки.
Приступим, собственно, к генерации картинки.
Для начала надо придумать, что будет выступать в роли элементов кода. В «Матрице» использовались как цифры, так и кана (слоговая азбука японского языка). Последняя выглядят более эффектно, следовательно, её и возьмём.
Создадим функцию getJapanSym(), возвращающую HTML-Entity код (его использует функция imagettftext(), но о ней позже).
В Unicode кана расположена в диапазоне кодов от 0x3040 до 0x30FF. Из этого диапазона и требуется брать случайный код символа. В результате получаем вот такую функцию:
function getJapanSym() < $rnd = rand(hexdec(«3040»), hexdec(«30FF»)); // то-ли лыжи не едут, то-ли у меня кривой сервер, но с числами в формате 0xXXXX он работать отказался return «.dechex($rnd).»;»; // формат HTML-Entity, нечто вроде >
Далее нам требуется отрисовать собственно картинку. Давайте по порядку.
Первым делом нам нужно нарисовать столбик с каной с заданным количеством знаков. Для отрисовки будем использовать упомянутую ранее функцию imagettftext() из библиотеки gd. Более того, цвет каждого символа должен отличаться от предыдущего, так что простым n тут не обойтись, придётся писать целый цикл.
Саму кану можно найти в шрифте Arial Unicode MS, который мы, собственно, и используем.
Функция для рисования каны в столбик выглядит так:
for ($i = 0; $i < $symCount; $i++) // переменная $symCount отвечает за количество знаков в столбике < imagettftext( $img, // ресурс картинки 10, // размер шрифта 0, // угол наклона, нам он не нужен, так что 0 $codePlacement, // ось X, она же начальная координата столбика $symPadding, // ось Y, она должна меняться для каждого символа hexdec(«00».dechex($printCol).»00″), // цвет, о нём мы поговорим позже «./arial.ttf», // указание файла шрифта. Маны PHP рекомендуют абсолютный путь getJapanSym() // собственно, элемент, записанный в формате HTML-Entity ); $symPadding += 15; // прибавляем к значению оси Y для следующего символа. Значение подбирается экспериментально, в зависимости от размера шрифта и самих символов >
Для удобочитаемости и комментирования каждый параметр вынесен на отдельную строку.
Описанный выше код нарисует просто столбик с каной. Но нам нужно его ещё и раскрасить, причём первый символ должен быть еле виден на чёрном фоне, а последний, соответственно, должен быть самым ярким. Для этого введена переменная $printCol, отвечающая за зелёный компонент в RGB-представлении.
Допишем перед циклом несколько переменных:
$colorIncrement = round(254 / $symCount); $printCol = 16;
Первая переменная — инкремент цвета — рассчитывается как отношение всех возможных цветов к количеству иероглифов в столбце. Этот инкремент будет плюсоваться после отрисовки каждого иероглифа.
Вторая переменная, $printCol — собственно, сам цвет. Начальным цветом выбран 16, и не случайно. 16 в шестнадцатеричной системе счисления равно 10, то бишь два символа, и это нужно, чтобы не «сломать» вид кода цвета «00XX00», ровно 6 символов в шестнадцатеричной системе.
Теперь используем наше нововведение в основном цикле:
$colorIterate = round(254 / $symCount); $printCol = 16; for ($i = 0; $i < $symCount; $i++) < imagettftext($img, 10, 0, $codePlacement, $symPadding, hexdec(«00».dechex($printCol).»00″), «./arial.ttf», getJapanSym()); $symPadding += 15; $printCol += $colorIncrement; // прибавляем к цвету коэффициент пропорциональности для следующего символа >
Вот теперь этот участок выведет уже готовый столбик красивых символов каны с правильной цветовой окраской. Заметьте, что для задания цвета используется конструкция
hexdec(«00».dechex($printCol).»00″)
Возможно, это выглядит глупо, но в php инкремент выполняется в десятичной системе счисления, а нам нужно число в шестнадцатеричной, причём, как сказано ранее, меняем только зелёный цвет.
Итак, теперь нам нужно нарисовать несколько таких столбиков, чтобы получился полноценный «матричный» код. Думаю, здесь потребуется меньше разъяснений, и хватит кода с комментариями.
$img = imagecreatetruecolor (500, 500); // создание картинки размером 500×500. Фон у неё по умолчанию чёрный. $position = 4; // начальная позиция первого столбика с каной for ($rows = 0; $rows < 50; $rows++) // рисуем 49 столбиков с кодом (число подбирается также экспериментально, сколько влезет на картинку) < $symPadding = rand(3, 450); // выбираем положение по координате Y для самого первого символа.
Не меньше трёх и не больше 450, иначе нет смысла рисовать $symCount = round((rand($symPadding + 100, 500) — $symPadding) / 17); // рассчитываем, сколько надо нарисовать символов, чтобы не залезть за пределы картинки и при этом выбрать случайное кол-во $colorIncrement = round(254 / $symCount); // инкремент цвета, был описан ранее $printCol = 16; // первоначальный цвет, также описан ранее $codePlacement = rand($position — 4, $position + 1); // размещение столбика с каной по оси X, всегда постоянно, но выбирается в промежутке, причём таком, чтобы столбики не наползали друг на друга for ($i = 0; $i < $symCount; $i++) // рисуем столбик. Это описано ранее.
< imagettftext($img, 10, 0, $codePlacement, $symPadding, hexdec(«00».dechex($printCol).»00″), «./arial.ttf», getJapanSym()); $symPadding += 15; $printCol += $colorIncrement; >$position += 20; // прибавляем 20 пикселов к возможному расположению следующего столбика >
Итак, мы уже имеем готовый код «Матрицы» в переменной $img, осталось только его вывести. Но здесь маленькая хитрость: браузеры любят кэшировать фон. Следовательно, чтобы юзер каждый раз видел новый фон, требуется запретить кэширование при помощи заголовков. Делаем это вот так:
header(«Cache-Control: no-store»); // попытка запрета номер «раз» header(«Expires: » . date(«r»)); // попытка запрета номер два header(«Content-Type: image/png»); // сообщаем, что сейчас будет картинка, а не текст imagepng ($img); // выводим картинку imagedestroy($img); // уничтожаем картинку и удаляем её из памяти.
В результате получаем вот такое вот изображение:
Можете пообновлять страничку, каждый раз скрипт выдаст новый код
К сожалению, браузер Firefox не умеет правильно отображать фон после обновления, и получается слияние двух версий, остальные же браузеры подобным не страдают.
[UPD]: исходник Матрицы со шрифтом и без оного.
Источник: habr.com
Это просто: пишем свою «Матрицу» на Python
Изучать новое можно по-разному. Одним нравится сначала штудировать теорию, а потом применять её на практике. Другие предпочитают учиться исключительно на примерах, найденных на любимом Stackoverflow. А кто-то вообще загружает навыки управления вертолётом и технику боевых единоборств по выделенному каналу прямо в мозг.
В любом случае без практических упражнений не обойтись. После ускоренной загрузки знаний Нео всё равно должен пройти спарринг с Морфеусом, чтобы научиться применять терабайты загруженных навыков на практике. Только вот упражнения бывают разные. Одно дело — лихо взлететь под потолок и проломить балки восточного спортзала, и совсем другое — методично час за часом шлифовать своё мастерство.
Изображение: Wikimedia Commons
Определяем цели
Учебники программирования разнообразием примеров обычно не блещут. Встречаются, конечно, исключения, но в большинстве пособий упражнения похожи друг на друга и не особо интересны: создайте очередную адресную книгу, нарисуйте круг черепашкой, разработайте сайт магазина по продаже какой-нибудь «нужной» рекламной ерунды. Куда уж тут до достоверной имитации матрицы. Хотя…
Почему бы не взять всё это в свои руки и не начать придумывать упражнения самостоятельно? Да хоть бы и написать свою маленькую личную «Матрицу». Конечно, не ту, в которой будут небоскрёбы, стильные телефоны той эпохи и вездесущие непобедимые агенты Смиты. Для этого нам нужно ещё пару-тройку месяцев поучиться.
Но любому начинающему программисту под силу написать модель культовой заставки со стекающими по экрану зелёными струйками цифр. Этим и займёмся.
Тестировщик АО «Гринатом» , , можно удалённо , По итогам собеседования
Запрограммировать такую заставку можно практически на любом языке. Попробуем это сделать на «великом и могучем» Python.
Пишем техническое задание
Для начала определимся, что же мы хотим в итоге получить. Напишем сами себе небольшое техническое задание — всегда полезно. Подумайте про «Матрицу», и память сама подскажет образ — тёмное консольное окно, в котором будут стекать струйки зелёных цифр. Чтобы было интереснее, пусть они двигаются с разной скоростью. У каждой струйки должны быть начало — яркий зелёный ноль — и конец.
Кстати, пусть скорости движения начала и конца струйки тоже будут разными и определяются случайным образом.
Звучит не так и сложно. Теперь дело за малым — всего лишь написать код. Приступим.
Готовим инструменты
Как полагается, подключим все необходимые модули. Сначала стандартные:
import sys import random import time
Для работы с консолью Windows нам понадобятся модули bext и colorama. Как их установить с помощью pip, вы уже, наверняка, знаете. Нужно их подключить. Но сделаем это по всем правилам — с проверкой:
try: import bext, colorama except ImportError: print (‘Для запуска программы нужны модули bext и colorama.’) sys.exit ()
Подготовим к работе консоль:
bext.title (‘Matrix’) # Меняем заголовок консольного окна bext.clear () # Очищаем консольное окно bext.hide () # Скрываем курсор в консольном окне width, height = bext.size () # Получаем размер консольного окна width -= 1 height -= 1
Теперь осталось только завести константы с цветами для модуля colorama. Нам нужен зелёный и тёмно-зелёный:
lgreen = colorama.Fore.LIGHTGREEN_EX green = colorama.Fore.GREEN
Windows — штука хитрая и противоречивая. Базовый цвет green в консоли — это тёмно-зелёный.
Изобретаем антиматерию
Теперь подумаем над самым главным вопросом: как же нам запрограммировать стекающие капли «Матрицы»? Каждая капля — это объект. Все капли разные, но ведут себя одинаково. Поэтому нам надо создать класс, в котором мы опишем основные действия с каплей и все её атрибуты.
Чтобы капли стекали с разной скоростью, зададим каждой из них случайный тайм-аут задержки — в шагах. Какие-то капли будут перемещаться на каждом шаге обновления нашей картинки, какие-то реже.
Как же быть с верхним концом струйки? Он должен «высыхать», причём со своей скоростью. Не будем придумывать ничего сложного. Пусть верхний конец тоже будет каплей, но чёрного цвета. Такая «капля» при перемещении будет не добавлять цифры, а наоборот стирать их.
Получается прямо какая-то антикапля, антиматерия — красиво и стильно.
Поскольку капля и антикапля ведут себя одинаково, запрограммируем их в одном классе.
Создаём капли
Итак, все действия с каплями и антикаплями мы будем выполнять в методах класса. Назовём его Drop и напишем метод создания объекта класса:
def __init__ (self): self.x = random.randint (0, width) # Начальное положение по горизонтали self.y = -1 # Начальное положение по вертикали — за верхней границей экрана self.drop_type = random.randint (0, 1) # Тип: антикапля или капля self.timeout = random.randint (0, 3) # Задержка до следующего перемещения self.wait_count = random.randint (0, 3) # Счетчик паузы
С атрибутами x и y всё понятно. Второй равен -1, чтобы капля раньше времени не показывалась на экране. Атрибуты timeout и wait_count нужны для обеспечения разной скорости падения капель. Первый задаёт постоянную скорость стекания, второй — итерационный счётчик.
Перемещаем капли
Теперь напишем метод перемещения капли с учётом её скорости.
def move (self): if drop.wait_count < drop.timeout: # Пока рано перемещать drop.wait_count += 1 # Увеличиваем счётчик паузы return False else: # Уже можно перемещать drop.wait_count = 0 # Сбрасываем счётчик паузы drop.y += 1 # Перемещаем каплю или антикаплю на шаг вниз return True
Метод возвращает логическое значение — факт перемещения капли. Или антикапли — всё равно.
Рисуем струйку
С перемещением разобрались. Настало время рисовать.
def draw (self): if self.drop_type == 1: symbol = str (random.randint (1, 9)) con_print (self.x, self.y, green, symbol) self.zero_draw () # Рисуем яркий ноль else: con_print (self.x, self.y, green, ‘ ‘)
Здесь мы вызываем два новых ещё не написанных метода: con_print и zero_draw. Первый будет выводить символ нужного цвета в указанное место консольного окна. Второй будет рисовать дополнительный яркий ноль в начале струйки.
Вот, собственно, и второй метод:
def zero_draw (self): if (self.y < height): con_print (self.x, self.y+1, lgreen, ‘0’)