Bisschen MineSweeper gefällig?

  • Hier mal ein Programm, das euch bei MineSweeper Hilft :D bzw. Alles alleine macht :D
    Kann gerne verbessert werden :)

    Spoiler anzeigen
    [autoit]

    #include <nomadmemory.au3>
    #include<windowsconstants.au3>
    #NoTrayIcon
    Opt("WinTitleMatchMode", 3)
    $Status = MsgBox(4,"MineSweeper-Hack 1.0 Beta","Soll 'MineSweeper' gestartet werden?")
    If $Status = 7 or WinExists("MineSweeper") then Exit
    If $Status = 6 then run(@SystemDir & "\winmine.exe")
    GUICreate("Defuse", 77, 17, -100, -100, $WS_POPUP, $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW)
    $EXIT = GUICtrlCreateButton("Exit", -1, -1, 30, 19)
    $Defuse = GUICtrlCreateButton("Defuse", 38, -1, 40, 19)
    GUISetState()
    While ProcessExists("winmine.exe")
    If WinActive("MineSweeper") Or WinActive("Defuse") Then
    $WinPos = WinGetPos("MineSweeper")
    If IsArray($WinPos) Then WinMove("Defuse", "", $WinPos[0] + 55, $WinPos[1] + 30)
    Else
    WinMove("Defuse", "", -100, -100)
    EndIf
    Switch GUIGetMsg()
    case $EXIT
    Exit
    Case $defuse
    BlockInput(1)
    WinActivate("MineSweeper")
    send("{X}{y}{z}{z}{y}+{backspace}")
    for $e = $WinPos[1] + 111 to $WinPos[1] + $WinPos[3] - 10 step 16
    for $i = $WinPos[0] + 22 to $WinPos[0] + $WinPos[2] - 10 step 16
    _MemoryWrite("0x0100579C",_MemoryOpen(ProcessExists("winmine.exe")),"0")
    MouseMove($i,$e,1)
    If PixelGetColor(0,0) = 0xFFFFFF Then MouseClick("left",$i,$e,1,0)
    next
    Next
    _MemoryClose(_MemoryOpen(ProcessExists("winmine.exe")))
    BlockInput(0)
    EndSwitch
    WEnd

    [/autoit]

    9 Mal editiert, zuletzt von Valvepro (26. Juli 2008 um 02:26)

  • wie geil ist das denn ^^ minesweeper owned by 30 zeilen autoit.

    klasse script :) könntest du es vllt noch auskommentieren ? z.b. wozu die send() 's sind.

    gute arbeit!

    Einmal editiert, zuletzt von WoEf (5. Juli 2008 um 21:01)

  • Schon passiert , hoffe man kann es nachvollziehen:D

    Für Rechtschreibfehler übernehme ich keine Haftung, bzw. ihr könnt sie behalten :P

  • das ist irgendwie ganz witzig aber wo genau ist denn bitte der weiße pixel ich finde einfach nichts. kannst du vllt einen screenshot posten? ;)

  • musste ihn auch erst suchen, er ist ganz oben links an deinem bildschrimrand (vllt auch davon verdeckt-> monitor einstellen :))

  • Der Pixel befindet sich an der Koordinate '0,0' wie auch im Script zu sehen ist (hoffe ich).

  • der pixel war echt verdeckt konnte ihn erst mit einem screenshot sichtbar machen(und das trotz flachbildschirm das sich ja automatisch anpasst).

  • Zitat

    der pixel war echt verdeckt konnte ihn erst mit einem screenshot sichtbar machen(und das trotz flachbildschirm das sich ja automatisch anpasst).

    Ich bin der König der Ferndiagnose :P

  • Sehr nett, hab mir mal erlaubt es etwas zu erweitern, kommen ja recht schlechte Ergebnisse bei raus ;) passte grade recht gut da ich mir das Tut im Autoit Wiki angesehen habe :)

    Erweiterte Version mit nomadmemory
    [autoit]


    #include <nomadmemory.au3>;<--- McPoldy Erweiterung
    HotKeySet("{F1}","start") ;HotKeySet für Start, belegt auf der Taste 'F1'
    HotKeySet("{esc}","_exit") ;HotKeySet für Ende, belegt auf der Taste 'ESC'
    MsgBox("","MineSweeper","Um zu starten, drücken Sie 'F1'")
    while 1
    WEnd

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

    func start()
    run(@SystemDir & "\winmine.exe") ;MineSweeper Start
    MsgBox("","","Klicken Sie OK!") ;MsgBox ....einfach Ok drücken, damit man noch die möglichkeit hat bei MineSweeper etwas zu ändern..(Feldgröße)
    WinActivate("MineSweeper") ;MineSweeper Fenster Activieren
    WinWaitActive("MineSweeper") ;Auf MineSweeper Fenster warten
    send("{X}{y}{z}{z}{y}{backspace}+{backspace}") ;Cheat Aktivieren mittels den Send's (in der reihenfolge aktiviert man einen Cheat)
    ;Der Cheat bewirkt, das wenn man mit der Maus über eines der Kästchen fährt ein weisser Pixel oben links erscheint.
    ;Wenn ein weisser Pixel oben links ist, ist 'KEINE' Mine darunter.
    $WinPos = WinGetPos("MineSweeper") ;MineSweeper Fenster Position ermitteln
    $x = $WinPos[0] + 22 ;MineSweeper Koordinaten werden Modifiziert
    $y = $WinPos[1] + 111
    $z = $WinPos[0] + $WinPos[2] - 10
    $w = $WinPos[1] + $WinPos[3] - 10
    ;<--- McPoldy Erweiterung
    $ProzessID = ProcessExists("winmine.exe")
    $mem = _MemoryOpen($ProzessID)
    $adr = 0x0100579C
    ;---> McPoldy Erweiterung
    for $e = $y to $w step 16
    for $i = $x to $z step 16
    _MemoryWrite("0x0100579C",$mem,"1");<--- McPoldy Erweiterung
    MouseMove($i,$e,1) ;MouseMove über das ganze Feld Koordinaten bekommt er über die 'for-schleifen'
    if PixelGetColor(0,0) = 0xFFFFFF Then MouseClick("left",$i,$e,1,0) ;Wenn Pixel oben links weiss, dann klicken
    next
    Next
    _MemoryClose($mem);<--- McPoldy Erweiterung
    EndFunc

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

    func _exit()
    Exit ;EXIT
    End Func

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

    Einmal editiert, zuletzt von McPoldy (6. Juli 2008 um 15:00)

  • McPoldy:
    Du hast EndFunc vergessen.

    mit EndFunc
    [autoit]

    #include <nomadmemory.au3>;<--- McPoldy Erweiterung
    HotKeySet("{F1}","start") ;HotKeySet für Start, belegt auf der Taste 'F1'
    HotKeySet("{esc}","_exit") ;HotKeySet für Ende, belegt auf der Taste 'ESC'
    MsgBox("","MineSweeper","Um zu starten, drücken Sie 'F1'")
    while 1
    WEnd

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

    func start()
    run(@SystemDir & "\winmine.exe") ;MineSweeper Start
    MsgBox("","","Klicken Sie OK!") ;MsgBox ....einfach Ok drücken, damit man noch die möglichkeit hat bei MineSweeper etwas zu ändern..(Feldgröße)
    WinActivate("MineSweeper") ;MineSweeper Fenster Activieren
    WinWaitActive("MineSweeper") ;Auf MineSweeper Fenster warten
    controlSend("MineSweeper","","","{X}{y}{z}{z}{y}{backspace}+{backspace}") ;Cheat Aktivieren mittels den Send's (in der reihenfolge aktiviert man einen Cheat)
    ;Der Cheat bewirkt, das wenn man mit der Maus über eines der Kästchen fährt ein weisser Pixel oben links erscheint.
    ;Wenn ein weisser Pixel oben links ist, ist 'KEINE' Mine darunter.
    $WinPos = WinGetPos("MineSweeper") ;MineSweeper Fenster Position ermitteln
    $x = $WinPos[0] + 22 ;MineSweeper Koordinaten werden Modifiziert
    $y = $WinPos[1] + 111
    $z = $WinPos[0] + $WinPos[2] - 10
    $w = $WinPos[1] + $WinPos[3] - 10
    ;<--- McPoldy Erweiterung
    $ProzessID = ProcessExists("winmine.exe")
    $mem = _MemoryOpen($ProzessID)
    $adr = 0x0100579C
    ;---> McPoldy Erweiterung
    for $e = $y to $w step 16
    for $i = $x to $z step 16
    _MemoryWrite("0x0100579C",$mem,"1");<--- McPoldy Erweiterung
    MouseMove($i,$e,1) ;MouseMove über das ganze Feld Koordinaten bekommt er über die 'for-schleifen'
    if PixelGetColor(0,0) = 0xFFFFFF Then MouseClick("left",$i,$e,1,0) ;Wenn Pixel oben links weiss, dann klicken
    next
    Next
    _MemoryClose($mem);<--- McPoldy Erweiterung
    EndFunc

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

    func _exit()
    Exit ;EXIT
    EndFunc

    [/autoit]
  • McPoldy: da ich mit den memory befehlen arbeite ist mir unklar was deine veränderung bewirkt. kannst du es bitte erklären?

  • @Mignon, es editiert einfach den Memory-Wert, in den die Zeit geschrieben wird und setzt den auf 1. D.h. egal welche Zeit du erzielst, es steht immer 1 da :).

    Einmal editiert, zuletzt von anno2008 (5. Juli 2008 um 23:20)

  • @senden
    Ups, danke schön :)

    @Mignon
    Ich hab mal ein Video zum Vergleich bei YouTube hoch geladen: Link

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Uff sowas versuch ich auch grad mal hinzukriegen. Nur komischerweise ist meine Adresse von Pinball kein Hex? Cheat Engine hat mir 00AE3CD4 und 00C5AEBA geliefert. Funktioniert auch wenn ich die Werte über CE ändere nur AutoIt braucht da ja Hex?

  • gutes script, funktioniert nur leider nich für vista ;(
    werd mich morgen mal durchn code kauen vielleicht kann ich es vista kompatibel machen
    und sieh mal hier hatte einer die gleiche idee

  • Hi, ja..das war die Ausgangsidee wo ich das gesehen habe wollte ichs nachproggen, bloss bei seinem kann man nicht ein definiertes Feld lösen nur die 3 standarts..
    Vista kompatible..hmmm probier das mal...