Глава 21 · Проект: космический шутер

Стреляем

Пробел создаёт пулю у носа корабля — она улетает вверх, пока не покинет экран.

Пули — тоже список Rect, появляющийся у носа корабля при нажатии пробела и улетающий вверх на каждом кадре:

strelba.py
PULYA_SHIRINA, PULYA_VYSOTA = 4, 12
PULYA_SKOROST = 9

puli = []

def vystrelit():
    pulya = pygame.Rect(
        korabl.centerx - PULYA_SHIRINA // 2,
        korabl.top,
        PULYA_SHIRINA,
        PULYA_VYSOTA,
    )
    puli.append(pulya)

# в обработке событий:
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
    vystrelit()

# в обновлении кадра:
for pulya in puli:
    pulya.y -= PULYA_SKOROST
puli = [p for p in puli if p.bottom > 0]   # убираем улетевшие за экран
Список через генератор списков — чистка «мусора»
[p for p in puli if p.bottom > 0] (генератор списков из главы 11) оставляет только те пули, что ещё видны на экране — без этой строки список пуль рос бы бесконечно, замедляя игру всё сильнее.
Практика в Jupyter Notebook
21-04-strelba.ipynb · стрельба и движение пуль
Открыть ноутбук →