Índice:

Código de matriz - Visual Basic: 7 etapas
Código de matriz - Visual Basic: 7 etapas

Vídeo: Código de matriz - Visual Basic: 7 etapas

Vídeo: Código de matriz - Visual Basic: 7 etapas
Vídeo: Arrays (Arreglos) Vectores (17-25) Programación Visual Basic. Net con Visual Studio 2013 2024, Julho
Anonim
Código Matrix - Visual Basic
Código Matrix - Visual Basic

O código Visual Basic novo e aprimorado exibirá um efeito semelhante a "Matriz", com rolagem de Um e Zero. Em seguida, corta para a sequência Matrix "Wake Up Neo" e continua a rolar os números. Percebi que não é exatamente assim que a sequência ocorre no filme, mas havia pessoas pedindo essa funcionalidade, então eu a adicionei. Acho que a maneira como randomizo a exibição das colunas de Um e Zero é a parte mais legal do código. Discuto exatamente o que fiz depois. Este Instructable é uma resposta ao Instructable "Bem-vindo à Matriz no Prompt de Comando" de Brennn10. O código que compõe este Instructable foi baseado inicialmente no código postado em um comentário de DarkJoker sobre o Instructable acima. Fui intencionalmente bastante explícito com minha explicação do código, pois recebi alguns pedidos de esclarecimento desde que comecei postou esta solução.

Etapa 1: pegue meu código

Anexei meu código abaixo. Salve os dois arquivos (startMatrix.itsabat e matrix.itsavbs) na mesma pasta em sua máquina e remova a parte "itsa" do nome do arquivo, ou seja, renomeie os arquivos para startMatrix.bat e matrix.vbs. Arquivos Bat e arquivos vbs são executáveis e, portanto, não posso carregá-los com essas extensões aqui. É por isso que você deve salvá-los e renomeá-los localmente.

Etapa 2: Executando o Código

Se você deseja executar meu código, siga as instruções abaixo. Se você não deseja executar algo em sua máquina que não conhece, você é inteligente. Você deve ir para a próxima etapa, onde eu percorro o código e mostro que não fiz nada tortuoso. No entanto, se você apenas quiser chegar a ele (ou você está na máquina de outra pessoa e não cuidado), veja como iniciar o código: Passo 1: clique duas vezes em "startMatrix.bat". É isso. Agora vá para a próxima etapa para ler sobre a beleza que você acabou de ver.

Etapa 3: Compreendendo o Código, Parte 1

Vamos dar uma olhada no código, começando do início. Espero que você possa aprender o suficiente sobre VB com meu código para aprender a codificar em VB melhor do que eu:) Primeiramente, temos 2 arquivos: um arquivo bat e um arquivo vbs. Se você editar o arquivo bat, notará que ele executa o arquivo vbs, após configurar a janela, a cor do texto e o título da janela. Vamos passar para as coisas mais interessantes no arquivo vbs. FYI, vou apenas tocar nas linhas de código mais interessantes aqui. Além disso, preste atenção especial às linhas que começam com '(tique ou aspas simples). Estes são comentários e NÃO SERÃO EXECUTADOS. As primeiras linhas de matrix.vbs dizem "Defina minhas mensagens de erro para o nível explícito", mas ao mesmo tempo "Não deixe que meus erros sejam fatais." Nenhuma discussão real necessária. Linha 5: Nossa declaração obscura aqui configura todas as variáveis que usaremos ao longo da vida de nosso pequeno programa. Não precisamos declarar tipos para essas variáveis, ou valores iniciais para elas, como faríamos em algumas outras linguagens. O VB é "poderoso" assim. Linha 12: objSysInfo nos permite coletar algumas informações sobre o sistema em que estamos executando. Criamos o objeto aqui e, na Linha 13, objSysInfo. UserName retorna o nome do usuário atualmente conectado que está executando este código. Isso será usado mais tarde no lugar de "Neo", para que nosso script possa dizer "Wake up, Martin …" se estiver sendo executado em minha máquina, ou "Wake up, Brennn10 …" se estiver sendo executado na máquina de Brennn10 e se esse era o seu nome de usuário. Usar o nome de usuário do Sistema permite que você jogue na máquina desbloqueada do seu amigo e ele puxará seu nome automaticamente, sem ter que alterar o código. Vamos em frente.

Etapa 4: Compreendendo o Código, Parte 2

Linha 16: sub waitfor é nossa primeira sub-rotina. Uma sub-rotina pode ser chamada de um local diferente no código, executará o código dentro do corpo da sub-rotina e, em seguida, retornará o controle do programa ao código de chamada. waitfor configura nosso shell para nós. Fazendo isso em um loop com um "sono" dentro do loop, permitimos que a ativação do shell seja concluída antes de o controle ser retornado, o que é uma coisa muito boa. Linha 26: submatriz é nossa segunda sub-rotina e leva um parâmetro denominado "elementos". Esta sub-rotina imprime os números legais que parecem "cair", como no filme. Considero algumas coisas como certas aqui. Esperançosamente, explicando-os, você entenderá de onde estou vindo e poderá fazer isso melhor do que eu. Em primeiro lugar, suponho que você deseja apenas 5 colunas de números e que "elementos" são divisíveis pelo número de colunas (5) Isso foi fácil de garantir porque mais tarde declaro que os parâmetros passados para "matriz" são 200 e 100 (é chamado duas vezes). Também suponho que você deseja que todas as 5 colunas sejam ativadas por padrão. Acho que parece OK, mas você pode alterar alguns deles para FALSO se quiser que a primeira linha de números pareça tão aleatória quanto o resto das linhas será. OK, então temos 5 colunas, temos 200 / 5 = 40 linhas de números a serem exibidos (linesToWrite), e todas as nossas colunas são ativadas por padrão. Linha 41: entramos em dois loops "for", o primeiro dos quais (Loop A) percorre nosso linesToWrite e o segundo (Loop B) que percorre o número de colunas. No Loop B, selecionamos o valor da variável de loop loopB e, dependendo de seu valor, avaliamos uma instrução If-Else. Se a coluna em questão estiver Habilitada ("TRUE", ou "ligada"), imprimiremos, via "wshshell. SendKeys", o valor de Int (Round (rnd ())), seguido de uma tabulação. Caso contrário, imprimiremos apenas uma guia, de forma que a coluna apareça vazia. Então, qual é o valor de Int (Round (rnd ()))? rnd () retorna um número de ponto flutuante aleatório entre 0,0 e 1,0, Round () pegará esse valor e o arredondará para o valor inteiro mais próximo e Int () converte o resultado em um inteiro. Esta última etapa pode ser considerada um exagero, já que a chamada Round () deve nos dar 0 ou 1. Fiz isso apenas por hábito. Em algum momento, alguém deve ter me dito que era mais seguro, e aparentemente eu não esqueci ainda. Para a Parte 3 …

Etapa 5: Compreendendo o Código, Parte 3

Continuando a submatriz, aqui estão as próximas linhas de VB … 'Estas colunas flip-flops,' então, se uma coluna estiver DESLIGADA, ela será LIGADA 30 por cento do tempo, 'e se uma coluna estiver LIGADA, será DESLIGADO 30 por cento do tempo. turnOffMax = 0.30 turnOnMax = 0.30Toggling cada coluna 30% do tempo faz as colunas de número "caírem" de uma forma aleatória semelhante ao que acontece no filme. Não é exato, mas perto. 'Coluna 1 flip-flop flipMe = rnd () If ((col1 = turnOn) e (flipMe <turnOffMax)) Then col1 = turnOffMax) If ((col1 = turnOff) e (flipMe <turnOnMax)) Então col1 = turnOn End IfThe O bloco acima controla como determinamos se vamos exibir um número na coluna fornecida durante a próxima iteração, para a próxima linha de números. O código diz "se a coluna estiver ativada e o número aleatório chamado flipMe for inferior a 30%, desative a coluna. Caso contrário, se a coluna estiver desativada e o flipMe for inferior a 30%, ative a coluna". up sub Matrix. Ligado para a subchave …

Etapa 6: Subchave ()

O método da chave está abaixo.sub key (msg) 'faz impressões das mensagens da "matriz" e apaga as mensagens WScript.sleep 1500length = len (msg) para a posição = 1 até o comprimento wshshell. SendKeys mid (msg, position, 1) wscript.sleep 250nextwscript.sleep 3000for position = 1 to length wshshell. SendKeys "{BACKSPACE}" wscript.sleep 75nextend subEste método imprime uma string "msg". Vai imprimir tudo o que você passar. Esse método é chamado posteriormente no código. O primeiro loop FOR imprime cada caractere da string, um por vez, e faz uma pausa de 250 milissegundos entre cada caractere. Em seguida, dormimos por 3000 millis (3 segundos) e escrevemos um retrocesso para cada caractere que imprimimos anteriormente, desta vez dormindo um pouco menos. Isso é tudo o que há para fazer. Vamos para o corpo principal do programa, onde tudo se junta.

Etapa 7: Principal

A execução principal do programa chama waitFor e matrix (que já cobrimos) para configurar tudo e escrever 200 dígitos binários, distribuídos em 5 colunas. O nome do usuário do sistema atual é então capturado e manipulado para ser impresso como parte da sequência de "ativação". Em seguida, entramos em um loop FOR, que sabemos que só iteraremos mais de 4 vezes por causa do "1 Restrição de 4 ". Em seguida, fazemos o SELECT em nossa variável de loop (loopA), que corresponde à primeira instrução CASE na primeira vez, a segunda instrução CASE na segunda vez no loop, etc. A cada iteração do loop, myString é definida para a representação de string correta de a linguagem que queremos imprimir e a sub-rotina principal é chamada para realmente fazer a impressão. Obviamente, há muitas outras maneiras de projetar esse loop, e deixarei isso como um exercício para o leitor. Assim que sairmos do loop FOR, mais uma vez chamaremos a sub-rotina da matriz para imprimir mais números. Como o comentário no código diz, você pode colocar esta chamada final para matrix () em um loop se desejar, ou você pode apenas chamá-lo com um número maior, etc. Finalmente, nossa chamada para quit () aborta o programa execução (sempre boa prática: P). Espero que todos se divirtam seguindo meu exemplo e tornando-o melhor! Se este Instructable despertou sua curiosidade com o VB, o Google pode fornecer uma tonelada de bons recursos para aprender mais sobre ele do que eu posso dizer. Boa codificação! Martin

Recomendado: