Inhoudsopgave:

Matrixcode - Visual Basic: 7 stappen
Matrixcode - Visual Basic: 7 stappen

Video: Matrixcode - Visual Basic: 7 stappen

Video: Matrixcode - Visual Basic: 7 stappen
Video: Урок #39 Visual Basic - Генератор QR кода VB.NET ►◄ 2024, Juli-
Anonim
Matrixcode - Visual Basic
Matrixcode - Visual Basic

Nieuwe en verbeterde Visual Basic-code zal een "Matrix"-achtig effect vertonen, met scrollende One's en Zero's. Het snijdt dan naar de Matrix "Wake Up Neo"-reeks en gaat dan verder met het scrollen van nummers. Ik realiseer me dat dit niet precies is hoe de reeks in de film gaat, maar er waren mensen die om deze functionaliteit vroegen, dus ik heb het toegevoegd. Ik denk dat de manier waarop ik de weergave van de kolommen van One's en Zero's willekeurig maak, het mooiste deel van de code is. Ik bespreek precies wat ik later deed. Deze Instructable is een reactie op Brennn10's "Welcome to the Matrix in Command Prompt" Instructable. De code waaruit deze Instructable bestaat, was aanvankelijk gebaseerd op code die werd gepost in een opmerking van DarkJoker op de bovenstaande Instructable. Ik ben opzettelijk nogal expliciet geweest met mijn uitleg van de code, aangezien ik nogal wat verzoeken om opheldering heb gekregen sinds ik voor het eerst deze oplossing geplaatst.

Stap 1: Pak mijn code

Ik heb mijn code hieronder bijgevoegd. Sla beide bestanden (startMatrix.itsabat en matrix.itsavbs) op in dezelfde map op uw computer en verwijder het "itsa"-gedeelte van de bestandsnaam, d.w.z. hernoem de bestanden naar startMatrix.bat en matrix.vbs. Bat-bestanden en vbs-bestanden zijn uitvoerbaar en daarom kan ik ze met die extensies hier niet uploaden. Daarom moet u ze lokaal opslaan en hernoemen.

Stap 2: De code uitvoeren

Als je mijn code wilt uitvoeren, volg dan de onderstaande instructies. Als je iets niet op je machine wilt uitvoeren waar je niets vanaf weet, ben je slim. Je moet naar de volgende stap gaan, waar ik de code doorloop en je laat zien dat ik niets slinks heb gedaan. care), hier leest u hoe u de code start: Stap 1: dubbelklik op "startMatrix.bat". Dat is alles. Ga nu verder met de volgende stap om te lezen over de koelte die je zojuist hebt gezien.

Stap 3: De code begrijpen, deel 1

Laten we de code eens bekijken, te beginnen bij het begin. Hopelijk kun je uit mijn code genoeg over VB leren, zodat je beter leert coderen in VB dan ik:) Dus eerst hebben we 2 bestanden: een bat-bestand en een vbs-bestand. Als je het bat-bestand bewerkt, zul je merken dat het het vbs-bestand uitvoert, na het instellen van het venster, de tekstkleur en de venstertitel. Laten we verder gaan met de interessantere dingen in het vbs-bestand. Ter info, ik ga hier alleen de meest interessante coderegels bespreken. Let ook in het bijzonder op de regels die beginnen met een ' (vinkje of enkel aanhalingsteken). Dit zijn opmerkingen en ZULLEN NIET WORDEN UITGEVOERD. De eerste paar regels van matrix.vbs zeggen "Zet mijn foutmeldingen op het expliciete niveau" maar tegelijkertijd "Laat geen enkele fout die ik heb gemaakt fataal zijn." Geen echte discussie nodig. Regel 5: Onze vage verklaring hier stelt alle variabelen in die we gedurende de levensduur van ons kleine programma zullen gebruiken. We hoeven geen typen voor deze variabelen te declareren, of initiële waarden ervoor, zoals we dat in sommige andere talen zouden kunnen doen. VB is zo "krachtig". Regel 12: objSysInfo laat ons wat informatie verzamelen over het systeem waarop we draaien. We maken het object hier en op regel 13 retourneert objSysInfo. UserName de naam van de momenteel ingelogde gebruiker die deze code uitvoert. Dit zal later worden gebruikt in plaats van "Neo", zodat ons script "Wakker worden, Martin…" kan zeggen als het op mijn machine wordt uitgevoerd, of "Wakker worden, Brennn10…" als het wordt uitgevoerd op de machine van Brennn10 en als dat was zijn gebruikersnaam. Door de gebruikersnaam van het systeem te gebruiken, kun je het op de ontgrendelde machine van je buddy gooien en het zal zijn naam automatisch ophalen, zonder de code te hoeven veranderen. Laten we verder gaan.

Stap 4: De code begrijpen, deel 2

Regel 16: sub waitfor is onze eerste subroutine. Een subroutine kan worden aangeroepen vanaf een andere plaats in de code, voert de code uit in de hoofdtekst van de subroutine en geeft dan de programmacontrole terug aan de oproepende code. waitfor zet onze schil voor ons op. Door dit te doen in een lus met een "slaap" in de lus, laten we de activering van de shell voltooien voordat de besturing wordt geretourneerd, wat een zeer goede zaak is. Regel 26: submatrix is onze tweede subroutine en neemt een parameter genaamd "elementen". Deze subroutine print de coole cijfers die lijken te "vallen", zoals in de film. Ik heb hier een paar dingen als vanzelfsprekend beschouwd. Hopelijk begrijp je door ze uit te leggen waar ik vandaan kom en kan je het beter dan ik. Ten eerste neem ik aan dat je maar 5 kolommen met getallen wilt, en dat "elementen" deelbaar zijn door het aantal kolommen (5). Dit was gemakkelijk te garanderen, omdat ik later de parameters die aan "matrix" worden doorgegeven, als 200 en 100 verklaar (het wordt twee keer genoemd). Ik neem ook aan dat u alle 5 kolommen standaard wilt inschakelen. Ik denk dat het er goed uitziet, maar je zou een paar hiervan in FALSE kunnen veranderen als je wilt dat de eerste regel met getallen net zo willekeurig lijkt als de rest van de rijen. OK, dus we hebben 5 kolommen, we hebben 200 / 5 = 40 regels met getallen om weer te geven (linesToWrite), en al onze kolommen zijn standaard ingeschakeld. Regel 41: we gaan in twee "for"-lussen, waarvan de eerste (Loop A) door onze linesToWrite loopt en de tweede (Loop B) die het aantal kolommen doorloopt. In Loop B selecteren we op de waarde van de loopvariabele loopB, en afhankelijk van de waarde evalueren we een If-Else-statement. Als de kolom in kwestie is ingeschakeld ("TRUE", of "ingeschakeld"), zullen we via "wshshell. SendKeys" de waarde van Int(Round(rnd())) afdrukken, gevolgd door een tab. Anders drukken we alleen een tabblad af, zodat de kolom leeg lijkt. Dus wat is de waarde van Int(Round(rnd()))? rnd() retourneert een willekeurig getal met drijvende komma tussen 0,0 en 1,0, Round() neemt die waarde en rondt deze af naar de dichtstbijzijnde Integer-waarde, en Int() werpt het resultaat naar een Integer. Deze laatste stap kan als overkill worden beschouwd, omdat de Round()-aanroep ons 0 of 1 zou moeten geven. Ik deed het gewoon uit gewoonte. Op een gegeven moment moet iemand me hebben verteld dat het veiliger was, en ik ben het blijkbaar nog niet vergeten. Op naar deel 3…

Stap 5: De code begrijpen, deel 3

Doorgaan met submatrix, hier zijn de volgende paar regels van VB …' Dit flip-flops kolommen, ' dus als een kolom UIT is, zal deze 30 procent van de tijd AAN staan, ' en als een kolom AAN is, zal het zijn 30 procent van de tijd uitgeschakeld. turnOffMax = 0.30 turnOnMax = 0.30 Door elke kolom 30% van de tijd te wisselen, "vallen" de nummerkolommen op een willekeurige manier, vergelijkbaar met hoe ze in de film doen. Niet exact, maar in de buurt. ' Kolom 1 flip-flop flipMe = rnd() If ((col1 = ingeschakeld) en (flipMe < turnOffMax)) Dan col1 = uitgeschakeld Else If ((col1 = uitgeschakeld) en (flipMe < turnOnMax)) Dan col1 = ingeschakeld End IfThe bovenstaand blok behandelt hoe we bepalen of we een getal in de gegeven kolom gaan weergeven tijdens de volgende iteratie, voor de volgende rij getallen. De code luidt: "Als de kolom is ingeschakeld en het willekeurige getal met de naam flipMe is minder dan 30%, zet de kolom dan uit. Anders, als de kolom is uitgeschakeld en flipMe is minder dan 30%, zet de kolom dan aan." omhoog submatrix. Op naar subsleutel…

Stap 6: Subsleutel()

De sleutelmethode is hieronder.subsleutel(msg)' print-outs van "de matrix"-berichten, en wis zewscript.sleep 1500length = len(msg)for position = 1 to length wshshell. SendKeys mid(msg, position, 1) wscript.sleep 250nextwscript.sleep 3000for position = 1 to length wshshell. SendKeys "{BACKSPACE}" wscript.sleep 75nextend subDeze methode drukt een string "msg" af. Het zal alles afdrukken wat u erdoorheen haalt. Deze methode wordt later in de code aangeroepen. De eerste FOR-lus drukt elk teken in de tekenreeks één voor één af en pauzeert 250 milliseconden tussen elk teken. We slapen dan 3000 millis (3 seconden) en schrijven een backspace voor elk teken dat we eerder hebben afgedrukt, deze keer slapen we iets minder. Dat is alles. Op naar de hoofdtekst van het programma, waar alles samenkomt.

Stap 7: Hoofd

De hoofduitvoering van het programma roept waitFor en matrix aan (die we al hebben behandeld) om alles in te stellen en 200 binaire cijfers uit te schrijven, verdeeld over 5 kolommen. De naam van de huidige systeemgebruiker wordt vervolgens gepakt en gemanipuleerd om te worden afgedrukt als onderdeel van de "wakker worden" -reeks. We gaan dan een FOR-lus in, waarvan we weten dat we deze slechts 4 keer zullen herhalen vanwege de "1 Tot 4" beperking. We SELECTEREN vervolgens op onze lusvariabele (loopA), die overeenkomt met de eerste CASE-instructie de eerste keer door, de tweede CASE-instructie de tweede keer door de lus, enz. Elke iteratie van de lus, myString wordt ingesteld op de juiste tekenreeksrepresentatie van de woordenstroom die we willen afdrukken, en de sleutelsubroutine wordt aangeroepen om het afdrukken daadwerkelijk uit te voeren. Er zijn natuurlijk veel andere manieren om deze lus te ontwerpen, en dat laat ik als oefening aan de lezer over. Zodra we de FOR-lus verlaten, roepen we opnieuw de matrix-subroutine op om meer getallen af te drukken. Zoals de opmerking in de code zegt, kun je deze laatste aanroep naar matrix() in een lus plaatsen als je wilt, of je kunt hem gewoon met een groter nummer noemen, enz. Ten slotte breekt onze oproep om te stoppen() het programma af uitvoering (altijd goede oefening:P). Ik hoop dat iedereen veel plezier heeft door mijn voorbeeld te nemen en het beter te maken! Als deze Instructable je nieuwsgierigheid heeft gewekt bij VB, kan Google een heleboel goede bronnen bieden om er meer over te leren dan ik je kan vertellen. Veel plezier met coderen! Martin

Aanbevolen: