Перейти к содержимому

Как создать игру на пайтон для начинающих

  • автор:

Создание игры на Python

Игра на Pygame с нуля / Урок #1 – Разработка игр на Python для начинающих

Игра на Pygame с нуля / Урок #1 – Разработка игр на Python для начинающих

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

Видеоурок

Полезные ссылки:

  1. Видео на тему работы компьютера ;
  2. Курс по языку Python ;
  3. Официальный сайт Python ;
  4. Программа PyCharm ;
  5. Установка PyGame .

Информация про Pygame

Сама библиотека впервые опубликована в 2000 году. Задумка библиотеки состояла в том, чтобы дать возможность любому разработчику построить свою игру при использовании языка программирования Python.

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

Приложения написанные на PyGame могут спокойно работать на Андроид и на ПК. Поддержки iOS здесь нет по причине закрытости самой платформы iOS для сторонних разработчиков. Вы можете прописать код один раз, создать игру и позже запускать ее как на компьютере, так и на Android устройствах.

Как делают игры?

Поскольку в курсе мы будем разрабатывать игры, то логично сперва понять как вообще работают игры на ПК, телефонах или других устройствах.

Ранее мы уже делали видео с детальным разбором того как работает компьютер и каким образом он позволяет отобразить изображение на экран, а впоследствии видео и саму игру. Если вас интересует более детальный разбор, то можете посмотреть данное видео:

Для того чтобы понять что такое игра — нужно понять из чего она состоит. Классическая 2Д игра состоит из множества изображений. Например: основной игрок, задний фон, враги и тому прочее. Если вы начнете динамично менять эти картинки, то получите анимацию, если же вы начнете их двигать в разные координаты, то получите передвижение. То есть в базовом понимании игра состоит из картинок, которые либо сменяются, либо передвигаются.

Также к картинкам добавляются обработчики событий. Тем самым вы можете нажать на картинку, навести на нее мышкой или сделать какое-то другое действие. Отследив действие вы можете выполнить любой функционал при взаимодействии пользователя с объектом в игре.

Это и есть базовое описании процесса отображения игр компьютером.

На что способен Pygame?

Pygame позволяет строить игры разного жанра с разным набором функций. Главное что делает библиотека – позволяет вам отобразить изображение на экране вашего ПК. Отобразив какое-либо изображение вы можете начать двигать его по координатам и вот вы уже получите эффект движения в игре. Или же вы можете начать динамично менять изображения друг за другом и вы получите эффект анимации.

Поэтому основная функция – она позволяет удобно и быстро показать изображение на экране, а далее позволяет выполнять действия с этим изображением.

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

Примеры игр

Начать изучать какую-то библиотеку без понимая того что вы сможете на ее основе создать – дело не мотивирующее. Поэтому сперва предлагаем посмотреть на примеры тех игр, что были разработаны на основе языка Питон и библиотеки Pygame.

Такие проекты не могут похвастаться графикой и функциями как в играх класса ААА, но несмотря на это они могут быть интересны с точки зрения своего функционала и действий в игре. Одной из таковых игр является Historical Wargame Simulator. Это игра в жанре стратегии, где у вас набор из множества функций и действий. Смотря на эту игру даже сложно осознать что она создана только за счет языка Python.

Таковых проектов очень много. Все они в основе своей представляют из себя простые игры.

Приведем пример нескольких:

  • игра TRUNKMAN с реально крутой графикой и интересной задумкой;
  • игра Necrostation выполненная в духе классических олд скульных игр с кучей анимацией;
  • игра Gleamshroom, где вам предстоит играть за гриб. В игре нужно преодолевать разные препятствия и в конце добраться до конечной точки;
  • игра Planyt – классический платформер со множеством анимаций, красивым дизайном и интересной задумкой;
  • игра Explon’t, которая смахивает на жанр платформера. В ней также много графики, красивый дизайн, интересный функционал и насыщенная картинка.

И вот подобных проектов созданных на Pygame очень и очень много. Многие из них представлены на официальном сайте самой библиотеки Pygame, так что можете заценить все эти игры там.

План курса

За курс мы с вами с нуля приступим к изучению библиотеки Pygame. Мы изучим весь процесс построения игр: от пустого экрана и до создания игры с графикой, анимациями, дизайном, звуками и механикой.

По итогу вы разработаете небольшую мобильную игру, где у вас будет основной игрок, враги и множество игровых действий.

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

Дополнительные курсы

На нашем сайте вы найдете дополнительные курсы по теме языка Python. Если вас интересует полное изучения языка и его фреймворков, то рекомендуем вашему вниманию программу обучения: « Python разработчик ».

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

Задание к уроку

Библиотека PyGame

На что способна библиотека PyGame? Какие функции она предоставляет и что вы можете получить при её использовании?

Посмотреть ответ

Библиотека PyGame дает возможность вам создавать игры как под ПК, так и под Андроид.

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

Большое задание по курсу

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

Создание игр на Python 3 и Pygame: Часть 1

Многие разработчики приходят в разработку ПО, потому что хотят создавать игры. Не все могут стать профессиональными разработчиками игр, но любой может создавать собственные игры из интереса (а может быть, и с выгодой). В этом туториале, состоящем из пяти частей, я расскажу вам, как создавать двухмерные однопользовательские игры с помощью Python 3 и замечательного фреймворка PyGame.

Мы создадим версию классической игры Breakout. Освоив этот туториал, вы будете чётко понимать, что необходимо для создания игры, познакомитесь с возможностями Pygame и напишете собственный пример игры.

Мы реализуем следующие функции и возможности:

  • простые стандартные GameObject и TextObject
  • простой стандартный Game object
  • простая стандартная кнопка
  • файл конфигурации
  • обработка событий клавиатуры и мыши
  • кирпичи, ракетка и мяч
  • управление движением ракетки
  • обработка коллизий мяча с объектами игры
  • фоновое изображение
  • звуковые эффекты
  • расширяемая система спецэффектов

Готовый исходный код выложен здесь.

Краткое введение в программирование игр

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

Основной цикл

Основной цикл (main loop) игры выполняется и обновляет экран через фиксированные интервалы времени. Они называются частотой кадров и определяют плавность перемещения. Обычно игры обновляют экран 30-60 раз в секунду. Если частота будет меньше, то покажется, что объекты на экране дёргаются.

Внутри основного цикла есть три основных операции: обработка событий, обновление состояния игры и отрисовка текущего состояния на экране.

Обработка событий

События в игре состоят из всего, что происходит за пределами управления кода игры, но относится к выполнению игры. Например, если в Breakout игрок нажимает клавишу «стрелка влево», то игре нужно переместить ракетку влево. Стандартными событиями являются нажатия (и отжатия) клавиш, движение мыши, нажатия кнопок мыши (особенно в меню) и события таймера (например, действие спецэффекта может длиться 10 секунд).

Обновление состояния

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

Существует также вспомогательное состояние, позволяющее управлять игрой:

  • Отображается ли сейчас меню?
  • Закончена ли игра?
  • Победил ли игрок?

Отрисовка

Игре нужно отображать своё состояние на экране, в том числе отрисовывать геометрические фигуры, изображения и текст.

Игровая физика

В большинстве игр симулируется физическое окружение. В Breakout мяч отскакивает от объектов и имеет очень приблизительную систему физики твёрдого тела (если это можно так назвать).

В более сложных играх могут использоваться более изощрённые и реалистичные физические системы (особенно в 3D-играх). Стоит также отметить, что в некоторых играх, например, в карточных, физики почти нет, и это совершенно нормально.

ИИ (искусственный интеллект)

Во многих играх мы сражаемся с компьютерными противниками, или в них есть враги, пытающиеся нас убить. Часто они ведут себя в игровом мире так, как будто обладают разумом.

Например, враги преследуют игрока и знают о его местоположении. В Breakout нет никакого ИИ. Игрок сражается с холодными и твёрдыми кирпичами. Однако ИИ в играх часто очень прост и всего лишь следует простым (или сложным) правилам, обеспечивающим псевдоразумные результаты.

Воспроизведение звука

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

Фоновая музыка — это просто музыка, постоянно играющая на фоне. В некоторых играх она не используется, а в некоторых меняется на каждом уровне.

Жизни, очки и уровни

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

Знакомство с Pygame

Прежде чем приступить к реализации игры, давайте немного узнаем о Pygame, который возьмёт на себя большую часть работы.

Что такое Pygame?

Pygame — это фреймворк языка Python для программирования игр. Он создан поверх SDL и обладает всем необходимым:

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

Установка Pygame

Введите pip install pygame , чтобы установить фреймворк. Если вам нужно что-то ещё, то следуйте инструкциям из раздела Getting Started в Wiki проекта. Если у вас, как и у меня, macOS Sierra, то могут возникнуть проблемы. Мне удалось установить Pygame без сложностей, и код работает отлично, но окно игры никогда не появляется.

Это станет серьёзным препятствием при запуске игры. В конце концов мне пришлось запускать её в Windows внутри VirtualBox VM. Надеюсь, ко времени прочтения этой статьи проблема будет решена.

Архитектура игры

Играм нужно управлять кучей информации и выполнять почти одинаковые операции со множеством объектов. Breakout — это небольшая игра, однако попытка управлять всем в одном файле может оказаться слишком утомительной. Поэтому я решил создать файловую структуру и архитектуру, которая подойдёт и для гораздо более крупных игр.

Структура папок и файлов

├── Pipfile ├── Pipfile.lock ├── README.md ├── ball.py ├── breakout.py ├── brick.py ├── button.py ├── colors.py ├── config.py ├── game.py ├── game_object.py ├── images │ └── background.jpg ├── paddle.py ├── sound_effects │ ├── brick_hit.wav │ ├── effect_done.wav │ ├── level_complete.wav │ └── paddle_hit.wav └── text_object.py

Pipfile и Pipfile.lock — это современный способ управления зависимостями в Python. Папка images содержит изображения, используемые игрой (в нашей версии будет только фоновое изображение), а в папке sound_effects directory лежат короткие звуковые клипы, используемые (как можно догадаться) в качестве звуковых эффектов.

Файлы ball.py, paddle.py и brick.py содержат код, относящийся к каждому из этих объектов Breakout. Подробнее я рассмотрю их в следующих частях туториала. Файл text_object.py содержит код отображения текста на экране, а в файле background.py содержится игровая логика Breakout.

Однако существует несколько модулей, создающих произвольный «скелет» общего назначения. Определённые в них классы можно будет использовать в других играх на основе Pygame.

Класс GameObject

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

from pygame.rect import Rect class GameObject: def __init__(self, x, y, w, h, speed=(0,0)): self.bounds = Rect(x, y, w, h) self.speed = speed @property def left(self): return self.bounds.left @property def right(self): return self.bounds.right @property def top(self): return self.bounds.top @property def bottom(self): return self.bounds.bottom @property def width(self): return self.bounds.width @property def height(self): return self.bounds.height @property def center(self): return self.bounds.center @property def centerx(self): return self.bounds.centerx @property def centery(self): return self.bounds.centery def draw(self, surface): pass def move(self, dx, dy): self.bounds = self.bounds.move(dx, dy) def update(self): if self.speed == [0, 0]: return self.move(*self.speed)

GameObject предназначен для того, чтобы быть базовым классом для других объектов. Он непосредственно раскрывает множество свойств его прямоугольника self.bounds, а в своём методе update() он перемещает объект в соответствии с его текущей скоростью. Он ничего не делает в своём методе draw() , который должен быть переопределён подклассами.

Класс Game

Класс Game — это ядро игры. Он выполняется в основном цикле. В нём есть множество полезных возможностей. Давайте разберём его метод за методом.

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

Элемент self.objects хранит все игровые объекты, которые должны рендериться и обновляться. Различные обработчики управляют списками функций-обработчиков, которые должны выполняться при определённых событиях.

import pygame import sys from collections import defaultdict class Game: def __init__(self, caption, width, height, back_image_filename, frame_rate): self.background_image = \ pygame.image.load(back_image_filename) self.frame_rate = frame_rate self.game_over = False self.objects = [] pygame.mixer.pre_init(44100, 16, 2, 4096) pygame.init() pygame.font.init() self.surface = pygame.display.set_mode((width, height)) pygame.display.set_caption(caption) self.clock = pygame.time.Clock() self.keydown_handlers = defaultdict(list) self.keyup_handlers = defaultdict(list) self.mouse_handlers = []

Методы update() и draw() очень просты. Они обходят все управляемые игровые объекты и вызывают соответствующие им методы. Если два объекта накладываются друг на друга на экране, то порядок списка объектов определяет, какой из них будет рендериться первым, а остальные будут частично или полностью его перекрывать.

 def update(self): for o in self.objects: o.update() def draw(self): for o in self.objects: o.draw(self.surface)

Метод handle_events() слушает события, генерируемые Pygame, такие как события клавиш и мыши. Для каждого события он вызывает все функции-обработчики, которые должны обрабатывать события соответствующих типов.

 def handle_events(self): for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: for handler in self.keydown_handlers[event.key]: handler(event.key) elif event.type == pygame.KEYUP: for handler in self.keydown_handlers[event.key]: handler(event.key) elif event.type in (pygame.MOUSEBUTTONDOWN, pygame.MOUSEBUTTONUP, pygame.MOUSEMOTION): for handler in self.mouse_handlers: handler(event.type, event.pos)

Наконец, метод run() выполняет основной цикл. Он выполняется до тех пор, пока элемент game_over не принимает значение True. В каждой итерации он рендерит фоновое изображение и вызывает по порядку методы handle_events() , update() и draw() .

Затем он обновляет экран, то есть записывает на физический дисплей всё содержимое, которое было отрендерено на текущей итерации. И последнее, но не менее важное — он вызывает метод clock.tick() для управления тем, когда будет вызвана следующая итерация.

 def run(self): while not self.game_over: self.surface.blit(self.background_image, (0, 0)) self.handle_events() self.update() self.draw() pygame.display.update() self.clock.tick(self.frame_rate)

Заключение

В этой части мы изучили основы программирования игр и все компоненты, участвующие в создании игр. Также мы рассмотрели сам Pygame и узнали, как его установить. Наконец, мы погрузились в архитектуру игры и изучили структуру папок, классы GameObject и Game.

Во второй части мы рассмотрим класс TextObject , используемый для рендеринга текста на экране. Мы создадим основное окно, в том числе и фоновое изображение, а затем узнаем, как отрисовывать объекты (мяч и ракетку).

Как сделать игру «Змейка» на Python

Помните аркадную игру «Змейка», в которую когда-то играли на неубиваемой нокии? Оказывается, что написать классическую «змейку» сможет каждый новичок. О том, как сделать змейку на Python и накормить ее яблоками, расскажет Настя Мартынова — веб-писатель REG.RU.

Змейка (Snake) — это игра, созданная Танели Арманто в 1997 году специально для телефона Nokia. Змейка стала переломным моментом в развитии мобильного гейминга и завоевала сердца миллионов людей. Несмотря на свою примитивность, даже спустя 25 лет эта игра остается популярной.

Хоть Танели Арманто и считается создателем змейки, идея игры ему не принадлежит. Первый вариант змейки появился аж в 1976 году и назывался Blockade. После были созданы десятки клонов этой игры с разными названиями. Арманто при создании игры вдохновился одним из таких клонов, который был установлен на его Apple Macintosh. А мы вдохновились Танели Арманто и решили рассказать, как сделать игру змейка самостоятельно! С этим справятся даже те, кто только недавно начал изучать программирование.

Для создания змейки можно использовать разные языки программирования. Мы будем использовать… питон ��! Язык программирования Python универсален: он подходит как для решения повседневных задач, так и для создания простых игр.

Змейку на Python можно написать несколькими способами. Первый — при помощи библиотеки Python PyGame, которую используют для создания игр. Второй — с помощью встроенной библиотеки Turtle. В статье мы опишем второй способ.

Помимо Turtle, мы будем использовать два других модуля:

  1. Time — для добавления задержки в выполнении программы.
  2. Random — для генерации случайного числа/цвета/формы.

Какие инструменты нам понадобятся:

  • редактор исходного кода на ваш выбор. Можно воспользоваться редактором VSCode или средой разработки PyCharm;
  • установленный Python 3.

Как работает игра «Змейка»

Игрок управляет змейкой при помощи кнопок направления — вверх, вниз, влево, вправо. Ползая, змейка должна собирать еду, за которую начисляются очки. Цель игры — набрать как можно больше очков. Игра заканчивается, если змейка врезается в стену или в себя.

Для написания игры мы проделаем следующие шаги:

  • импортируем модули в программу,
  • создадим экран игры с помощью модуля Turtle,
  • зададим кнопки направления движения змеи,
  • реализуем игровой процесс.

Прежде всего создайте файл snakegame.py в вашем редакторе кода. А затем приступайте к созданию змейки по нашей инструкции. ��

Импортируем модули

В этой части кода мы импортируем 3 модуля — turtle, time и random. Помимо этого, мы зададим значения по умолчанию:

  • начальный счет — score,
  • наибольший счет — high score,
  • время задержки — delay.

Добавим в Python строки кода:

Создаём «Змейку» — первую игру на Python и Pygame

Учимся программировать через разработку игр. Сегодня напишем знакомую всем «Змейку» — вспомним правила игры и реализуем их на Python.

Иллюстрация: Оля Ежак для Skillbox Media

Антон Яценко

Антон Яценко
Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.

Pygame — популярная библиотека для создания игр под различные устройства на Windows, macOS, Linux или Android. Она помогает разработчику не только описать геймплей, но и работать с клавиатурой, мышью, акселерометром, звуком и видео.

Первая версия Pygame была представлена Питом Шиннерсом в октябре 2000 года. За 22 года вокруг библиотеки сложилось большое комьюнити, а о работе с ней написано несколько десятков книг. Последняя стабильная версия на июль 2022 года — 2.1.2.

Давайте разберёмся в том, как устроена Pygame, и напишем свою первую игру — классическую «Змейку» на Python, которую студенты часто берут для курсовой работы по программированию.

Устанавливаем Pygame и разбираемся

Pygame — не самостоятельная библиотека. На самом деле это обёртка для библиотеки SDL, Simple DirectMedia Layer. Именно SDL позволяет задействовать любые внешние устройства — например, мышь или клавиатуру. А Pygame делает работу с ними удобной для Python-разработчика.

Установить Pygame просто. Для этого воспользуемся терминалом или командной строкой и командой pip:

Теперь игровое окно не закрывается само по себе. Однако и закрыть его мы тоже не сможем — если нажать на кнопку «Выход», ничего не произойдёт. Исправляем это с помощью кода: добавляем событие QUIT, закрывающее окно.

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

Шаг 3

Описываем движения змейки

Управлять перемещением змейки можно с помощью специального класса Pygame KEYDOWN. Класс позволяет использовать четыре стандартных события, получая их с клавиавтуры: K_UP, K_DOWN, K_LEFT и K_RIGHT — они соответствуют движениям змейки вверх, вниз, влево и вправо. Срабатывание любого события из класса KEYDOWN приводит к изменению положения змейки. Зададим шаг этого движения в 10 пикселей.

Кроме того, мы должны создать две переменные для хранения значений координат первой клетки нашей змейки по осям x и y. Назовём их x1_change и y1_change.

Шаг 4

Учитываем препятствия — границы игрового поля

Если змейка попадает на границу экрана, то игрок терпит поражение, а игра заканчивается. Чтобы закодить это правило, можно воспользоваться оператором if, который определяет координаты x и y для змейки и анализирует, выходят ли они за границы игрового поля. Добавим необходимый код.

Шаг 5

Добавляем еду для змейки

Теперь добавим «еду». Используем библиотеку random, чтобы она появлялась в случайном месте на игровом поле. Когда наша змейка будет проходить через еду, то её длина будет увеличиваться. Это мы добавим на следующем шаге. Кроме того, дадим возможность игроку выйти из игры или начать игру заново после проигрыша.

А если выполнить условие для завершения игры, то появится сообщение с предложением выйти из игры или начать её заново:

Шаг 6

Увеличиваем длину змейки

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

Шаг 7

Добавляем отображение счёта

Добавим отображение счёта текущей игры. Для этого создадим функцию Your_score. Она будет отображать длину змейки, вычитая из неё 1 (ведь 1 — это начальный размер змейки, и это не является достижением игрока).

Можно считать, что наша работа над «Змейкой» закончена. Мы полностью реализовали геймплей, который запланировали на старте работы.

Итоговый код

Наш код полностью и без комментариев:

import pygame import time import random pygame.init() white = (255, 255, 255) yellow = (255, 255, 102) black = (0, 0, 0) red = (213, 50, 80) green = (0, 255, 0) blue = (50, 153, 213) dis_width = 800 dis_height = 600 dis = pygame.display.set_mode((dis_width, dis_height)) pygame.display.set_caption('Змейка от Skillbox') clock = pygame.time.Clock() snake_block = 10 snake_speed = 15 font_style = pygame.font.SysFont("bahnschrift", 25) score_font = pygame.font.SysFont("comicsansms", 35) def Your_score(score): value = score_font.render("Ваш счёт: " + str(score), True, yellow) dis.blit(value, [0, 0]) def our_snake(snake_block, snake_list): for x in snake_list: pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block]) def message(msg, color): mesg = font_style.render(msg, True, color) dis.blit(mesg, [dis_width / 6, dis_height / 3]) def gameLoop(): game_over = False game_close = False x1 = dis_width / 2 y1 = dis_height / 2 x1_change = 0 y1_change = 0 snake_List = [] Length_of_snake = 1 foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0 foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0 while not game_over: while game_close == True: dis.fill(blue) message("Вы проиграли! Нажмите Q для выхода или C для повторной игры", red) Your_score(Length_of_snake - 1) pygame.display.update() for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: game_over = True game_close = False if event.key == pygame.K_c: gameLoop() for event in pygame.event.get(): if event.type == pygame.QUIT: game_over = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: x1_change = -snake_block y1_change = 0 elif event.key == pygame.K_RIGHT: x1_change = snake_block y1_change = 0 elif event.key == pygame.K_UP: y1_change = -snake_block x1_change = 0 elif event.key == pygame.K_DOWN: y1_change = snake_block x1_change = 0 if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0: game_close = True x1 += x1_change y1 += y1_change dis.fill(blue) pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block]) snake_Head = [] snake_Head.append(x1) snake_Head.append(y1) snake_List.append(snake_Head) if len(snake_List) > Length_of_snake: del snake_List[0] for x in snake_List[:-1]: if x == snake_Head: game_close = True our_snake(snake_block, snake_List) Your_score(Length_of_snake - 1) pygame.display.update() if x1 == foodx and y1 == foody: foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0 foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0 Length_of_snake += 1 clock.tick(snake_speed) pygame.quit() quit() gameLoop()

Что дальше?

Узнать об особенностях работы с Pygame и возможностях библиотеки можно в официальной документации. Углубиться в разработку и попробовать другие игры можно благодаря специализированным книгам:

  • «Учим Python, делая крутые игры» Эла Свейгарта;
  • «Beginning Game Development with Python and Pygame: From Novice to Professional» Уилла Макгугана;
  • «Program Arcade Games: With Python and Pygame» Пола Винсента Крэйвена.

Больше интересного про код в нашем телеграм-канале. Подписывайтесь!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Luxury Car Rental in Miami | Reserve a Premium Vehicle with RealCar