Seite 1 von 1

Pygame - Flappy Bird

Verfasst: Montag 27. Juli 2020, 17:51
von tom16092
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).

Re: Pygame - Flappy Bird

Verfasst: Dienstag 11. August 2020, 19:53
von PrØphet
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

Re: Pygame - Flappy Bird

Verfasst: Mittwoch 12. August 2020, 17:55
von Sirius3
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?