Оглавление:

Матричный код - Visual Basic: 7 шагов
Матричный код - Visual Basic: 7 шагов

Видео: Матричный код - Visual Basic: 7 шагов

Видео: Матричный код - Visual Basic: 7 шагов
Видео: Программирование макросов на VBA в Excel 2024, Июль
Anonim
Матричный код - Visual Basic
Матричный код - Visual Basic

Новый и улучшенный код Visual Basic будет отображать эффект «Матрицы» с прокруткой единиц и нулей. Затем он переходит к последовательности Matrix «Wake Up Neo», а затем продолжает прокручивать числа. Я понимаю, что это не совсем то, как последовательность проходит в фильме, но были люди, которые просили эту функцию, поэтому я добавил ее. Я думаю, что способ рандомизации отображения столбцов с единицами и нулем - это самая аккуратная часть кода. Я подробно расскажу о том, что сделал позже. Это руководство является ответом на инструкцию Brennn10 «Добро пожаловать в матрицу в командной строке». Код, из которого состоит этот Instructable, изначально был основан на коде, опубликованном в комментарии DarkJoker к приведенному выше Instructable. Я намеренно был довольно явным с моим объяснением кода, поскольку я получил довольно много запросов о разъяснении с тех пор, как я впервые опубликовал это решение.

Шаг 1: возьмите мой код

Я прикрепил свой код ниже. Сохраните оба файла (startMatrix.itsabat и matrix.itsavbs) в одной папке на вашем компьютере и удалите часть «itsa» в имени файла, т.е. переименуйте файлы в startMatrix.bat и matrix.vbs. Файлы bat и vbs являются исполняемыми, поэтому я не могу загрузить их с этими расширениями здесь. Вот почему вы должны сохранять и переименовывать их локально.

Шаг 2: Выполнение кода

Если вы хотите запустить мой код, следуйте приведенным ниже инструкциям. Если вы не хотите выполнять на своей машине что-то, о чем вы ничего не знаете, вы умны. Вам следует перейти к следующему шагу, где я прохожу по коду и показываю вам, что я не сделал ничего хитрого. Care), вот как запустить код: Шаг 1: дважды щелкните «startMatrix.bat». Вот и все. Теперь переходите к следующему шагу, чтобы прочитать о только что увиденной крутизне.

Шаг 3: понимание кода, часть 1

Давайте посмотрим на код, начиная с самого начала. Надеюсь, из моего кода вы сможете узнать достаточно о VB, чтобы вы научились писать код на VB лучше меня:) Итак, обо всем по порядку, у нас есть 2 файла: файл bat и файл vbs. Если вы отредактируете файл bat, вы заметите, что он выполняет файл vbs после настройки окна, цвета текста и заголовка окна. Давайте перейдем к более интересным вещам в файле vbs. К вашему сведению, я собираюсь коснуться здесь только наиболее интересных строк кода. Также обратите особое внимание на строки, начинающиеся с '(галочка или одинарная кавычка). Это комментарии, и они НЕ БУДУТ ВЫПОЛНЯТЬСЯ. Первые несколько строк файла matrix.vbs говорят: «Установите для моих сообщений об ошибках явный уровень», но в то же время «Не позволяйте ошибкам, которые я сделал, стать фатальными». Никакого реального обсуждения не требуется. Строка 5: Наш оператор dim здесь устанавливает все переменные, которые мы будем использовать на протяжении всей жизни нашей маленькой программы. Нам не нужно объявлять типы для этих переменных или начальные значения для них, как в некоторых других языках. VB является «мощным» в этом плане. Строка 12: objSysInfo позволяет нам собрать некоторую информацию о системе, в которой мы работаем. Здесь мы создаем объект, и в строке 13 objSysInfo. UserName возвращает имя текущего вошедшего в систему пользователя, выполняющего этот код. Это будет использоваться позже вместо «Neo», чтобы наш сценарий мог сказать «Проснись, Мартин…», если он запущен на моей машине, или «Проснись, Brennn10…», если он запущен на машине Brennn10 и если Это было его имя пользователя. Использование имени пользователя системы позволяет вам загрузить его на разблокированную машину вашего приятеля, и он автоматически получит его имя без изменения кода. Давайте двигаться дальше.

Шаг 4: понимание кода, часть 2

Строка 16: подпрограмма waitfor - наша первая подпрограмма. Подпрограмма может быть вызвана из другого места в коде, она выполнит код в теле подпрограммы и затем вернет управление программой вызывающему коду. waitfor настраивает для нас нашу оболочку. Выполняя это в цикле с «засыпанием» внутри цикла, мы позволяем активации оболочки завершиться до возврата управления, что очень хорошо. Строка 26: субматрица - это наша вторая подпрограмма, которая принимает параметр под названием «элементы». Эта подпрограмма распечатывает классные числа, которые кажутся «падающими», как в фильме. Я принял некоторые вещи как должное. Надеюсь, объясняя их, вы поймете, откуда я, и сможете сделать это лучше, чем я. Во-первых, я предполагаю, что вам нужно только 5 столбцов чисел, и что «элементы» делятся на количество столбцов (5). Это было легко гарантировать, потому что позже я объявляю, что параметры, переданные в «матрицу», равны 200 и 100 (она вызывается дважды). Я также предполагаю, что вы хотите, чтобы все 5 столбцов были включены по умолчанию. Я думаю, что это выглядит нормально, но вы можете изменить некоторые из них на FALSE, если хотите, чтобы первая строка чисел казалась такой же случайной, как и остальные строки. ОК, поэтому у нас есть 5 столбцов, у нас есть 200 / 5 = 40 строк чисел для отображения (linesToWrite), и все наши столбцы включены по умолчанию. Строка 41: мы вводим два цикла «for», первый из которых (Loop A) циклически проходит через наши linesToWrite, а второй (Цикл B), который циклически перебирает количество столбцов. В цикле B мы выбираем значение переменной цикла loopB, и в зависимости от его значения мы оцениваем оператор If-Else. Если рассматриваемый столбец включен («ИСТИНА» или «включен»), мы напечатаем через «wshshell. SendKeys» значение Int (Round (rnd ())), за которым следует табуляция. В противном случае мы напечатаем только вкладку, так что столбец будет пустым. Итак, какое значение Int (Round (rnd ()))? rnd () возвращает случайное число с плавающей запятой от 0,0 до 1,0, Round () примет это значение и округлит его до ближайшего целочисленного значения, а Int () преобразует результат в целое число. Этот последний шаг можно считать излишним, поскольку вызов Round () должен давать нам 0 или 1. Я сделал это просто по привычке. В какой-то момент кто-то, должно быть, сказал мне, что это безопаснее, и я, видимо, еще не забыл об этом. Что касается части 3…

Шаг 5: понимание кода, часть 3

Продолжая подматрицу, вот следующие несколько строк VB… «Это триггеры столбцов», поэтому, если столбец ВЫКЛЮЧЕН, он будет ВКЛЮЧЕН в 30% случаев », а если столбец включен, он будет ВЫКЛЮЧАЕТСЯ в 30% случаев. turnOffMax = 0.30 turnOnMax = 0.30 Переключение каждого столбца в 30% случаев приводит к тому, что числовые столбцы «падают» случайным образом, подобно тому, как это происходит в фильме. Не совсем, но близко. 'Колонка 1 flip-flop flipMe = rnd () If ((col1 = TurnOn) and (flipMe <turnOffMax)) Then col1 = TurnOff Else If ((col1 = TurnOff) and (flipMe <turnOnMax)) Then col1 = TurnOn End IfThe Блок выше управляет тем, как мы определяем, собираемся ли мы отображать число в данном столбце во время следующей итерации для следующей строки чисел. Код гласит: «Если столбец включен, а случайное число, называемое flipMe, меньше 30%, выключите столбец. В противном случае, если столбец выключен, а значение flipMe меньше 30%, включите столбец». вверх под Матрица. К дополнительной клавише…

Шаг 6: Дополнительная клавиша ()

Ниже приведен ключевой метод. Sub key (msg) 'распечатайте "матричные" сообщения и удалите их wscript.sleep 1500length = len (msg) for position = 1 to length wshshell. SendKeys mid (msg, position, 1) wscript.sleep 250nextwscript.sleep 3000for position = 1 для длины wshshell. SendKeys "{BACKSPACE}" wscript.sleep 75nextend subЭтот метод выводит строку "msg". Он напечатает все, что вы передадите. Этот метод вызывается позже в коде. Первый цикл FOR распечатывает каждый символ в строке по одному и делает паузу на 250 миллисекунд между каждым символом. Затем мы спим на 3000 миллисекунд (3 секунды) и записываем пробел для каждого ранее напечатанного символа, на этот раз спим немного меньше. Переходим к основной части программы, где все сводится воедино.

Шаг 7: Главное

Основное выполнение программы вызывает waitFor и матрицу (которые мы уже рассмотрели), чтобы настроить все и записать 200 двоичных цифр, распределенных по 5 столбцам. Затем имя текущего пользователя системы захватывается и обрабатывается для вывода на печать как часть последовательности «пробуждения». Затем мы вводим цикл FOR, который, как мы знаем, мы будем повторять только 4 раза из-за «1» Ограничение до 4 дюймов. Затем мы выполняем SELECT для нашей переменной цикла (loopA), которая соответствует первому оператору CASE в первый раз, второму оператору CASE во второй раз в цикле и т. Д. На каждой итерации цикла myString устанавливается на правильное строковое представление словоблудие, которое мы хотим напечатать, и вызывается ключевая подпрограмма, которая фактически выполняет печать. Очевидно, существует множество других способов создания этого цикла, и я оставлю это в качестве упражнения для читателя. Как только мы выходим из цикла FOR, мы снова вызываем подпрограмму матрицы, чтобы распечатать больше чисел. Как говорится в комментарии в коде, вы можете поместить этот последний вызов matrix () в цикл, если хотите, или вы можете просто вызвать его с большим числом и т. Д. Наконец, наш вызов quit () прерывает программу. исполнение (всегда хорошая практика: P). Надеюсь, всем будет весело брать мой пример и улучшать его! Если этот Instructable пробудил ваше любопытство с помощью VB, Google может предоставить массу хороших ресурсов, чтобы узнать о нем больше, чем я могу вам рассказать. Удачного кодирования! Мартин

Рекомендуемые: