Pygame: Создаем Space Invaders на Python (Урок 1)

Урок посвящен созданию простой игры на Python с использованием библиотеки Pygame. Разработаем фундамент для будущей игры, вдохновлённой классической аркадой Space Invaders.

Планирование игры

В качестве первого проекта воссоздадим Space Invaders (1978). Это хороший выбор для начинающих разработчиков игр на Python, подобный «Hello, world!» в игровой разработке.

Игрок управляет лазерной пушкой, уничтожая ряды инопланетян. Пушка перемещается горизонтально внизу экрана. Цель – уничтожить все волны пришельцев. Новый флот пришельцев появляется после уничтожения предыдущего; скорость движения пришельцев увеличивается с каждой волной. При столкновении пришельцев с пушкой игрок теряет жизнь. За каждого уничтоженного пришельца начисляются очки. В рамках данного урока реализуем базовую логику игры.

Установка Pygame

Установите библиотеку Pygame с помощью pip, менеджера пакетов Python:

pip install pygame

Это установит Pygame версии 2.0.1 или выше.

Создание проекта

Создайте пустой проект в PyCharm (или любой другой IDE). Для хранения игровых ресурсов (изображения, звуки и т.д.) создайте папку assets.

Основной код игры

Создайте файл space_invaders.py. Функция game_init инициализирует игру и создаёт окно:

import pygame
import sys

def game_init():
    pygame.init()
    screen = pygame.display.set_mode((1200, 800))
    pygame.display.set_caption("Космические защитники")
    background_color = (0, 0, 0) # Черный цвет
    return screen, background_color

Функция game_init инициализирует Pygame, создаёт игровое окно размером 1200×800 пикселей с заголовком «Космические защитники» и устанавливает чёрный цвет фона.

Основной цикл игры обрабатывает события и обновляет экран:

def main():
    screen, background_color = game_init()

    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
        screen.fill(background_color)
        pygame.display.flip()
    pygame.quit()
    sys.exit()

if __name__ == "__main__":
    main()

Цикл обрабатывает события (включая закрытие окна), заполняет экран фоновым цветом и обновляет отображение.

Добавление лазерной пушки

Создайте файл gun.py для логики пушки. Для изображения пушки используйте пиксель-арт (рекомендуется использовать прозрачный фон). Сохраните изображение в папку assets/images.

Код файла gun.py:

import pygame

class Gun:
    def __init__(self, screen):
        self.screen = screen
        self.image = pygame.image.load('assets/images/gun.png')  # Замените на путь к вашему изображению
        self.rect = self.image.get_rect()
        self.rect.centerx = self.screen.get_rect().centerx
        self.rect.bottom = self.screen.get_rect().bottom

    def output(self):
        self.screen.blit(self.image, self.rect)

Класс Gun загружает изображение пушки, определяет её положение (по центру внизу экрана) и предоставляет метод output для отрисовки на экране.

Импортируем класс Gun в основной файл и используем его для отрисовки пушки в главном цикле:

import pygame
import sys
from gun import Gun # Импорт класса Gun

# ... (функция game_init остаётся без изменений) ...

def main():
    screen, background_color = game_init()
    gun = Gun(screen) # Создание объекта пушки

    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
        screen.fill(background_color)
        gun.output() # Отрисовка пушки
        pygame.display.flip()
    pygame.quit()
    sys.exit()

if __name__ == "__main__":
    main()

Теперь при запуске игры отображается чёрное окно с лазерной пушкой внизу.

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

Что будем искать? Например,программа