Pygame - Flappy Bird

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
tom16092
User
Beiträge: 5
Registriert: Sonntag 3. Mai 2020, 22:13

Guten Abend zusammen,

ich versuche seit ein paar Stunden Flappy Bird in Python, als erstes Spiele-Projekt umzusetzen.

Das ganze Funktioniert soweit sehr gut, leider habe ich jedoch das Problem, dass es beim erstellen der Röhren entweder nur gleiche Abstände gibt, oder durch die Nutzung von Randint ganz wirre Abstände erstellt werden, also so, dass sie sich dauerhaft verändern.

Meine Frage an der Stelle, hat jemand eine Idee wie man das so umsetzten kann das die Röhren unterschiedliche Abstände haben und sich nicht bewegen?

Hier ein bisschen vom Code:

Code: Alles auswählen

x = 250
y = 500
bx = int(x/2)
by = int(y/2)
brad = 5
swidth = 15
sx = 250
sy = 500
sy_oben = 0
sheight = -100
sdepht = 100
leben = 5

pygame.init()
screen = pygame.display.set_mode([x, y])
screen.fill((0,0,0))
pygame.draw.circle(screen, (255,255,0), (bx, by), brad, 0)
pygame.draw.rect(screen, (255,40,0), (sx,sy, swidth, sheight), 0)
pygame.draw.rect(screen, (255,40,0),(sx,sy_oben, swidth, sdepht), 0)
#Diverse Funktionen
pygame.display.flip()
while leben > 0:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                by -= 40
    screen.fill((0,0,0))
    move_bird()
    move_tube()
    check()
    pygame.draw.circle(screen, (255,255,0), (bx, by), brad, 0)
    pygame.draw.rect(screen, (255,40,0), (sx,sy, swidth, sheight), 0)
    pygame.draw.rect(screen, (255,40,0),(sx,sy_oben, swidth, sdepht), 0)
    for i in range(0, 100):
        check()
        pygame.draw.rect(screen, (255,40,0), (sx+i*100, sy, swidth, sheight), 0)
        pygame.draw.rect(screen, (255,40,0),(sx+i*100,sy_oben, swidth, sdepht), 0)
    pygame.display.flip()
Falls ihr mehr Code benötigt dann einfach bescheid geben.

Vielen Dank und noch einen schönen Abend
Tom


PS: Es geht um den y-Abstand (auf der y_Achse von pygame).
PrØphet
User
Beiträge: 1
Registriert: Dienstag 11. August 2020, 19:47

Hey Tom, leider ist dein Code-Ausschnitt glaube ich nicht vollständig und noch dazu nicht sehr übersichtlich.
Ohne Kommentare, mit Variablenbezeichnungen, die nicht alle direkt selbstverständlich sind und ohne Objektorientierte Programmierung, ist es sehr schwer zu verstehen, wie dein Programm bis jetzt funktioniert.
(Zum Beispiel weiß ich nicht wie die "move_tube()" - Methode aufgebaut ist oder welche deiner Variablen und Rects zum Vogel oder zu einer Röhre gehören)

Und wenn man den Code von dir nicht verstehen kann, bzw. es zu kompliziert ist, ihn zu verstehen, kann man auch dein Problem nicht nachvollziehen und beheben.

Ich hoffe du konntest damit schonmal etwas anfangen. Vielleicht kannst du deinen Code etwas besser strukturieren, auskommentieren und einmal komplett angeben. Dann können ich oder jemand anderes dir vielleicht helfen!

Grüße,
Prøphet
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich versteh nicht, wo hier Röhren erzeugt werden und warum die wild herumspringen sollten? Du hast doch in der for-Schleife kein random benutzt, sondern eine Liste mit den Röhrenpositionen am Anfang initialisiert?
Aller Code sollte in Funktionen stecken. Nach einem : von if oder for gehört immer eine neue Zeile. sys.exit sollte nicht irgendwo versteckt vorkommen. Wäre das alles in einer Funktion, könnte man die per `return` verlassen. Was macht denn die Funktion `check`. Die immer in einer for-Schleife ohne Argumente aufzurufen, macht irgendwie keinen Sinn. move_bird und move_tube läßt auch befürchten, dass hier viel mit globalen Variablen gearbeitet wird. Benutze keine Abkürzungen in Variablennamen, was soll denn brad bedeuten und wo ist pitt?
Antworten