Космические приключения с Python и Pygame. Обработка столкновений

0

Космические приключения с Python и  Pygame. Обработка столкновений

Мы продолжаем создание игры про «Космические приключения» с Python и Pygame. Очень важной частью этой игры является возможность уничтожения вашего космического корабля в результате столкновения с астероидом. И в сегодняшней статье мы рассмотрим как реализовать данную возможность Вы можете проверить столкновения, используя GameObject.collides_with(), представленную в одной статей. Все, что вам нужно сделать, это вызвать этот метод для каждого астероида.

Отредактируйте метод _process_game_logic() в классе SpaceRocks из файла game.py следующим образом:


def _process_game_logic(self):
    for game_object in self._get_game_objects():
        game_object.move(self.screen)

    if self.spaceship:
        for asteroid in self.asteroids:
            if asteroid.collides_with(self.spaceship):
                self.spaceship = None
                break

Если какой-либо из астероидов сталкивается с космическим кораблем, то космический корабль уничтожается. В этой игре вы представите это, установив для self.spaceship значение None.

Обратите внимание, что в начале цикла также есть проверка для self.spaceship. Это потому, что когда космический корабль уничтожен, нет причин проверять какие-либо столкновения с ним. Кроме того, обнаружение столкновения с объектом None приведет к ошибке.

Теперь, когда космический корабль может иметь значение None, важно обновить _get_game_objects() в классе SpaceRocks, чтобы избежать попыток отрисовать или переместить разрушенный космический корабль:


def _get_game_objects(self):
    game_objects = [*self.asteroids]

    if self.spaceship:
        game_objects.append(self.spaceship)

    return game_objects

То же самое касается обработки ввода:


def _handle_input(self):
    for event in pygame.event.get():
        if event.type == pygame.QUIT or (
            event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE
        ):
            quit()

    is_key_pressed = pygame.key.get_pressed()

    if self.spaceship:
        if is_key_pressed[pygame.K_RIGHT]:
            self.spaceship.rotate(clockwise=True)
        elif is_key_pressed[pygame.K_LEFT]:
            self.spaceship.rotate(clockwise=False)
        if is_key_pressed[pygame.K_UP]:
            self.spaceship.accelerate()

Теперь вы можете запустить свою игру и увидеть, что космический корабль исчезает после столкновения с астероидом:

Космические приключения с Python и  Pygame. Обработка столкновений

Теперь ваш космический корабль может летать и уничтожаться при столкновении с астероидами.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.