Brauche Hilfe beim schreiben eines Bots mittels Python/Sikulix

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Solaire
User
Beiträge: 1
Registriert: Mittwoch 19. September 2018, 21:22

Hallo liebe User,

ich wollte mich aus Interesse etwas mit dem programmieren beschäftigen und habe mithilfe einiger Tutorials jetzt vorerst mit Python angefangen.

Als erstes Projekt wollte ich einen simplen Bot für ein Spiel mit Sikulix (Ein Programm welches mir die Möglichkeit bietet, Screenshots in den Code zu packen um so den Bildschirm danach zu durchsuchen) schreiben, bin allerdings am verzweifeln und weiß nicht wo mein Fehler liegt, hier mal der aktuelle Code:

Code: Alles auswählen

import random
running = True

def runHotkey(event):
    global running
    running = False

Env.addHotkey(Key.F1, KeyModifier.CTRL, runHotkey)
ch = switchApp("Galaxy J3")



while(ch.hasWindow() and running):

    if exists(Pattern("1537385136218.png").similar(0.94)):
        sleep(2)
        click(Location(1201, 444).offset(random.randint(0, 250), random.randint(0, 60)))
        sleep(2)
        click(Location(1201, 439).offset(random.randint(0, 250), random.randint(0, 60)))
        sleep(2)
        
        if exists(Pattern("1537375918706.png").similar(0.96)):
            click(Location(1384, 464).offset(random.randint(0, 10), random.randint(0, 10)))
            sleep(1)
            click(Location(1381, 355).offset(random.randint(0, 10), random.randint(0, 10)))
            sleep(1)
  
        elif exists(Pattern("1537375456079.png").exact()):
            click(Location(1384, 464).offset(random.randint(0, 10), random.randint(0, 10)))
            sleep(1)
            click(Location(1381, 355).offset(random.randint(0, 10), random.randint(0, 10)))
            sleep(1)

        elif exists(Pattern("1537376806254.png").exact()):
            click(Location(1384, 464).offset(random.randint(0, 10), random.randint(0, 10)))
            sleep(1)
            click(Location(1381, 355).offset(random.randint(0, 10), random.randint(0, 10)))
            sleep(1)

        elif exists(Pattern("1537310267705.png").similar(0.90)):
            click(Pattern("1537310267705.png").similar(0.90))   
            sleep(1)
              
        else:
            click(Location(1296, 739).offset(random.randint(0, 10), random.randint(0, 10)))
            sleep(1)  
            
    if exists("1537381779210.png"):      
        sleep(1)        
        click(Location(1303, 328).offset(random.randint(0, 40), random.randint(0, 10)))                
        sleep(1)
                          
Versuche es mal vereinfacht darzustellen und schreibe meine Gedanken dazu:
Im ersten Abschnitt muss zweimal geklickt werden (Stage clear).
Anschließend folgen 5 verschiedene Möglichkeiten, wovon eine zutrifft und entsprechend geklickt werden soll (5 mögliche Items wovon ich 1. behalten möchte, der Rest soll verkauft werden).
Darauf folgt ein weiteres Bild bei welchem nochmal auf "Start" drücken muss.

Klingt eigentlich ziemlich simpel, dachte ich zumindest - allerdings funktioniert es nicht wie es sollte. Ich weiß zwar nicht ob einige hier was mit dem Program Sikulix anfangen können, denke allerdings das mein Fehler im Code steckt.

Ein weiteres "Problem" welches ich versucht habe zu umgehen, ist die Tatsache, dass ich wie bereits gesagt nur 1 von 5 Items behalten will. Ich könnte also bestimmt auch die Bedingungen (hier entsprechende Bilder von Items), welche verkauft werden sollen in eine Schleife packen?

Ich hoffe das mir jemand etwas unter die Arme greifen kann und bin für jeden Ratschlag dankbar.

Grüße,
Solaire
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Solaire: Ich denke nicht das man da Anhand von diesem doch etwas undurchsichtigen und auch unvollständigen Quelltext und einem Programm das niemand ausser Dir kennt, viel sagen kann.

Es kommen Namen scheinbar aus dem Nichts, was nicht sein kann.

Bei ``global`` vergeht mir persönlich schon die Lust darüber nachzudenken, denn das benutzt man nicht in sauberem Code.

Diese ganzen kryptischen langen Dateinamen für `Pattern` und die ”magischen” Locations helfen auch nicht beim Verständnis. Das die dauernd aufs Neue erstellt werden, erscheint mir unökonomisch.

Es wird eine Menge Code sehr ähnlich wiederholt. Dafür gibt es die Möglichkeit Funktionen zu definieren.

``while`` ist keine Funktion. Das sollte man also auch nicht so schreiben als wäre es eine. Die Klammern um die Bedingung sind zudem unnötig.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten