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

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

Космические приключения с 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. Обработка столкновений

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

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий