Как в Змейке мы хранили тело змейки списком — так здесь храним кирпичи. Только
это список прямоугольников pygame.Rect:
COLS, ROWS = 10, 5 BRICK_W = WIDTH // COLS BRICK_H = 24 GAP = 3 TOP = 40 bricks = [] for row in range(ROWS): for col in range(COLS): x = col * BRICK_W + GAP y = TOP + row * BRICK_H + GAP bricks.append(pygame.Rect(x, y, BRICK_W - GAP * 2, BRICK_H - GAP * 2))
# Проверяем каждый кирпич: попали — убираем и отскакиваем for brick in bricks: if ball_rect.colliderect(brick): bricks.remove(brick) dy = -dy score += 1 break # один кирпич за кадр
for — это сеткаВнешний for row идёт по строкам, внутренний for col —
по столбцам. Для каждой пары (строка, столбец) считаем место кирпича и кладём
его в список. GAP — щель между кирпичами, чтобы была сетка.
Каждый кадр пробегаем список кирпичей и проверяем colliderect с
мячом. Попали — bricks.remove(brick) убирает кирпич из списка
(он исчезает с экрана), мяч отскакивает (dy = -dy), +1 очко.
break
Мы выходим из цикла сразу после первого попадания. Во-первых, нельзя удалять из
списка и продолжать его перебирать — будет ошибка. Во-вторых, за один кадр
логично разбить один кирпич.
BRICK_COLORS[row % 5] —
получаются разноцветные ряды, как в настоящем Арканоиде.
ROWS = 7.GAP = 0 — кирпичи вплотную.