如何在pygame中绘制多行多列的矩形?

2024-05-28 19:25:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在试着做砖块突破游戏。然而,我在画砖块时遇到了一个问题。实际上,我可以全部画出来,但我正在寻找一种专业的方法来做到这一点,以便使用更少的代码行。 这是我的一些代码,但没有用:

pygame.draw.rect(screen1, brick_colors[b], (x1, y1, 60, 12))
pygame.draw.rect(screen1, brick_colors[b], (x2, y1, 60, 12))
pygame.draw.rect(screen1, brick_colors[b], (x3, y1, 60, 12))
pygame.draw.rect(screen1, brick_colors[b], (x4, y1, 60, 12))
pygame.draw.rect(screen1, brick_colors[b], (x5, y1, 60, 12))
pygame.draw.rect(screen1, brick_colors[b], (x6, y1, 60, 12))
pygame.draw.rect(screen1, brick_colors[b], (x7, y1, 60, 12))
pygame.draw.rect(screen1, brick_colors[b], (x8, y1, 60, 12))

那么,有没有一种方法使用for循环来完成这项工作呢? 注:砖应为8行,每行8块


Tags: 方法代码rect游戏专业pygamex1x2
1条回答
网友
1楼 · 发布于 2024-05-28 19:25:19

使用嵌套循环:

no_of_rows = 8
no_of_cols = 8

x0, y0 = 20, 20    # just for example
dx, dy = 70, 16    # just for example

for row in range(no_of_rows):
    for col in range(no_of_cols):
        pygame.draw.rect(screen1, brick_colors[b], (x0 + col*dx, y0 + row*dy, 60, 12))

我建议列出块位置,并根据列表中的位置绘制块矩形。如果某个块被销毁,则只需从列表中删除该位置:

blocks = []
for row in range(no_of_rows):
    for col in range(no_of_cols):
        blocks.append((x0 + col*dx, y0 + row*dy))
for pos in blocks:
    pygame.draw.rect(screen1, brick_colors[b], (pos[0], pos[1], 60, 12))

这可以通过使用^{}对象进一步改进:

blocks = []
for row in range(no_of_rows):
    for col in range(no_of_cols):
        rect = pygame.Rect(x0 + col*dx, y0 + row*dy, 60, 12)
        blocks.append(rect )
for rect in blocks:
    pygame.draw.rect(screen1, brick_colors[b], rect )

相关问题 更多 >

    热门问题