Оптимизация циклов

Рейтинг: 0Ответов: 2Опубликовано: 19.04.2023

мне хотелось бы оптимизировать этот код, чтобы не писать для каждой переменной отдельный цикл, а был бы один цикл(подозреваю, что мне могут помочь вложенные циклы).

if pygame.sprite.collide_rect(player, lava):
    player.move(0, -250, boxes)
    kill += 1

if pygame.sprite.collide_rect(player, lava1):
    player.move(-100, -250, boxes)
    kill += 1

if pygame.sprite.collide_rect(player, lava2):
    player.move(-100, -250, boxes)
    kill += 1

if pygame.sprite.collide_rect(player, lava3):
    player.move(-100, -250, boxes)
    kill += 1

if pygame.sprite.collide_rect(player, lava4):
    player.move(-100, -250, boxes)
    kill += 1

if pygame.sprite.collide_rect(player, lava5):
    player.move(-100, -250, boxes)
    kill += 1

if pygame.sprite.collide_rect(player, lava6):
    player.move(-100, -250, boxes)
    kill += 1

if pygame.sprite.collide_rect(player, lava7):
    player.move(-100, -250, boxes)
    kill += 1

Ответы

▲ 0

Всех подробностей не понял, но могу предложить такой вариант:

lava_obj = [lava_1, lava_2, ..., lava_n]  # < Как я понял будут создаваться экземпляры какого-то класса
for current_lava in lava_obj:  # Делаем перебор объектов
    if pygame.sprite.collide_rect(player, current_lava):  # Проверяем столкунлся ли наш текущий lava_obj (current_lava) c игроком
        player.move(-100, -250, boxes)
        kill += 1  # Если это переменная есть сам факт смерти то не инкерментируйте ,а присваиваите ей значение 1

Потом просто обернете в функцию и будет работать.

▲ 0
lava_list = [(lava, 0), (lava1, -100), (lava2, -100), (lava3, -100), (lava4, -100), (lava5, -100), (lava6, -100), (lava7, -100)]

for lava, x_offset in lava_list:
    if pygame.sprite.collide_rect(player, lava):
        player.move(x_offset, -250, boxes)
        kill += 1

Таким образом можно заменить каждое условие, в этом коде будет смещение по оси x в зависимости от лавы