Menu
CoddyTech

Патрульный корабль

Часть раздела Спрайты и изображения путешествия по Pygame на Coddy. Урок 29 из 36.

Пора создать целую игру: Star Patrol. Волны вражеских кораблей летят сверху вниз. Твой корабль патрулирует нижнюю часть окна, перемещаясь влево и вправо и стреляя лазерами вверх. Уничтожь каждую волну, чтобы победить; если пропустить трёх врагов или столкнуться с ними, игра закончится.

Каждый объект в игре будет спрайтом: игрок, его лазеры, враги и их взрывы. Сначала создадим игрока, как в главе 4:

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = ship_image
        self.rect = self.image.get_rect(midbottom=(320, 470))

Загрузи ship_image один раз после создания окна. Метод update перемещает Rect с помощью клавиш со стрелками и удерживает его внутри окна. Главный цикл вызывает player.update() и рисует корабль.

В этой главе мы будем шаг за шагом расширять ту же программу, поэтому сохраняй имена, которые указаны в заданиях: проверки находят по ним части игры.

challenge icon

Задание

Средне
  1. Загрузите assets/images/ship.png в ship_image.
  2. Напишите class Player(pygame.sprite.Sprite): изображение ship_image, Rect, нижняя середина которого находится в точке (320, 470), и метод update, который перемещает его на 6 пикселей за кадр с помощью клавиш Left и Right и ограничивает его перемещение окном.
  3. Создайте player = Player(); каждый кадр вызывайте player.update() и выполняйте blit player.image в точке player.rect после заливки.

Попробуйте сами

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Star Patrol")
clock = pygame.time.Clock()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((12, 14, 30))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Все уроки раздела Спрайты и изображения

Потренируйтесь самостоятельно: Песочница Pygame