🎮 Все игры 🚀 Космос
1 2 3 4 5
Урок 4

Пуля сбивает врага

Что ты увидишь Лазер долетел до пришельца — оба исчезают, а в углу растут очки. Наконец-то можно по-настоящему стрелять! Файл: step4_hits.py
⬇️ Скачать код урока

🆕 Новое: проверяем каждую пулю с каждым врагом

У нас два списка. Чтобы понять, кто в кого попал, надо сравнить каждую пулю с каждым врагом. Это цикл в цикле (двойной for): берём пулю → пробегаем всех врагов → если пересеклись, убираем обоих.

пуля 1 → враг A? враг B? враг C? пуля 2 → враг A? враг B? враг C? пуля 3 → враг A? враг B? враг C?

📝 Что добавилось (попадания и очки)

font = pygame.font.SysFont(None, 36)
score = 0

# --- в игровом цикле, после движения пуль и врагов ---

    # ПОПАДАНИЯ: для каждой пули проверяем каждого врага
    for b in bullets[:]:
        for e in enemies[:]:
            if b.colliderect(e):
                bullets.remove(b)
                enemies.remove(e)
                score += 1
                break          # пуля исчезла — дальше врагов не смотрим

    # счёт в углу
    hud = font.render(f"Очки: {score}", True, WHITE)
    screen.blit(hud, (12, 8))

🔍 Мелочи, которые важно понять

colliderect — уже знакомый

Тот же приём, что в «Ловком коте» и «Арканоиде»: два прямоугольника пересеклись или нет. b.colliderect(e) возвращает True, если пуля задела врага.

Зачем break после попадания?

Как только пуля сбила врага, мы её удалили — больше сравнивать её не с кем. break выходит из внутреннего цикла (по врагам) и переходит к следующей пуле. Без него можно случайно «убить» одной пулей двух врагов и получить ошибку.

Снова идём по копиям

bullets[:] и enemies[:] — копии, потому что внутри мы из обоих списков удаляем. Тот же приём, что и в прошлых уроках.

⚠️ Частая ошибка Если убрать break и не идти по копиям — Python начнёт спотыкаться: «list index out of range» или враги будут исчезать через одного. Попробуй сломать специально и увидишь баг своими глазами.
🎮 Попробуй сам 1. Давай за врага больше очков: score += 10.
2. Сделай врагов крупнее ENEMY_SIZE = 44 — попадать легче.
3. Покажи рядом число врагов на экране: len(enemies).
← НазадУрок 3 — Враги