Matrix Code

  • Hallo zusammen,
    dies ist mein 1. Script dass ich öffentlich stelle.
    Es ist für all die die mal einen Matrix (ähnlichen) Code haben wollten.
    Er ist einfach zu bearbeiten und wer will kann ihn gerne verbessern, war halt nur eine Arbeit von 20min.

    Script :

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Guisize[2] = [@DesktopWidth, @DesktopHeight]
    Global $GuiStyle[2] = [$WS_POPUPWINDOW,$WS_EX_TOOLWINDOW]
    Global $GuiBKColor = 0x0
    Global $LabelBKColor = 0x0
    Global $LabelColor = 0x00FF00
    Global $LabelSize[2] = [40,@DesktopHeight]
    Global $LabelAmount = 50
    Global $LabelFont = "TERMINAL"
    Global $randomA[2] = [0,50]
    Global $randomb[2] = [12,20]
    Global $Words = "a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|1|2|3|4|5|6|7|8|9|0"
    Global $Escapekey = "{ESC}"

    [/autoit] [autoit][/autoit] [autoit]

    Global $LabelOutput
    Global $Label[$LabelAmount]
    Global $Position[$LabelAmount]
    Global $Position2[$LabelAmount]

    [/autoit] [autoit][/autoit] [autoit]

    $Words = StringSplit($Words,"|")

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $LabelAmount - 1
    $Position[$i] = 0
    $Position2[$i] = Random($randomA[0],$randomA[1])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $Form1 = GUICreate("CodeGen", $Guisize[0], $Guisize[1], 0, 0, $GuiStyle[0], $GuiStyle[1])
    GUISetBkColor($GuiBKColor)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $LabelAmount - 1
    $Label[$i] = GUICtrlCreateLabel("", $i * 40, 0, $LabelSize[0], $LabelSize[1])
    GUICtrlSetBkColor($Label[$i],$LabelBKColor)
    GUICtrlSetColor($Label[$i],$LabelColor)
    GUICtrlSetFont($Label[$i],12,Default,Default,$LabelFont)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    AdlibRegister("_aCode",30)

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet($Escapekey,"_exit")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(20)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _aCode()
    For $i = 0 To $LabelAmount - 1
    $LabelOutput = ""
    If $Position2[$i] > 0 Then
    For $n = 0 To $Position2[$i]
    $LabelOutput &= @CRLF
    Next
    EndIf
    $Position[$i] += 1
    If $Position[$i] > Random($randomb[0],$randomb[1]) Then
    $Position[$i] = 1
    $Position2[$i] = Random($randomA[0],$randomA[1])
    EndIf
    For $n = 0 To $Position[$i]
    If Random(0,1) Then
    $LabelOutput &= $Words[Random(1,$Words[0])] & @CRLF
    Else
    $LabelOutput &= StringUpper($Words[Random(1,$Words[0])]) & @CRLF
    EndIf
    Next
    GUICtrlSetData($Label[$i],$LabelOutput)
    Next
    EndFunc

    [/autoit]

    API:

    Spoiler anzeigen
    [autoit]

    #include-once

    [/autoit] [autoit][/autoit] [autoit]

    Local $onMatrix = False
    Local $Words
    Local $LabelOutput
    Local $Amount
    Local $Words
    Local $Time
    Local $random1
    Local $random2
    Local $random3
    Local $random4

    [/autoit] [autoit][/autoit] [autoit]

    Func _MatrixCreate($nGUI,$aLeft,$aTop,$aAmount,$aHeight,$aColor = 0x00FF00, $aBKColor = 0x0,$aFont = "TERMINAL",$aWords = "a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|1|2|3|4|5|6|7|8|9|0", $aTime = 30,$arandom1 = 0,$arandom2 = 50, $arandom3 = 12, $arandom4 = 20)

    [/autoit] [autoit][/autoit] [autoit]

    $aWords = StringSplit($aWords,"|")

    [/autoit] [autoit][/autoit] [autoit]

    If Not IsHWnd($nGUI) Then Return SetError(0,0,0)
    If Not IsInt($aLeft) Then Return SetError(1,1,1)
    If Not IsInt($aTop) Then Return SetError(2,2,2)
    If Not IsInt($aAmount) Or $aAmount < 1 Then Return SetError(3,3,3)
    If Not IsInt($aHeight) Or $aHeight < 1 Then Return SetError(4,4,4)
    If Not IsInt($aColor) Then Return SetError(5,5,5)
    If Not IsString($aFont) Then Return SetError(6,6,6)
    If Not IsArray($aWords) Or $aWords[0] = 0 Then Return SetError(7,7,7)
    If Not (IsFloat($aTime) Or IsInt($aTime)) Then Return SetError(8,8,8)
    If Not (IsInt($arandom1) And IsInt($arandom2) And IsInt($arandom3) And IsInt($arandom4)) Then Return SetError(9,9,9)

    [/autoit] [autoit][/autoit] [autoit]

    Global $Label[$aAmount]
    Global $Position[$aAmount]
    Global $Position2[$aAmount]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $aAmount - 1
    $Position[$i] = 0
    $Position2[$i] = Random($arandom1,$arandom2)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    GUISwitch($nGUI)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $aAmount - 1
    $Label[$i] = GUICtrlCreateLabel("", ($i * 40) + $aLeft, $aTop, 40, $aHeight)
    GUICtrlSetBkColor($Label[$i],$aBKColor)
    GUICtrlSetColor($Label[$i],$aColor)
    GUICtrlSetFont($Label[$i],12,Default,Default,$aFont)
    Next
    $onMatrix = True
    $Words = $aWords
    $Amount = $aAmount
    $Time = $aTime
    $random1 = $arandom1
    $random2 = $arandom2
    $random3 = $arandom3
    $random4 = $arandom4
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _MatrixStart($aTime = 30)
    If $onMatrix Then
    AdlibRegister("__aCode",$Time)
    Else
    Return SetError(0,0,0)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _MatrixStop()
    If $onMatrix Then AdlibUnRegister("__aCode")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _MatrixDelete()
    For $i = 0 To $Amount - 1
    GUICtrlDelete($Label[$i])
    Next
    $onMatrix = False
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func __aCode()
    For $i = 0 To $Amount - 1
    $LabelOutput = ""
    If $Position2[$i] > 0 Then
    For $n = 0 To $Position2[$i]
    $LabelOutput &= @CRLF
    Next
    EndIf
    $Position[$i] += 1
    If $Position[$i] > Random($random3,$random4) Then
    $Position[$i] = 1
    $Position2[$i] = Random($random1,$random2)
    EndIf
    For $n = 0 To $Position[$i]
    If Random(0,1) Then
    $LabelOutput &= $Words[Random(1,$Words[0])] & @CRLF
    Else
    $LabelOutput &= StringUpper($Words[Random(1,$Words[0])]) & @CRLF
    EndIf
    Next
    GUICtrlSetData($Label[$i],$LabelOutput)
    Next
    EndFunc

    [/autoit]


    #edit
    Kurzes Font Update
    Wer möchte kann sich die neue Font installieren
    Fontname mCode15

  • Sieht cool aus. Jetzt bekomm ich doch grad wieder Lust Matrix anzuschauen ^^.
    Aber du solltest vielleicht noch deinen Post mit einem anderen Browser bearbeiten. Diese eigenartige Formatierung tritt bei Firefox nicht auf, nur bei Chrome oder IE, ich weiß es nicht mehr genau. So wie es jetzt ist, kann es auf jeden Fall keiner lesen ;).

  • Ich finde auch es sieht schon ganz nett aus, noch besser wäre es natürlich, wenn man richtige Informationen codiert darstellen würde und nicht nur zufällige Zeichen. Ich versuch's einfach mal...

  • Sieht cool aus. Jetzt bekomm ich doch grad wieder Lust Matrix anzuschauen ^^.
    Aber du solltest vielleicht noch deinen Post mit einem anderen Browser bearbeiten. Diese eigenartige Formatierung tritt bei Firefox nicht auf, nur bei Chrome oder IE, ich weiß es nicht mehr genau. So wie es jetzt ist, kann es auf jeden Fall keiner lesen ;).

    Okay danke für die Info mache gleich mal

    #edit Done!


    Ich finde auch es sieht schon ganz nett aus, noch besser wäre es natürlich, wenn man richtige Informationen codiert darstellen würde und nicht nur zufällige Zeichen. Ich versuch's einfach mal...

    Jo gute Idee poste doch bitte wenn du fertig bist

    2 Mal editiert, zuletzt von TheDearDead (16. März 2012 um 22:11)

  • Zitat

    Stellt sich mir nur gerade die Frage, was du in der Matrix an Information sehen willst.


    Die Frau im roten Kleid :P.

    Ich glaube ich versuche mich mal an einer GDI+ Umsetzung, wie clezZ es schon gemacht hat. Mal sehen was dabei rauskommt.

  • Man jetzt habt ihr mich ihn fahrt gebracht werd jetzt ersma weiterschreiben

    Vielleicht kriegt ihr heute noch update xD

    #edit: Ich glaube ich mach eine API und ein Interface

  • Ich hab' mal schnell was mit GDI+ gebastelt:
    name22 die Frau im roten Kleid ist es leider noch nicht so ganz...
    (Ich bin mir auch sicher, dass man den Code noch optimieren kann.)

    Matrix
    [autoit]

    #NoTrayIcon
    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    Global $Width = 60, $Height = 40, $Size = 10
    Global $Gui, $Graphic, $Bitmap, $Buffer
    Global $x = 0, $y = 0

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1)
    $Gui = GUICreate('Matrix', $Width*$Size, $Height*$Size)
    $Graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $Bitmap = _GDIPlus_BitmapCreateFromGraphics($Width*$Size, $Height*$Size, $Graphic)
    $Buffer = _GDIPlus_ImageGetGraphicsContext($Bitmap)
    GUISetState(@SW_SHOW, $Gui)
    GUISetOnEvent(-3, 'Quit')

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsClear($Buffer, 0xFF000000)
    $Brush = _GDIPlus_BrushCreateSolid(0xFF00FF00)
    $Format = _GDIPlus_StringFormatCreate()
    $Family = _GDIPlus_FontFamilyCreate('Arial')
    $Font = _GDIPlus_FontCreate($Family, $Size*0.7)
    AdlibRegister('Draw', 20)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Until False

    [/autoit] [autoit][/autoit] [autoit]

    Func Quit()
    AdlibUnRegister('Draw')
    _GDIPlus_FontDispose($Font)
    _GDIPlus_FontFamilyDispose($Family)
    _GDIPlus_StringFormatDispose($Format)
    _GDIPlus_BrushDispose($Brush)
    _GDIPlus_GraphicsDispose($Buffer)
    _GDIPlus_BitmapDispose($Bitmap)
    _GDIPlus_GraphicsDispose($Graphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Draw()
    _GDIPlus_GraphicsFillRect($Buffer, $x, $y, $Size, $Size)
    $Layout = _GDIPlus_RectFCreate($x, $y, $Size, $Size)
    $Info = _GDIPlus_GraphicsMeasureString($Buffer, 'A', $Font, $Layout, $Format)
    _GDIPlus_GraphicsDrawStringEx($Buffer, RandomAlNum(), $Font, $Info[0], $Format, $Brush)
    _GDIPlus_GraphicsDrawImageRect($Graphic, $Bitmap, 0, 0, $Width*$Size, $Height*$Size)
    $y += $Size
    If ($y > ($Height*$Size)-$Size) Then
    $y = 0
    $x += $Size
    If ($x > ($Width*$Size)-$Size) Then
    $x = 0
    EndIf
    EndIf
    EndFunc
    Func RandomAlNum()
    Local $rand = Random(0, 35, 1)
    Switch $rand
    Case 0 To 25
    Return Chr(97+$rand)
    Case 26 To 35
    Return String($rand-26)
    EndSwitch
    EndFunc

    [/autoit]
  • Wenn ich mir deine "API" so ansehe frage ich mich, was an meinem 5min-Beispiel so schlecht aussieht.
    Außerdem würde ich dir wirklich raten auf einzelne Labels zu verzichten, das ist nur Verschwendung von Ressourcen.

    MfG, James

  • xD sorry ich habs net böse gemeint
    naja ich würd in deinem code mehr mit 2D Arrays arbeiten mehr nicht

    #edit Da du eindeutig der bessere Programmer bist. Ich kenn mich nicht so sehr aus mit _GDIPlus. Möchtest du versuchen ob du hier noch was tun kannst
    #edit2 Code Erneuert


    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    Global $Width = 60, $Height = 40, $Size = 10
    Global $Gui, $Graphic, $Bitmap, $Buffer
    Global $Amount = 20
    Global $Posix[$Amount][3]
    Global $Posiy[$Amount]
    Global $nRandom

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $Amount - 1
    $Posiy[$i] = 0
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $Amount - 1
    $Posix[$i][0] = Random(1,40,1) * 15
    $Posix[$i][1] = Random(1,20,1) * 15
    $Posix[$i][2] = 0
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1)
    $Gui = GUICreate('Matrix', $Width*$Size, $Height*$Size)
    $Graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $Bitmap = _GDIPlus_BitmapCreateFromGraphics($Width*$Size, $Height*$Size, $Graphic)
    $Buffer = _GDIPlus_ImageGetGraphicsContext($Bitmap)
    GUISetState(@SW_SHOW, $Gui)
    GUISetOnEvent(-3, 'Quit')

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsClear($Buffer, 0xFF000000)
    $Brush = _GDIPlus_BrushCreateSolid(0xFF00FF00)
    $Format = _GDIPlus_StringFormatCreate()
    $Family = _GDIPlus_FontFamilyCreate('mCode15')
    $Font = _GDIPlus_FontCreate($Family, $Size*0.7)
    AdlibRegister('Draw', 10)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Until False

    [/autoit] [autoit][/autoit] [autoit]

    Func Quit()
    AdlibUnRegister('Draw')
    _GDIPlus_FontDispose($Font)
    _GDIPlus_FontFamilyDispose($Family)
    _GDIPlus_StringFormatDispose($Format)
    _GDIPlus_BrushDispose($Brush)
    _GDIPlus_GraphicsDispose($Buffer)
    _GDIPlus_BitmapDispose($Bitmap)
    _GDIPlus_GraphicsDispose($Graphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Draw()
    For $i = 0 To $Amount - 1
    If $Posix[$i][2] = 0 Then
    For $n = 0 To $Posiy[$i]
    _GDIPlus_GraphicsFillRect($Buffer, $Posix[$i][0], $Posix[$i][1] + ($n*15), $Size, $Size)
    $Layout = _GDIPlus_RectFCreate($Posix[$i][0], $Posix[$i][1] + ($n*15), $Size, $Size)
    $Info = _GDIPlus_GraphicsMeasureString($Buffer, 'A', $Font, $Layout, $Format)
    _GDIPlus_GraphicsDrawStringEx($Buffer, RandomAlNum(), $Font, $Info[0], $Format, $Brush)
    _GDIPlus_GraphicsDrawImageRect($Graphic, $Bitmap, 0, 0, $Width*$Size, $Height*$Size)
    Next
    Else
    _GDIPlus_GraphicsFillRect($Buffer, $Posix[$i][0], $Posix[$i][1] + ($Posiy[$i]*15), $Size, $Size)
    $Layout = _GDIPlus_RectFCreate($Posix[$i][0], $Posix[$i][1] + ($Posiy[$i]*15), $Size, $Size)
    $Info = _GDIPlus_GraphicsMeasureString($Buffer, 'A', $Font, $Layout, $Format)
    _GDIPlus_GraphicsDrawStringEx($Buffer, " ", $Font, $Info[0], $Format, $Brush)
    _GDIPlus_GraphicsDrawImageRect($Graphic, $Bitmap, 0, 0, $Width*$Size, $Height*$Size)
    EndIf
    $Posiy[$i] += 1
    $nRandom = Random(5,12,1)
    If $Posiy[$i] = ($Posix[$i][2]+4) And $Posix[$i][2] > 0 Then
    $Posiy[$i] = 0
    $Posix[$i][0] = Random(1,40,1) * 15
    $Posix[$i][1] = Random(1,20,1) * 15
    $Posix[$i][2] = 0
    EndIf
    If $Posix[$i][2] = 0 And $Posiy[$i] > $nRandom Then
    $Posix[$i][2] = $nRandom
    $Posiy[$i] = 0
    EndIf
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func RandomAlNum()
    Local $rand = Random(0, 35, 1)
    Switch $rand
    Case 0 To 25
    Return Chr(97+$rand)
    Case 26 To 35
    Return String($rand-26)
    EndSwitch
    EndFunc

    [/autoit]

    5 Mal editiert, zuletzt von TheDearDead (16. März 2012 um 22:38)

  • ne frage kann man den Matrix- Code auch so ändern, das die Matrix weiter läuft aber wenn man ESC drück das Benutzerpassword eingeben muss?

    Global $Escapekey = "{ESC}" steht in zeile 15 und in zeile 43 HotKeySet($Escapekey, "_exit")

    kann man das iwie so machen das er dann pw abfragt? oder is das net möglich

    ================================================================
    Sorry ganz neu xD AutoIt3 auch erst seit 3 Tagen und bisher nur mit vorgegeben skripts rumexperimentiert

  • Mach per AutoIt Compiler aus dem Script eine .exe. Die benennst du dann in .scr um (Dateiendung ändern). Dann machst du Rechtsklick -> Installieren. Jetzt hast du es als Screensaver installiert, und kannst in der Systemsteuerung festlegen, dass nach beenden des Screensavers ein eingeben des Benutzerpassworts nötig ist.. Ich gehe mal davon aus, dass du dir das so vorgestellt hast.
    Wenn du willst, kann man daraus auch einen "richtigen" Screensaver machen, indem man per _Timer_GetIdleTime in Kombination mit einer If Abfrage checkt ob die Maus oder die Tastatur benutzt wurden und das Programm dann beendet.

  • @name22: nein ich ich hab mir das so vorgestellt --> zurzeit läuft diese matrix ja per doppelklick und beendet sich beim drücken der ESC taste, ich hab mir aber gedacht, obs vllt möglich WÄRE das bei drücken des escape knopf, ein eingabe fenster erscheint wo man das benuzter kennwort eingibt, aber die matrix im hintergrund weiter läuft und sich erst beendet bei erfolgreicher eingabe des userkennworts
    nur zB weiß ich auch nicht ob es überhaupt sobne art passwd.exe in windows gibt!!!!

  • xD also ich check wirklich grade net was du mit screensaver starten meinsT? xD
    wenn ich den matrix code hier starte , kommt matrix , drückt man escape beendet script(exe)
    ich möchte wissen ob man das so hinkriegen kann starten(ausführen)-> matrix startet -> bei esc -> benutzerkennwort eingeben, aber die matrix läuft weiter im hintergrund (wenn man einen screensaver hat und dann die maus bewegt oder ne taste drückt, dannn beender der screensaver und bringt dich ja zum windows login menü, das soll aber nicht so sein, sonder das der screensaver sprich in dem fall hier die matrix im hintergrund weiter läuft)

    kannst du dir vorstellen wie ich das meine? nein einfach is es nicht xD weiß ich von gesetern, und ganz ehrlich AuoIt3 is das erste was ich mich wirklich so ja, iwie kp... xD bei c/c++ oder VBS hab ich nach ner zeit iwie aufgehört weiter zu experimentieren etc, aber autoit3 macht mir viel spaß, aber ich habs ja erst seit 4 bis 5 tagen