Spisu treści:

Kod macierzy - Visual Basic: 7 kroków
Kod macierzy - Visual Basic: 7 kroków

Wideo: Kod macierzy - Visual Basic: 7 kroków

Wideo: Kod macierzy - Visual Basic: 7 kroków
Wideo: Kurs Excel VBA Część 1 : Pierwsze makro 2024, Lipiec
Anonim
Kod macierzy - Visual Basic
Kod macierzy - Visual Basic

Nowy i ulepszony kod Visual Basic będzie wyświetlał efekt podobny do „Matrix”, z przewijaniem jedynek i zer. Następnie przechodzi do sekwencji Matrix „Wake Up Neo”, a następnie dalej przewija liczby. Zdaję sobie sprawę, że nie jest to dokładnie to, jak przebiega sekwencja w filmie, ale byli ludzie, którzy prosili o tę funkcję, więc ją dodałem. Myślę, że sposób, w jaki losowo wyświetlam kolumny Jedynki i Zera, jest najfajniejszą częścią kodu. Omawiam dokładnie to, co zrobiłem później. Ten Instruktaż jest odpowiedzią na Instruktaż Brennn10 „Welcome to the Matrix in Command Prompt”. Kod, który tworzy ten Instructable, był początkowo oparty na kodzie opublikowanym w komentarzu DarkJokera do powyższego Instructable. Celowo wyraziłem się dość wyraźnie w moim wyjaśnieniu kodu, ponieważ otrzymałem sporo próśb o wyjaśnienia od pierwszego zamieściłem to rozwiązanie.

Krok 1: Złap mój kod

Załączam swój kod poniżej. Zapisz oba pliki (startMatrix.itsabat i matrix.itsavbs) w tym samym folderze na swoim komputerze i usuń część „itsa” nazwy pliku, tj. zmień nazwy plików na startMatrix.bat i matrix.vbs. Pliki Bat i pliki vbs są wykonywalne, dlatego nie mogę ich tutaj przesłać z tymi rozszerzeniami. Dlatego musisz zapisać je i zmienić ich nazwy lokalnie.

Krok 2: Wykonanie kodu

Jeśli chcesz uruchomić mój kod, postępuj zgodnie z poniższymi instrukcjami. Jeśli nie chcesz wykonywać na swojej maszynie czegoś, o czym nic nie wiesz, jesteś mądry. Powinieneś przejść do następnego kroku, w którym przechodzę przez kod i pokazuję, że nie zrobiłem nic podstępnego. Jeśli jednak po prostu chcesz się do tego dostać (lub jesteś na cudzym komputerze i nie opieki), oto jak rozpocząć kod: Krok 1: kliknij dwukrotnie „startMatrix.bat”. To wszystko. Teraz przejdź do następnego kroku, aby przeczytać o chłodzie, które właśnie zobaczyłeś.

Krok 3: Zrozumienie Kodeksu, część 1

Przyjrzyjmy się kodowi, zaczynając od początku. Mam nadzieję, że nauczysz się wystarczająco dużo o VB z mojego kodu, że pójdziesz i nauczysz się kodować w VB lepiej niż ja:) Więc po pierwsze, mamy 2 pliki: plik bat i plik vbs. Jeśli edytujesz plik bat, zauważysz, że uruchamia on plik vbs, po ustawieniu okna, koloru tekstu i tytułu okna. Przejdźmy do bardziej interesujących rzeczy w pliku vbs. FYI, zajmę się tutaj tylko najciekawszymi wierszami kodu. Zwróć także szczególną uwagę na wiersze zaczynające się od „ (zaznaczenie lub pojedynczy cudzysłów). Są to komentarze, które NIE ZOSTANĄ WYKONANE. Kilka pierwszych wierszy pliku matrix.vbs mówi „Ustaw moje komunikaty o błędach na określony poziom”, ale jednocześnie „Nie pozwól, aby popełnione przeze mnie błędy były fatalne”. Nie jest potrzebna żadna prawdziwa dyskusja. Wiersz 5: Nasze słabe oświadczenie tutaj ustawia wszystkie zmienne, których będziemy używać przez całe życie naszego małego programu. Nie musimy deklarować typów tych zmiennych ani ich początkowych wartości, jak to robimy w niektórych innych językach. VB jest tak „potężny” jak ten. Wiersz 12: objSysInfo pozwala nam zebrać pewne informacje o systemie, na którym pracujemy. Tworzymy obiekt tutaj, aw wierszu 13. objSysInfo. UserName zwraca nazwę aktualnie zalogowanego użytkownika, który wykonuje ten kod. Będzie to użyte później zamiast „Neo”, aby nasz skrypt mógł powiedzieć „Obudź się, Martin…”, jeśli jest uruchamiany na moim komputerze, lub „Obudź się, Brennn10…”, jeśli jest uruchamiany na komputerze Brennn10 i jeśli to była jego nazwa użytkownika. Użycie nazwy użytkownika Systemu pozwala wrzucić ją na odblokowaną maszynę kumpla i automatycznie pobierze jego nazwę, bez konieczności zmiany kodu. Przejdźmy dalej.

Krok 4: Zrozumienie Kodeksu, część 2

Linia 16: sub waitfor to nasz pierwszy podprogram. Podprogram może zostać wywołany z innego miejsca w kodzie, wykona kod w ciele podprogramu, a następnie zwróci sterowanie programem do kodu wywołującego. waitfor ustawia dla nas naszą powłokę. Robiąc to w pętli z „uśpieniem” wewnątrz pętli, pozwalamy na zakończenie aktywacji powłoki przed zwróceniem kontroli, co jest bardzo dobrą rzeczą. Wiersz 26: podmacierz jest naszą drugą podprocedurą i przyjmuje parametr zwany "elementami". Ten podprogram drukuje fajne liczby, które wydają się „spadać”, jak w filmie. Kilka rzeczy wziąłem tutaj za pewnik. Mam nadzieję, że wyjaśniając je, zrozumiesz, skąd pochodzę i zrobisz to lepiej niż ja. Po pierwsze, zakładam, że chcesz tylko 5 kolumn liczb, a „elementy” są podzielne przez liczbę kolumn (5). To było łatwe do zagwarantowania, ponieważ później deklaruję, że parametry przekazywane do „macierzy” to 200 i 100 (wywołuje się to dwukrotnie). Zakładam również, że chcesz, aby wszystkie 5 kolumn było domyślnie włączone. Myślę, że wygląda OK, ale możesz zmienić kilka z nich na FAŁSZ, jeśli chcesz, aby pierwszy wiersz liczb wyglądał tak samo losowo, jak reszta wierszy. OK, więc mamy 5 kolumn, mamy 200 / 5 = 40 wierszy liczb do wyświetlenia (linesToWrite), a wszystkie nasze kolumny są domyślnie włączone. Wiersz 41: wchodzimy w dwie pętle "for", z których pierwsza (Loop A) przechodzi przez nasze wiersze ToWrite, a druga (Pętla B), która przechodzi przez liczbę kolumn. W Loop B wybieramy wartość zmiennej pętli loopB iw zależności od jej wartości oceniamy instrukcję If-Else. Jeśli dana kolumna jest włączona ("TRUE" lub "włączona"), wypiszemy, poprzez "wshshell. SendKeys", wartość Int(Round(rnd())), a następnie tabulator. W przeciwnym razie wypiszemy tylko kartę, tak że kolumna wydaje się pusta. Jaka jest więc wartość Int(Round(rnd()))? rnd() zwraca losową liczbę zmiennoprzecinkową z przedziału od 0.0 do 1.0, Round() przyjmie tę wartość i zaokrągli ją do najbliższej wartości Integer, a Int() rzutuje wynik na Integer. Ten ostatni krok można uznać za przesadę, ponieważ wywołanie Round() powinno dać nam 0 lub 1. Zrobiłem to tylko z przyzwyczajenia. W pewnym momencie ktoś musiał mi powiedzieć, że jest bezpieczniej, a ja najwyraźniej jeszcze tego nie zapomniałem. Przejdź do części 3…

Krok 5: Zrozumienie Kodeksu, część 3

Kontynuując submacierz, oto kilka następnych wierszy VB… „Te przerzucające się kolumny”, „więc jeśli kolumna jest WYŁĄCZONA, zostanie WŁĄCZONA przez 30 procent czasu”, a jeśli kolumna jest WŁĄCZONA, będzie WYŁĄCZONY przez 30 procent czasu. turnOffMax = 0.30 turnOnMax = 0.30 Przełączanie każdej kolumny w 30% przypadków powoduje, że kolumny liczbowe "spadają" w losowy sposób, podobnie jak w filmie. Nie dokładnie, ale blisko. ' Kolumna 1 flip-flop flipMe = rnd() If ((col1 = włączone) and (flipMe < turnOffMax)) Then col1 = wyłączone Else If ((col1 = wyłączone) and (flipMe < turnOnMax)) Then col1 = włączone End IfThe Powyższy blok określa, w jaki sposób ustalamy, czy w kolejnej iteracji będziemy wyświetlać liczbę w danej kolumnie, dla następnego rzędu liczb. Kod brzmi „jeśli kolumna jest włączona, a losowa liczba o nazwie flipMe jest mniejsza niż 30%, wyłącz kolumnę. W przeciwnym razie, jeśli kolumna jest wyłączona, a flipMe wynosi mniej niż 30%, włącz kolumnę”. w górę pod Macierz. Przejdź do klawisza podrzędnego…

Krok 6: Podklucz()

Metoda klucza to below.sub key(msg)' robi wydruki wiadomości "macierzy" i kasuje je wscript.sleep 1500length = len(msg)for position = 1 do długości wshshell. SendKeys mid(msg, position, 1) wscript.sleep 250nextwscript.sleep 3000for position = 1 do długości wshshell. SendKeys "{BACKSPACE}" wscript.sleep 75nextend subTa metoda wypisuje ciąg "msg". Wydrukuje wszystko, co mu przekażesz. Ta metoda jest wywoływana później w kodzie. Pierwsza pętla FOR wypisuje każdy znak w ciągu, po jednym na raz, i zatrzymuje się na 250 milisekund pomiędzy każdym znakiem. Następnie śpimy przez 3000 milisekund (3 sekundy) i wypisujemy backspace dla każdego znaku, który wcześniej wydrukowaliśmy, śpiąc tym razem trochę krócej. To wszystko. Przechodzimy do głównej części programu, gdzie wszystko się łączy.

Krok 7: Główny

Główne wykonanie programu wywołuje waitFor i macierz (którą już omówiliśmy), aby ustawić wszystko i wypisać 200 cyfr binarnych, rozłożonych na 5 kolumn. Nazwa bieżącego użytkownika systemu jest następnie pobierana i manipulowana w celu wydrukowania jako części sekwencji „obudzenia”. Następnie wprowadzamy pętlę FOR, o której wiemy, że będziemy iterować tylko 4 razy z powodu „1 Do ograniczenia 4 . Następnie wykonujemy SELECT na naszej zmiennej pętli (loopA), która dopasowuje pierwszą instrukcję CASE za pierwszym razem, drugą instrukcję CASE za drugim razem itd. W każdej iteracji pętli myString jest ustawiana na poprawną reprezentację ciągu słownictwo, które chcemy wydrukować, a podprogram kluczowy jest wywoływany, aby faktycznie wykonać drukowanie. Jest oczywiście wiele innych sposobów na zaprojektowanie tej pętli i zostawię to jako ćwiczenie dla czytelnika. Po wyjściu z pętli FOR ponownie wywołujemy podprogram macierzy, aby wydrukować więcej liczb. Jak mówi komentarz w kodzie, możesz umieścić to ostatnie wywołanie matrix() w pętli, jeśli chcesz, lub możesz po prostu wywołać to z większą liczbą itp. Na koniec nasze wywołanie quit() przerywa program wykonanie (zawsze dobra praktyka:P). Mam nadzieję, że wszyscy dobrze się bawią biorąc mój przykład i ulepszając go! Jeśli ten Instructable wzbudził twoją ciekawość dzięki VB, Google może zapewnić mnóstwo dobrych zasobów, aby dowiedzieć się więcej na ten temat, niż mogę ci powiedzieć. Udanego kodowania! jaskółka oknówka

Zalecana: