这些是我为游戏制作的积木。 Stack Overflow不允许我放所有积木,所以它们是积木的1/3。总数为60(3行,共20行)。
#Bricks
pygame.draw.rect(screen, (blue), (0,65,40,20), 0)
pygame.draw.rect(screen, (blue), (40,65,40,20), 0)
pygame.draw.rect(screen, (blue), (80,65,40,20), 0)
pygame.draw.rect(screen, (blue), (120,65,40,20), 0)
pygame.draw.rect(screen, (blue), (160,65,40,20), 0)
pygame.draw.rect(screen, (blue), (200,65,40,20), 0)
pygame.draw.rect(screen, (blue), (240,65,40,20), 0)
pygame.draw.rect(screen, (blue), (280,65,40,20), 0)
pygame.draw.rect(screen, (blue), (320,65,40,20), 0)
pygame.draw.rect(screen, (blue), (360,65,40,20), 0)
pygame.draw.rect(screen, (blue), (400,65,40,20), 0)
pygame.draw.rect(screen, (blue), (440,65,40,20), 0)
pygame.draw.rect(screen, (blue), (480,65,40,20), 0)
pygame.draw.rect(screen, (blue), (520,65,40,20), 0)
pygame.draw.rect(screen, (blue), (560,65,40,20), 0)
pygame.draw.rect(screen, (blue), (600,65,40,20), 0)
pygame.draw.rect(screen, (blue), (640,65,40,20), 0)
pygame.draw.rect(screen, (blue), (680,65,40,20), 0)
pygame.draw.rect(screen, (blue), (720,65,40,20), 0)
pygame.draw.rect(screen, (blue), (760,65,40,20), 0)
是否可以将这些积木放在一个变量下,并且也可以缩短这段代码?非常感谢您的帮助。谢谢。
最佳答案
只需使用嵌套的for
循环创建包含所有积木的列表。
我将使用pygame.Rect()来保持位置和大小,因为我将使用它来检查碰撞。
all_bricks = []
for y in range(65, 106, 20):
for x in range(0, 761, 40):
brick_rect = pygame.Rect(x, y, 40, 20)
all_bricks.append(brick_rect)
然后可以使用一个
for
循环绘制它们for brick_rect in all_bricks:
pygame.draw.rect(screen, blue, brick_rect, 0)
或检查碰撞
untouched_bricks = []
for brick_rect in all_bricks:
if not ball_rect.colliderect(brick_rect):
untouched_bricks.append(brick_rect)
#else:
# print("Brick touched")
# keep only untouched bricks
all_bricks = unbreaked_bricks
为了分别保持每种砖块的位置和颜色,您将需要更复杂的结构:
清单-即
[blue, pygame.Rect(x, y, 40, 20), ...]
字典-即
{"color": blue, "rect": pygame.Rect(x, y, 40, 20), "other": ...}
)类