Вместо Списка, представляющего ваших врагов, начните использовать класс Rect
(на самом деле вы должны использовать класс Sprite
, но по одному шагу за раз).
Так что вместо
blocks.append([random.randrange(0, display_width),0])
for block in blocks:
pygame.draw.rect(game_display, green, (block[0],block[1], 30, 40))
мы можем написать
blocks.append(pygame.Rect(random.randrange(0, display_width), 0, 30, 40))
for block in blocks:
pygame.draw.rect(game_display, green, block)
и вместо
for leng in range(len(blocks)):
blocks[leng][1]+=10
for block in blocks:
if block[1]<0:
blocks.remove(block)
мы можем использовать (посмотрите, насколько яснее становится код):
for block in blocks[:]:
block.move_ip(0, 10)
if not game_display.get_rect().contains(block):
blocks.remove(block)
blocks.append(pygame.Rect(random.randrange(0, display_width), 0, 30, 40))
, который также добавит нового врага, когда он покинет экран. Мы также можем просто сбросить его позицию, например так:
for block in blocks:
block.move_ip(0, 10)
if not game_display.get_rect().contains(block):
block.x = random.randrange(0, display_width)
Итак, когда вы хотите, чтобы появился новый прямоугольник, просто позвоните
blocks.append(pygame.Rect(random.randrange(0, display_width), 0, 30, 40))
, который вы, возможно, захотите поместить в функцию, или лучше использовать класс Sprite вместо