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.
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. –