Если вы задумываетесь над созданием собственной игры, но не хотите переходить на другой язык ради карьеры разработчика игр, то для этого есть решение! С помощью модуля Pygame вы можете использовать навыки Python для создания игр, от базовых до очень сложных. В сегодняшней статье вы узнаете, как использовать Pygame ,...
Если вы задумываетесь над созданием собственной игры, но не хотите переходить на другой язык ради карьеры разработчика игр, то для этого есть решение! С помощью модуля 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() и так далее.
Таким образом мы создали класс, который будет отображать основные игровые объекты и отвечать за логику игры. В следующей статье мы применим его и реализуем обработку пользовательского ввода.
