Array mit Koordinaten aber wie?

Code-Stücke können hier veröffentlicht werden.
Antworten
sasori99
User
Beiträge: 9
Registriert: Sonntag 2. August 2020, 13:00

Hallo Zusammen,

ich habe hier einen Code geschrieben um ein Spiel zu automatisieren. So lerne ich zu programmieren...learning by doing ;-)

Ziel ist: verschiedene Punkte durch Eingabe der X und Y Koordinate in ein Fenster zu schreiben, ok zu klicken und für 2 Sekunden zu warten.
Ich habe mittlerweile über 50 solcher Ziele. Die X und Y Koordinaten sind zwischen 0,0 und 800,800
Ich kann also sagen: Ziel 1 = 123/526, Ziel 2= 254/14, ....
Am Ende will ich eine Liste haben, in die ich die Koordinaten eintrage und das Programm nacheinander zu jeder Koordinate Springt.

Arrays mit 1 Zahl habe ich schon hin bekommen. Aber wie bekomme ich die Koordinaten nacheinander in einer Schleife abgefragt, damit ich nicht 50 mal den gleichen def machen muss? Oder stehe ich seit gestern so auf dem Schlauch und sehe den Wald vor lauter Bäumen nicht ?!

Es wäre schön wenn mir jemand den Ansatz erklären könnte, damit ich hier weiter komme.

Code: Alles auswählen

import pyautogui as pg
import time
import keyboard

warteZwischen = 2

def start():
    x = 0
    y = 0
    pg.moveTo(964, 629, 1,  pg.easeOutQuad)
    time.sleep(1)
    pg.click(clicks=2, interval=0.5)
    time.sleep(1)
    pg.moveTo(847, 475, 0.25,  pg.easeOutQuad)
    pg.click()
    pg.hotkey('backspace', 'backspace', 'backspace')
    pg.write(str(x))
    pg.moveTo(962, 470, 0.25,  pg.easeOutQuad)
    pg.click()
    pg.hotkey('backspace', 'backspace', 'backspace')
    pg.write(str(y))
    pg.moveTo(1048, 619, 0.25,  pg.easeOutQuad)
    pg.click()
    time.sleep(warteZwischen)


def hive():
    x = 394
    y = 316
    pg.moveTo(847, 475, 0.25,  pg.easeOutQuad)
    pg.click()
    pg.hotkey('backspace', 'backspace', 'backspace')
    pg.write(str(x))
    pg.moveTo(962, 470, 0.25,  pg.easeOutQuad)
    pg.click()
    pg.hotkey('backspace', 'backspace', 'backspace')
    pg.write(str(y))
    pg.moveTo(1048, 619, 0.25,  pg.easeOutQuad)
    pg.click()
    time.sleep(warteZwischen)


def boje():
    x = 407
    y = 359
    pg.moveTo(847, 475, 0.25,  pg.easeOutQuad)
    pg.click()
    pg.hotkey('backspace', 'backspace', 'backspace')
    pg.write(str(x))
    pg.moveTo(962, 470, 0.25,  pg.easeOutQuad)
    pg.click()
    pg.hotkey('backspace', 'backspace', 'backspace')
    pg.write(str(y))
    pg.moveTo(1048, 619, 0.25,  pg.easeOutQuad)
    pg.click()
    time.sleep(warteZwischen)

start()
hive()
boje()
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sasori99: `keyboard` wird importiert aber nicht verwendet.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Du willst hier kein Array sondern eine Liste. Die beiden Werte pro Aufruf kann man zu jeweils einem Tupel zusammenfassen.

Die Code-Wiederholungen vermeidet man durch eine Funktion bei der die Unterschiede als Parameter übergeben werden.

Code: Alles auswählen

#!/usr/bin/env python3
import time

import pyautogui as pg

DELAY = 2  # in seconds.


def enter_value(x, y, value):
    pg.moveTo(x, y, 0.25, pg.easeOutQuad)
    pg.click()
    pg.hotkey("backspace", "backspace", "backspace")
    pg.write(str(value))


def enter_values(value_a, value_b):
    enter_value(847, 475, value_a)
    enter_value(962, 470, value_b)
    pg.moveTo(1048, 619, 0.25, pg.easeOutQuad)
    pg.click()
    time.sleep(DELAY)


def main():
    pg.moveTo(964, 629, 1, pg.easeOutQuad)
    time.sleep(1)
    pg.click(clicks=2, interval=0.5)
    time.sleep(1)
    for value_a, value_b in [
        (0, 0),  # start
        (394, 316),  # hive
        (407, 359),  # boje
    ]:
        enter_values(value_a, value_b)


if __name__ == "__main__":
    main()
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
sasori99
User
Beiträge: 9
Registriert: Sonntag 2. August 2020, 13:00

Wow, vielen Dank. Mit dieser Hilfe habe ich nicht gerechnet.
Danke für die Tips und ich versuche es nachzuvollziehen und werde es heute Mittag testen.
Antworten