Оптимизация циклов
мне хотелось бы оптимизировать этот код, чтобы не писать для каждой переменной отдельный цикл, а был бы один цикл(подозреваю, что мне могут помочь вложенные циклы).
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
Ответы (2 шт):
Автор решения: RoJQ
→ Ссылка
Всех подробностей не понял, но могу предложить такой вариант:
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
Потом просто обернете в функцию и будет работать.
Автор решения: Encourage
→ Ссылка
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 в зависимости от лавы