Создаем игру с Pygame и Python
Если вы задумываетесь над созданием собственной игры, но не хотите переходить на другой язык ради карьеры разработчика игр, то для этого есть решение! С помощью модуля Pygame вы можете использовать навыки Python для создания игр, от базовых до очень сложных. В сегодняшней статье вы узнаете, как использовать Pygame, сделав клон игры Asteroids! Для начала создадим главный класс нашей игры, в который входят: обработка пользовательского ввода, логика игры, отрисовка игровых объектов.
Для правильной организации проекта создадим новую директорию и перейдем в нее:
>>> mkdir game_project
>>> cd game_project
Далее создадим виртуальную среду и установим нужную версию pygame:
(my_progect)>>> pip install pygame==2.0.0
В папке game_project создадим файл game.py Далее импортируем модуль pygame для получения доступа ко всем его функциям
import pygame
Следующим шагом создаем класс игры, c конструктором класса где инициализируем pygame, так как это идеальное место для размещения любых методов, необходимых для инициализации Pygame.
class SpaceRocks:
def __init__(self):
# Фактическая инициализация Pygame происходит в _init_pygame().
self._init_pygame()
self.screen = pygame.display.set_mode((800, 600))
Изображения в Pygame представлены поверхностями. Поверхности можно рисовать друг на друге, что позволяет создавать сложные сцены из простых картинок. В каждом проекте Pygame есть одна специальная поверхность. Эта поверхность представляет собой экран и является той, которая в конечном итоге будет показана игрокам. Все остальные поверхности должны быть нарисованы на этой в какой-то момент. В противном случае они не будут показаны. Чтобы создать поверхность отображения, программа использует pygame.display.set_mode(). Единственный аргумент, который вы передаете этому методу, - это размер экрана, представленный кортежем из двух ширина и высота. В этом случае Pygame создаст экран шириной 800 пикселей и высотой 600 пикселей.
# продолжение вышеописанного класса
def main_loop(self):
while True:
self._handle_input()
self._process_game_logic()
self._draw()
def _init_pygame(self):
pygame.init()
pygame.display.set_caption('Космические преключения')
def _handle_input(self):
pass
def _process_game_logic(self):
pass
def _draw(self):
self.screen.fill((0, 0, 255))
pygame.display.flip()
Функция main_loop() - это игровой цикл. Он содержит три шага для каждого кадра: _handle_input содержит обработку входных данных. _process_game_logic содержит игровую логику. _draw содержит чертеж. В методе _init_pygame() происходит одноразовая инициализация Pygame. Метод делает две вещи: Вызывает pygame.init(). Эта единственная строка кода отвечает за настройку удивительных функций Pygame. Каждый раз, когда мы работаем с Pygame, мы должны вызывать pygame.init() в начале нашей программы, чтобы убедиться, что фреймворк будет работать правильно. Следующая строка устанавливает заголовок программы Pygame с помощью pygame.display.set_caption(). В этом случае надписью будет название вашей игры: Космические приключения. Методы _handle_input() и _process_game_logic() обрабатывают действия игрока и задают игровую логику. Пока они пусты, но в следующей статье мы добавим некоторый код.
Метод _draw() уже имеет некоторый код. Он вызывается каждый кадр, чтобы нарисовать содержимое экрана, и делает это в два этапа: заполняет экран цветом с помощью функции screen.fill(). Метод принимает кортеж с тремя значениями, представляющими три базовых цвета: красный, зеленый и синий. Каждое значение цвета колеблется от 0 до 255, представляя его интенсивность. В этом примере кортеж (0, 0, 255) означает, что цвет будет состоять только из синего, без следов красного или зеленого. Далее обновляет содержимое экрана с помощью pygame.display.flip(). Поскольку ваша игра в конечном итоге будет отображать движущиеся объекты, метод будет вызываться каждый кадр, чтобы обновить дисплей. Из-за чего необходимо заполнять экран цветом каждый кадр, так как метод очистит содержимое, сгенерированное во время предыдущего кадра. Теперь наш код хорошо структурирован и имеет методы с описательными именами. В следующий раз, когда нам нужно будет изменить что-то, связанное с графикой, мы будете знать, что нужно использовать _draw(). Чтобы добавить обработку ввода, вы измените функцию _handle_input() и так далее.
Таким образом мы создали класс, который будет отображать основные игровые объекты и отвечать за логику игры. В следующей статье мы применим его и реализуем обработку пользовательского ввода.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.