Для реализации игр на Питон мы можем выбрать одну из нескольких библиотек. Можно работать с: Kivy, Tkinter, PyQt или же с любой другой библиотекой, что обеспечивает построение графического интерфейса через Python. Таких библиотек много, но мы возьмем библиотеку PyGame, которая даже своим названием говорит о её предназначении.
PyGame появился в 2000 году. С тех пор на его основе было сделано много интересных проектов. К сожалению, PyGame не универсален и разработка на нём ведется лишь под Андроид устройства.
Настройка проекта
Перед использованием PyGame его нужно установить через терминал. Прописываем команду:
pip install pygame
Для создания базового окна игры, необходимо лишь импортировать библиотеку, инициализировать главный объект, указать размеры, а также название окна и создать основной цикл, что должен вызываться постоянно и тем самым проект будет запущен и работать все время.
import pygame
pygame.init()
win = pygame.display.set_mode((500, 500)) # размеры X и Y
pygame.display.set_caption("Название игры")
while(True):
pass
Сюда же дописываем отслеживание действий пользователя. Если он закроет окно, то мы будем останавливать программу.
import pygame
pygame.init()
win = pygame.display.set_mode((500, 500)) # размеры X и Y
pygame.display.set_caption("Название игры")
run = True
while(run):
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.quit()
Создание платформера
Для создания платформера потребуется написать куда больше строк кода. Мы прикрепляем весь код проекта ниже. В коде есть комментарии для лучшего понимания:
import pygame
# Переменные для установки ширины и высоты окна
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
# Подключение фото для заднего фона
# Здесь лишь создание переменной, вывод заднего фона ниже в коде
bg = pygame.image.load('bg.jpg')
# Класс, описывающий поведение главного игрока
class Player(pygame.sprite.Sprite):
# Изначально игрок смотрит вправо, поэтому эта переменная True
right = True
# Методы
def __init__(self):
# Стандартный конструктор класса
# Нужно ещё вызывать конструктор родительского класса
super().__init__()
# Создаем изображение для игрока
# Изображение находится в этой же папке проекта
self.image = pygame.image.load('idle.png')
# Установите ссылку на изображение прямоугольника
self.rect = self.image.get_rect()
# Задаем вектор скорости игрока
self.change_x = 0
self.change_y = 0
def update(self):
# В этой функции мы передвигаем игрока
# Сперва устанавливаем для него гравитацию
self.calc_grav()
# Передвигаем его на право/лево
# change_x будет меняться позже при нажатии на стрелочки клавиатуры
self.rect.x += self.change_x
# Следим ударяем ли мы какой-то другой объект, платформы, например
block_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False)
# Перебираем все возможные объекты, с которыми могли бы столкнуться
for block in block_hit_list:
# Если мы идем направо,
# устанавливает нашу правую сторону на левой стороне предмета, которого мы ударили
if self.change_x > 0:
self.rect.right = block.rect.left
elif self.change_x 0:
self.rect.bottom = block.rect.top
elif self.change_y self.rect.top = block.rect.bottom
# Останавливаем вертикальное движение
self.change_y = 0
def calc_grav(self):
# Здесь мы вычисляем как быстро объект будет
# падать на землю под действием гравитации
if self.change_y == 0:
self.change_y = 1
else:
self.change_y += .95
# Если уже на земле, то ставим позицию Y как 0
if self.rect.y >= SCREEN_HEIGHT - self.rect.height and self.change_y >= 0:
self.change_y = 0
self.rect.y = SCREEN_HEIGHT - self.rect.height
def jump(self):
# Обработка прыжка
# Нам нужно проверять здесь, контактируем ли мы с чем-либо
# или другими словами, не находимся ли мы в полете.
# Для этого опускаемся на 10 единиц, проверем соприкосновение и далее поднимаемся обратно
self.rect.y += 10
platform_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False)
self.rect.y -= 10
# Если все в порядке, прыгаем вверх
if len(platform_hit_list) > 0 or self.rect.bottom >= SCREEN_HEIGHT:
self.change_y = -16
# Передвижение игрока
def go_left(self):
# Сами функции будут вызваны позже из основного цикла
self.change_x = -9 # Двигаем игрока по Х
if(self.right): # Проверяем куда он смотрит и если что, то переворачиваем его
self.flip()
self.right = False
def go_right(self):
# то же самое, но вправо
self.change_x = 9
if (not self.right):
self.flip()
self.right = True
def stop(self):
# вызываем этот метод, когда не нажимаем на клавиши
self.change_x = 0
def flip(self):
# переворот игрока (зеркальное отражение)
self.image = pygame.transform.flip(self.image, True, False)
# Класс для описания платформы
class Platform(pygame.sprite.Sprite):
def __init__(self, width, height):
# Конструктор платформ
super().__init__()
# Также указываем фото платформы
self.image = pygame.image.load('platform.png')
# Установите ссылку на изображение прямоугольника
self.rect = self.image.get_rect()
# Класс для расстановки платформ на сцене
class Level(object):
def __init__(self, player):
# Создаем группу спрайтов (поместим платформы различные сюда)
self.platform_list = pygame.sprite.Group()
# Ссылка на основного игрока
self.player = player
# Чтобы все рисовалось, то нужно обновлять экран
# При вызове этого метода обновление будет происходить
def update(self):
self.platform_list.update()
# Метод для рисования объектов на сцене
def draw(self, screen):
# Рисуем задний фон
screen.blit(bg, (0, 0))
# Рисуем все платформы из группы спрайтов
self.platform_list.draw(screen)
# Класс, что описывает где будут находится все платформы
# на определенном уровне игры
class Level_01(Level):
def __init__(self, player):
# Вызываем родительский конструктор
Level.__init__(self, player)
# Массив с данными про платформы. Данные в таком формате:
# ширина, высота, x и y позиция
level = [
[210, 32, 500, 500],
[210, 32, 200, 400],
[210, 32, 600, 300],
]
# Перебираем массив и добавляем каждую платформу в группу спрайтов - platform_list
for platform in level:
block = Platform(platform[0], platform[1])
block.rect.x = platform[2]
block.rect.y = platform[3]
block.player = self.player
self.platform_list.add(block)
# Основная функция прогарммы
def main():
# Инициализация
pygame.init()
# Установка высоты и ширины
size = [SCREEN_WIDTH, SCREEN_HEIGHT]
screen = pygame.display.set_mode(size)
# Название игры
pygame.display.set_caption("Платформер")
# Создаем игрока
player = Player()
# Создаем все уровни
level_list = []
level_list.append(Level_01(player))
# Устанавливаем текущий уровень
current_level_no = 0
current_level = level_list[current_level_no]
active_sprite_list = pygame.sprite.Group()
player.level = current_level
player.rect.x = 340
player.rect.y = SCREEN_HEIGHT - player.rect.height
active_sprite_list.add(player)
# Цикл будет до тех пор, пока пользователь не нажмет кнопку закрытия
done = False
# Используется для управления скоростью обновления экрана
clock = pygame.time.Clock()
# Основной цикл программы
while not done:
# Отслеживание действий
for event in pygame.event.get():
if event.type == pygame.QUIT: # Если закрыл программу, то останавливаем цикл
done = True
# Если нажали на стрелки клавиатуры, то двигаем объект
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player.go_left()
if event.key == pygame.K_RIGHT:
player.go_right()
if event.key == pygame.K_UP:
player.jump()
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT and player.change_x event.key == pygame.K_RIGHT and player.change_x > 0:
player.stop()
# Обновляем игрока
active_sprite_list.update()
# Обновляем объекты на сцене
current_level.update()
# Если игрок приблизится к правой стороне, то дальше его не двигаем
if player.rect.right > SCREEN_WIDTH:
player.rect.right = SCREEN_WIDTH
# Если игрок приблизится к левой стороне, то дальше его не двигаем
if player.rect.left
Также для игры вам потребуются картинки игрока и платформы. Вы можете их скачать ниже.
(фото игрока - оригинальный сайт)
(фото платформы - оригинальный сайт)
(фото на задний фон)
Видео на эту тему
Также вы можете просмотреть детальное видео по разработке 2D платформера на Python + PyGame:
Дополнительный курс
На нашем сайте также есть углубленный курс по изучению языка Питон. В ходе огромной программы вы изучите не только язык Питон, но также научитесь создавать веб сайты за счёт веб технологий и фреймворка Джанго. За курс вы изучите массу нового и к концу программы будете уметь работать с языком Питон, создавать на нём полноценные ПК приложения на основе библиотеки Kivy, а также создавать веб сайты на основе библиотеки Джанго.