М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет226/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   222   223   224   225   226   227   228   229   ...   334
Байланысты:
Изучаем Python


Глава 14 • Ведение счета
Счет будет обновляться за каждого сбитого пришельца в 
_check_bullet_alien_
collisions()
:
alien_invasion.py
def _check_bullet_alien_collisions(self):
"""Обработка коллизий снарядов с пришельцами."""
# Удаление снарядов и пришельцев, участвующих в коллизиях.
collisions = pygame.sprite.groupcollide(
self.bullets, self.aliens, True, True)
if collisions:
self.stats.score += self.settings.alien_points
self.sb.prep_score()
...
При попадании снаряда в пришельца Pygame возвращает словарь 
collisions

Программа проверяет, существует ли словарь, и если существует, стоимость при-
шельца добавляется к счету. Затем вызов 
prep_score()
создает новое изображение 
для обновленного счета.
Теперь во время игры вы сможете набирать очки!
Сброс счета
В текущей версии счет обновляется только после попадания в пришельца; в ос-
новном такой подход работает нормально. Но старый счет выводится и после по-
падания в первого пришельца в новой игре.
Проблема решается инициализацией счета при создании новой игры:
alien_invasion.py
def _check_play_button(self, mouse_pos):
...
if button_clicked and not self.stats.game_active:
...
# сброс игровой статистики.
self.stats.reset_stats()
self.stats.game_active = True
self.sb.prep_score()
...
Метод 
prep_score()
вызывается при сбросе игровой статистики в начале новой 
игры. Счет, выводимый на экран, обнуляется.
Начисление очков за все попадания
В том виде, в каком написан код, некоторые пришельцы будут пропускаться при 
подсчете. Например, если два снаряда попадают в пришельцев во время одного 
прохода цикла или если вы создадите широкий «снаряд» для поражения несколь-


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


Достарыңызбен бөлісу:
1   ...   222   223   224   225   226   227   228   229   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет