Начисление очков за все попадания

We use cookies. Read the Privacy and Cookie Policy

В том виде, в котором написан код, некоторые пришельцы будут пропускаться при подсчете. Например, если две пули попадают в пришельцев во время одного прохода цикла или если вы создадите широкую «пулю» для поражения нескольких пришельцев одновременно, игрок получит очки только за одного подстреленного пришельца. Чтобы устранить этот недостаток, нужно доработать механизм обнаружения коллизий между пулями и пришельцами.

В функции check_bullet_alien_collisions() любая пуля, столкнувшаяся с пришельцем, становится ключом словаря collisions. С каждой пулей связывается значение — список пришельцев, участвующих в коллизии. Переберем словарь collisions и убедимся в том, что очки начисляются за каждого подбитого пришельца:

game_functions.py

def check_bullet_alien_collisions(ai_settings, screen, stats, sb, ship,

aliens, bullets):

...

if collisions:

(1) . . . .for aliens in collisions.values():

. . . . . .stats.score += ai_settings.alien_points * len(aliens)

sb.prep_score()

...

Если словарь collisions был определен, программа перебирает все значения в словаре collisions. Вспомните, что каждое значение представляет собой список пришельцев, в которых попала одна пуля. Стоимость каждого пришельца умножается на количество пришельцев в списке, а результат прибавляется к текущему счету.

Чтобы протестировать эту систему, увеличьте ширину пули до 300 пикселов и убедитесь в том, что игра начисляет очки за каждого пришельца, в которого попала эта большая пуля; затем верните ширину пули к нормальному состоянию.