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



Pdf көрінісі
бет191/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   187   188   189   190   191   192   193   194   ...   334
Байланысты:
Изучаем Python

alien_invasion.py
def run_game():
"""Запуск основного цикла игры."""
while True:
self._check_events()
self.ship.update()

self.bullets.update()
self._update_screen()


Стрельба
263
Вызов 
update()
для группы 

приводит к автоматическому вызову 
update()
для каждого спрайта в группе. Строка 
self.bullets.update()
вызывает 
bullet.
update()
для каждого снаряда, включенного в группу 
bullets
.
Обработка выстрелов
В классе 
AlienInvasion
необходимо внести изменения в метод 
_check_keydown_
events()
, чтобы при нажатии клавиши «пробел» происходил выстрел. Изменять 
_check_keyup_events()
не нужно, потому что при отпускании клавиши ничего не 
происходит. Также необходимо изменить 
_update_screen()
и вывести каждый 
снаряд на экран перед вызовом 
flip()
.
При обработке выстрела придется выполнить довольно значительную работу, для 
которой мы напишем новый метод 
fire_bullet()
:
alien_invasion.py
...
from ship import Ship

from bullet import Bullet
class AlienInvasion:
...
def _check_keydown_events(self, event):
...
elif event.key == pygame.K_q:
sys.exit()

elif event.key == pygame.K_SPACE:
self._fire_bullet()
def _check_keyup_events(self, event):
...
def _fire_bullet(self):
"""Создание нового снаряда и включение его в группу bullets."""

new_bullet = Bullet(self)

self.bullets.add(new_bullet)
def _update_screen(self):
"""Обновляет изображения на экране и отображает новый экран."""
self.screen.fill(self.settings.bg_color)
self.ship.blitme()

for bullet in self.bullets.sprites():
bullet.draw_bullet()
pygame.display.flip()
...
Сначала импортируется класс 
Bullet

. Затем при нажатии клавиши «пробел» вы-
зывается 
_fire_bullet()

. В коде 
_fire_bullet()
мы создаем экземпляр 
Bullet

которому присваивается имя 
new_bullet

. Он включается в группу 
bullets
вызовом метода 
add()

. Метод 
add()
похож на 
append()
, но этот метод написан 
специально для групп Pygame.


264

Достарыңызбен бөлісу:
1   ...   187   188   189   190   191   192   193   194   ...   334




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

    Басты бет