2017-03-09 3 views
0

Ich erstelle ein Flappy-Vogel-Programm für die Klasse, aber die Rohre werden entweder nicht bewegt oder nicht angezeigt. Kennt jemand die Lösung meines Problems?Warum werden die Rohre nicht angezeigt oder bewegt?

### SETUP ### 
import pygame, random 
pygame.init() 
c=pygame.time.Clock() 
window = pygame.display.set_mode([500, 400]) 
window.fill((255, 255, 255)) 
playing=True 
drop=1 
x=0 
points=0 
highscore=0 
dead=False 
height=random.randint(50,280) 
t=0 
point_counter=1 
play_again=False 
#start 
print("Press any key to start.") 
while not play_again: 
    for event in pygame.event.get(): 
     if event.type==pygame.KEYDOWN: 
      play_again=True 
### MAIN LOOP ### 
while playing: 
    play_again=False 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      playing = False 
    ### GAME LOOP ### 
    while playing and not dead: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       playing = False 
      #jump 
      if event.type==pygame.KEYDOWN: 
       drop=-10 
     top_pipe=pygame.Rect(500+t,0,75,height) 
     bird=pygame.Rect(200,200+x,75,50) 
     window.fill((255,255,255)) 
     #hitting ground or ceiling 
     if bird.y>=350 or bird.y<=0: 
      dead=True 
     if top_pipe.x==-75: 
      top_pipe.x=500 
      t=0 
      point_counter=1 
      height=random.randint(50,280) 
     bottom_pipe=pygame.Rect(500-t,height-70,75,1000) 
     t-=1 
     # if hits pipe 
     if top_pipe.x<250 and top_pipe.x>150 and (bird.x<height or bird.x>height+20): 
      print("You died!") 
      dead=True 
     elif top_pipe.x<150 and point_counter==1: 
      points+=1 
      point_counter=0 
     #gravity 
     drop+=1 
     x+=drop 
     #body 
     pygame.draw.rect(window,(255,255,0),bird) 
     #eye 
     pygame.draw.circle(window,(0,0,0),(bird.x+60,bird.y+10),2) 
     pygame.display.flip() 
     #pipes 
     pygame.draw.rect(window,(0,255,0),top_pipe) 
     pygame.draw.rect(window,(0,255,0),bottom_pipe) 
     #framerate 
     c.tick(30) 
    x=0 
    drop=1 
    window.fill((255,255,255)) 
    bird=pygame.Rect(200,200+x,75,50) 
    #body 
    pygame.draw.rect(window,(255,255,0),bird) 
    #eye 
    pygame.draw.circle(window,(0,0,0),(bird.x+60,bird.y+10),2) 
    pygame.display.flip() 
    if points>highscore: 
     print("New highscore!: "+str(points)) 
     highscore=points 
    elif points==highscore: 
     print("You matched your highscore!") 
    else: 
     print("Try again!") 
    pygame.time.wait(2000) 
    print("\n"*100) 
    print("Highscore: "+str(highscore)) 
    print("Press any key to play again.") 
    dead=False 
    while playing and not play_again: 
     for event in pygame.event.get(): 
      if event.type==pygame.QUIT: 
       playing=False 
      elif event.type==pygame.KEYDOWN: 
       play_again=True 

Ich kann nicht finden, wo die Rohre von der Bewegung verhindert werden, wenn sie sind.

+1

Versuchen Sie, Ihren Code so leserlich wie möglich zu machen, wenn Sie Hilfe benötigen. Setzen Sie ein Leerzeichen zwischen Operatoren (=, ==, <, >, +, -, /, *, usw.) und brechen Sie den Code ab und zu in Absätze auf (wo Sie einige Ihrer Kommentare platzieren würden, wäre ein guter Platz). Ansonsten ist es wie ein Essay ohne Absätze, es wird schnell schwer lesbar und energieaufwendig. Benennen Sie Variablen wie "c" in "clock" um, damit sie erklären, was sie sind, damit der Leser nicht jedes Mal seine Definition nachschlagen muss. Am wichtigsten ist, machen Sie ein [mcve]. Entfernen Sie alles, was unnötig ist, aber das Problem bleibt bestehen. –

Antwort

0

Sie rufen pygame.display.flip() auf, bevor Sie die Pipe-Rectures zeichnen, also zeichnen Sie sie, nachdem das Fenster gerendert wird.

Es scheint auch ein Problem mit der Kollisionserkennung zu geben, aber es ist Ihre Aufgabe, das herauszufinden. Werfen Sie einen Blick auf die collision detection methods von pygame.Rect.

+0

Vielen Dank! Ich weiß, wie ich das jetzt mache. – Jdog

Verwandte Themen