На прошлом занятии мы добавили препятствие в игру и в качестве самостоятельной работы необходимо было добавить второе препятствие самостоятельно. Сейчас мы разберемся как это сделать.
Добавим недостающее препятствие
Сначала определим место для добавления новых свойств нижнего препятствия. Это будет созданный ранее class Pipe и его магический метод __init__. *Почему данный метод называется магическим вы можете узнать на наших курсах в школе программирования для детей КИДКОД. С промо кодом "дзен" вы получите 25% скидку на первый месяц обучения.
Теперь добавим свойства для нижнего препятствия. Обратите внимание, что мы не будем использовать специальный метод переворота изображения так как оно уже находится в нужной нам позиции.
- self.image_bottom - Определяем изображение и уменьшаем его до нужных нам размеров с помощью вызова метода smoothscale.
- self.rect_bottom ... get_rect() - Определяем объект четырехугольника используя импортированное ранее изображение препятствия.
- self.rect_bottom.bottom - Размещаем этот объект внизу графического окна нашей игры.
- self.rect_bottom.right - Прячем препятствие за пределами графического окна.
Добавляем отрисовку нового препятствия в метод draw класса Pipe.
Также добавляем новое препятствие в метод update для его перемещения по экрану.
В этот же метод, где мы проверяем выход препятствия за пределы графического окна, добавляем "Перезагрузку" свойств нового препятствия. Так как наше препятствие располагается снизу экрана, нам необходимо будет указать это еще раз.
Теперь если вы сделали все правильно, то должны будете увидеть два перемещающихся в пространстве препятствия.
Первый способ определить столкновения
Сейчас наши препятствия никак не влияют на игровой процесс, поэтому мы добавим возможность нашей птички с ними столкнуться. Сначала определим вызов метода для проверки столкновений - check_collision в основном цикле игры у объекта bird. В качестве аргумента мы передадим объект pipe, который содержит все свойства отображаемых препятствий.
Переходим в класс Bird и создаем первый способ определить столкновение с препятствием. Для этого нам потребуется проверить 4 различных свойства позиционирования объектов в пространстве.
- pipe.rect_top.left <= self.rect.right - Столкновение по оси-х для верхнего препятствия.
- pipe.rect_top.bottom >= self.rect.top - Столкновение по оси-у для верхнего препятствия.
- pipe.rect_bottom.left <= self.rect.right - Столкновение по оси-х для нижнего препятствия.
- pipe.rect_bottom.top <= self.rect.bottom - Столкновение по оси-у для нижнего препятствия.
Теперь мы можем проверить результат и если птичка столкнется с одним из препятствий вы увидите в стандартном средстве вывода python указанный выше текст.
Второй способ определить столкновения
В модуле pygame у объектов rect есть специальный метод проверки столкновений - colliderect. Вы можете использовать его вместо ранее созданного условия проверки.
Сейчас мы видим как в игре можно проверить столкновения разных объектов. При этом механика последствий еще не реализована. В качестве самостоятельной работы вы можете добавить процесс остановки игры при столкновении с препятствием. На следующем уроке мы разберем как это сделать.
Напоминаем, что у нас есть бесплатные пробные занятия где вы сможете попробовать создать свои первые осмысленные программы вместе с преподавателем, который расскажет вам все в подробных деталях. Переходите на сайт школы программирования для детей КИДКОД и записывайтесь. Ждем вас на наших уроках!