1 added
1 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>План по разработке игры</a></li>
1
<ul><li><a>План по разработке игры</a></li>
2
<li><a>Способы разработки</a><ul><li><a>Unreal Engine</a></li>
2
<li><a>Способы разработки</a><ul><li><a>Unreal Engine</a></li>
3
<li><a>Unity</a></li>
3
<li><a>Unity</a></li>
4
</ul></li>
4
</ul></li>
5
<li><a>Разработки через библиотеки Python - лучшие библиотеки</a><ul><li><a>Adventure lib</a></li>
5
<li><a>Разработки через библиотеки Python - лучшие библиотеки</a><ul><li><a>Adventure lib</a></li>
6
<li><a>Ren’Py</a></li>
6
<li><a>Ren’Py</a></li>
7
<li><a>Panda 3D</a></li>
7
<li><a>Panda 3D</a></li>
8
<li><a>PyCharm</a></li>
8
<li><a>PyCharm</a></li>
9
</ul></li>
9
</ul></li>
10
<li><a>PyGame</a><ul><li><a>Области использования</a></li>
10
<li><a>PyGame</a><ul><li><a>Области использования</a></li>
11
</ul></li>
11
</ul></li>
12
<li><a>Разработка "Змейки" - пошаговая инструкция</a><ul><li><a>Правила</a></li>
12
<li><a>Разработка "Змейки" - пошаговая инструкция</a><ul><li><a>Правила</a></li>
13
<li><a>Создание проекта и импорт библиотеки</a></li>
13
<li><a>Создание проекта и импорт библиотеки</a></li>
14
<li><a>Константы и переменные</a></li>
14
<li><a>Константы и переменные</a></li>
15
<li><a>Создание окна проекта</a></li>
15
<li><a>Создание окна проекта</a></li>
16
<li><a>Создание змейки</a></li>
16
<li><a>Создание змейки</a></li>
17
<li><a>Управление</a></li>
17
<li><a>Управление</a></li>
18
<li><a>Добавление еды</a></li>
18
<li><a>Добавление еды</a></li>
19
<li><a>Столкновение</a></li>
19
<li><a>Столкновение</a></li>
20
</ul></li>
20
</ul></li>
21
</ul><p>Python - распространенный язык программирования, который в основном используется для небольших проектов. Он применяется в них в качестве вспомогательного инструмента. На Python пишутся бизнес-приложения и разнообразные программы. Трудно поверить, но игры с его помощью тоже создаются.</p>
21
</ul><p>Python - распространенный язык программирования, который в основном используется для небольших проектов. Он применяется в них в качестве вспомогательного инструмента. На Python пишутся бизнес-приложения и разнообразные программы. Трудно поверить, но игры с его помощью тоже создаются.</p>
22
<p>В основном Python ориентирован на программирование 2D-игр элементарного типа. Более сложные и трехмерные проекты на "чистом" Питоне написать не получится - лишь использовать его в качестве дополнительного инструмента разработчика.</p>
22
<p>В основном Python ориентирован на программирование 2D-игр элементарного типа. Более сложные и трехмерные проекты на "чистом" Питоне написать не получится - лишь использовать его в качестве дополнительного инструмента разработчика.</p>
23
<p>Сегодня предстоит познакомиться с разработкой 2D-игры на Python поближе. Предстоит рассмотреть способы реализации поставленной задачи, изучить наиболее популярные движки для нее, а также ознакомиться с библиотеками и фреймворками, помогающими создавать игровой контент. Вниманию также будет представлен первый 2D-проект на Python - игра под названием "Змейка".</p>
23
<p>Сегодня предстоит познакомиться с разработкой 2D-игры на Python поближе. Предстоит рассмотреть способы реализации поставленной задачи, изучить наиболее популярные движки для нее, а также ознакомиться с библиотеками и фреймворками, помогающими создавать игровой контент. Вниманию также будет представлен первый 2D-проект на Python - игра под названием "Змейка".</p>
24
<p>Предложенная информация ориентирована на широкий круг лиц. Она подойдет как обычным ПК-пользователям, так и IT-специалистам. Соответствующие данные помогут разобраться с планом действий при разработке 2D-игр, а также познакомит с наиболее распространенными инструментами для реализации поставленной задачи.</p>
24
<p>Предложенная информация ориентирована на широкий круг лиц. Она подойдет как обычным ПК-пользователям, так и IT-специалистам. Соответствующие данные помогут разобраться с планом действий при разработке 2D-игр, а также познакомит с наиболее распространенными инструментами для реализации поставленной задачи.</p>
25
<h2>План по разработке игры</h2>
25
<h2>План по разработке игры</h2>
26
<p>Разработка программного обеспечения и игр отличаются друг от друга. Каждый игровой контент начинается с составления дальнейшего плана действий. Он поможет не "тормозить" на том или ином этапе создания игры. Готовый проект с грамотной реализацией практически сразу начнет приносить прибыль.</p>
26
<p>Разработка программного обеспечения и игр отличаются друг от друга. Каждый игровой контент начинается с составления дальнейшего плана действий. Он поможет не "тормозить" на том или ином этапе создания игры. Готовый проект с грамотной реализацией практически сразу начнет приносить прибыль.</p>
27
<p>Чтобы создавать 2D (и даже 3D) игры на Python, рекомендуется придерживаться примерно такого алгоритма действий:</p>
27
<p>Чтобы создавать 2D (и даже 3D) игры на Python, рекомендуется придерживаться примерно такого алгоритма действий:</p>
28
<ol><li>Определиться с языком программирования, на котором будет написан игровой проект. В рассматриваемом случае это Python. Для сложных и крупных игр нередко используют Java и C++.</li>
28
<ol><li>Определиться с языком программирования, на котором будет написан игровой проект. В рассматриваемом случае это Python. Для сложных и крупных игр нередко используют Java и C++.</li>
29
<li>Изучить основы выбранного языка программирования.</li>
29
<li>Изучить основы выбранного языка программирования.</li>
30
<li>Ознакомиться с фреймворками и библиотеками языка, ориентированными на создание игрового контента.</li>
30
<li>Ознакомиться с фреймворками и библиотеками языка, ориентированными на создание игрового контента.</li>
31
<li>Выбрать способ разработки. Существуют две концепции, от определения которых немного будет меняться скорость программирования игры и ее функциональные возможности.</li>
31
<li>Выбрать способ разработки. Существуют две концепции, от определения которых немного будет меняться скорость программирования игры и ее функциональные возможности.</li>
32
<li>Придумать сюжетную линию и жанр игры. На соответствующем этапе рекомендуется провести тщательный анализ целевой аудитории. Можно начать именно с этого шага - может быть, Python окажется неподходящим для запланированного проекта.</li>
32
<li>Придумать сюжетную линию и жанр игры. На соответствующем этапе рекомендуется провести тщательный анализ целевой аудитории. Можно начать именно с этого шага - может быть, Python окажется неподходящим для запланированного проекта.</li>
33
<li>Заняться разработкой механики, физики и анимации.</li>
33
<li>Заняться разработкой механики, физики и анимации.</li>
34
<li>Написать исходный код запланированного проекта.</li>
34
<li>Написать исходный код запланированного проекта.</li>
35
<li>Соединить все игровые компоненты в общий проект.</li>
35
<li>Соединить все игровые компоненты в общий проект.</li>
36
<li>Организовать тестирование игры. Этот этап поможет выявить и устранить разнообразные ошибки. По мере необходимости нужно провести повторную отладку и тестирование.</li>
36
<li>Организовать тестирование игры. Этот этап поможет выявить и устранить разнообразные ошибки. По мере необходимости нужно провести повторную отладку и тестирование.</li>
37
<li>Выложить готовый проект в общий доступ для пользователей.</li>
37
<li>Выложить готовый проект в общий доступ для пользователей.</li>
38
</ol><p>Некоторые разработчики нередко выкладывают "альфа" и "бета" версии игр в общий доступ для скачивания и эксплуатации. Такой подход особо актуален для сложного программного обеспечения. Он поможет не только выявить разнообразные ошибки в работе проекта, но и даст возможность получить обратную связь от потенциальной целевой аудитории. Конечные пользователи нередко предлагают разнообразные идеи по совершенствованию игр, которые повысили бы их интерес. Такая информация - на вес золота.</p>
38
</ol><p>Некоторые разработчики нередко выкладывают "альфа" и "бета" версии игр в общий доступ для скачивания и эксплуатации. Такой подход особо актуален для сложного программного обеспечения. Он поможет не только выявить разнообразные ошибки в работе проекта, но и даст возможность получить обратную связь от потенциальной целевой аудитории. Конечные пользователи нередко предлагают разнообразные идеи по совершенствованию игр, которые повысили бы их интерес. Такая информация - на вес золота.</p>
39
<p>Изначально может показаться, что создание игр (даже двумерных) - это простая задача. На самом деле - это неверное утверждение. Чтобы создать развлекательное программное обеспечение, предстоит изучить много информации и освоить огромное количество навыков/инструментов. Особенно это касается разработки с нуля. Формирования физики, анимации, дизайна и программирование исходного кода нередко отнимает очень много времени.</p>
39
<p>Изначально может показаться, что создание игр (даже двумерных) - это простая задача. На самом деле - это неверное утверждение. Чтобы создать развлекательное программное обеспечение, предстоит изучить много информации и освоить огромное количество навыков/инструментов. Особенно это касается разработки с нуля. Формирования физики, анимации, дизайна и программирование исходного кода нередко отнимает очень много времени.</p>
40
<h2>Способы разработки</h2>
40
<h2>Способы разработки</h2>
41
<p>Разрабатывать игровые проекты можно несколькими способами:</p>
41
<p>Разрабатывать игровые проекты можно несколькими способами:</p>
42
<ol><li>Через игровые движки. Этот вариант хорошо подходит новичкам.</li>
42
<ol><li>Через игровые движки. Этот вариант хорошо подходит новичкам.</li>
43
<li>С нуля. Отличный вариант для простейших проектов и опытных разработчиков.</li>
43
<li>С нуля. Отличный вариант для простейших проектов и опытных разработчиков.</li>
44
</ol><p>В случае разработки через движки необходимо скачать специальное программное обеспечение - игровой движок. В нем обычно есть все, что может пригодиться разработчику для выпуска собственного развлекательного проекта: от графики и анимации до физики и звуковых сигналов. Движок представляет собой готовый пакет решений для программирования игр. Нередко в нем есть специальные "магазины" - там доступны дополнительные инструменты. Некоторые из них распространяются бесплатно, а за какие-то придется заплатить.</p>
44
</ol><p>В случае разработки через движки необходимо скачать специальное программное обеспечение - игровой движок. В нем обычно есть все, что может пригодиться разработчику для выпуска собственного развлекательного проекта: от графики и анимации до физики и звуковых сигналов. Движок представляет собой готовый пакет решений для программирования игр. Нередко в нем есть специальные "магазины" - там доступны дополнительные инструменты. Некоторые из них распространяются бесплатно, а за какие-то придется заплатить.</p>
45
<p>Разработка через игровые движки помогает быстро создавать 2D и 3D игры, но их функциональные возможности нередко сильно ограничены. 100 % уникальный проект сделать с их помощью не представится возможным. Зато нередко именно такой подход подразумевает отсутствие у разработчика знаний языков программирования.</p>
45
<p>Разработка через игровые движки помогает быстро создавать 2D и 3D игры, но их функциональные возможности нередко сильно ограничены. 100 % уникальный проект сделать с их помощью не представится возможным. Зато нередко именно такой подход подразумевает отсутствие у разработчика знаний языков программирования.</p>
46
<p>Чтобы на выходе получить полностью уникальный игровой проект, необходимо воспользоваться разработкой с нуля. В этом случае физика, анимация, механика и программный код игры будут записаны программистом самостоятельно. Обычно средние и крупные проекты требуют привлечения целой команды разработчиков - иначе процесс может затянуться. Это достаточно сложный в плане реализации подход к программированию игр, но именно он нередко приносит наибольшую отдачу.</p>
46
<p>Чтобы на выходе получить полностью уникальный игровой проект, необходимо воспользоваться разработкой с нуля. В этом случае физика, анимация, механика и программный код игры будут записаны программистом самостоятельно. Обычно средние и крупные проекты требуют привлечения целой команды разработчиков - иначе процесс может затянуться. Это достаточно сложный в плане реализации подход к программированию игр, но именно он нередко приносит наибольшую отдачу.</p>
47
<p>В Python под движками обычно подразумеваются готовые библиотеки, ориентированные на создание игр. Поэтому фактическая разработка с нуля рассмотрена не будет. Далее предстоит ознакомиться с "классическими" движками для программирования игр и с наиболее распространенными библиотеками для реализации поставленной задачи.</p>
47
<p>В Python под движками обычно подразумеваются готовые библиотеки, ориентированные на создание игр. Поэтому фактическая разработка с нуля рассмотрена не будет. Далее предстоит ознакомиться с "классическими" движками для программирования игр и с наиболее распространенными библиотеками для реализации поставленной задачи.</p>
48
<h3>Unreal Engine</h3>
48
<h3>Unreal Engine</h3>
49
<p>Unreal Engine - игровой движок, который можно считать универсальным. Он подходит для создания не только 2D, но и 3D игр. Его ориентированность - трехмерная графика.</p>
49
<p>Unreal Engine - игровой движок, который можно считать универсальным. Он подходит для создания не только 2D, но и 3D игр. Его ориентированность - трехмерная графика.</p>
50
<p>Данный продукт поддерживает C++ в качестве основного языка программирования. Python здесь может использоваться в виде дополнительного инструмента. Также в Unreal Engine есть специальный язык - Blueprints. Он ориентирован на новичков и является визуальным языком разработки.</p>
50
<p>Данный продукт поддерживает C++ в качестве основного языка программирования. Python здесь может использоваться в виде дополнительного инструмента. Также в Unreal Engine есть специальный язык - Blueprints. Он ориентирован на новичков и является визуальным языком разработки.</p>
51
<p>Unreal Engine рекомендуется использовать тогда, когда в планах создание 3D-игры. Он предлагает хорошую производительность и множество полезных инструментов. Для 2D-игр этот движок почти не используется.</p>
51
<p>Unreal Engine рекомендуется использовать тогда, когда в планах создание 3D-игры. Он предлагает хорошую производительность и множество полезных инструментов. Для 2D-игр этот движок почти не используется.</p>
52
<h3>Unity</h3>
52
<h3>Unity</h3>
53
<p>Unity - это кроссплатформенный игровой движок, который появился в 2005 году. Он ориентирован не только на трехмерную графику, но и на двухмерную. Позволяет писать игры для приставок, компьютеров, а также смартфонов и планшетов.</p>
53
<p>Unity - это кроссплатформенный игровой движок, который появился в 2005 году. Он ориентирован не только на трехмерную графику, но и на двухмерную. Позволяет писать игры для приставок, компьютеров, а также смартфонов и планшетов.</p>
54
<p>Unity - движок, позволяющий создавать браузерные игры и контент, работающий на операционных системах iOS и Android. Нередко он используется для написания проектов с использованием технологий AR и VR.</p>
54
<p>Unity - движок, позволяющий создавать браузерные игры и контент, работающий на операционных системах iOS и Android. Нередко он используется для написания проектов с использованием технологий AR и VR.</p>
55
<p>Unity имеет следующие особенности:</p>
55
<p>Unity имеет следующие особенности:</p>
56
<ul><li>наличие визуальной среды разработки;</li>
56
<ul><li>наличие визуальной среды разработки;</li>
57
<li>кроссплатформенность;</li>
57
<li>кроссплатформенность;</li>
58
<li>поддержка нескольких языков программирования;</li>
58
<li>поддержка нескольких языков программирования;</li>
59
<li>встроенная модульная система компонентов;</li>
59
<li>встроенная модульная система компонентов;</li>
60
<li>проблемы при подключении внешних библиотек (что необходимо для 2D-разработки на Python).</li>
60
<li>проблемы при подключении внешних библиотек (что необходимо для 2D-разработки на Python).</li>
61
</ul><p>Это неплохой инструмент разработчика игр. По нему создано множество уроков и имеется огромное количество документации, в том числе и на русском языке.</p>
61
</ul><p>Это неплохой инструмент разработчика игр. По нему создано множество уроков и имеется огромное количество документации, в том числе и на русском языке.</p>
62
<h2>Разработки через библиотеки Python - лучшие библиотеки</h2>
62
<h2>Разработки через библиотеки Python - лучшие библиотеки</h2>
63
<p>Далее будет сделан акцент на разработке игрового программного обеспечения через библиотеки (они будут в тексте называться движками). Это оптимальное решение как для новичков, так и для опытных разработчиков. Ниже - лучшие библиотеки, которые помогут создавать 2D-игры.</p>
63
<p>Далее будет сделан акцент на разработке игрового программного обеспечения через библиотеки (они будут в тексте называться движками). Это оптимальное решение как для новичков, так и для опытных разработчиков. Ниже - лучшие библиотеки, которые помогут создавать 2D-игры.</p>
64
<h3>Adventure lib</h3>
64
<h3>Adventure lib</h3>
65
<p>Adventure lib - библиотека Python, позволяющая писать текстовые игры и интерактивные истории. Данный модуль хорошо подходит для консольного программного обеспечения за счет широкого выбора встроенных инструментов. С его помощью удастся детально проработать все элементы проекта: от персонажа до игровой логики.</p>
65
<p>Adventure lib - библиотека Python, позволяющая писать текстовые игры и интерактивные истории. Данный модуль хорошо подходит для консольного программного обеспечения за счет широкого выбора встроенных инструментов. С его помощью удастся детально проработать все элементы проекта: от персонажа до игровой логики.</p>
66
<p>Adventure lib предусматривает открытый исходный код. Для него не нужно писать парсеры языка. Все это гарантирует более простое взаимодействие с движком.</p>
66
<p>Adventure lib предусматривает открытый исходный код. Для него не нужно писать парсеры языка. Все это гарантирует более простое взаимодействие с движком.</p>
67
<h3>Ren’Py</h3>
67
<h3>Ren’Py</h3>
68
<p>Ren’Py - библиотека, которая подойдет для написания 2D-новелл. Это еще один распространенный жанр 2D-игр. В таком программном обеспечении огромное значение имеет сюжет, а визуальные составляющие и звуки лишь дополняют его.</p>
68
<p>Ren’Py - библиотека, которая подойдет для написания 2D-новелл. Это еще один распространенный жанр 2D-игр. В таком программном обеспечении огромное значение имеет сюжет, а визуальные составляющие и звуки лишь дополняют его.</p>
69
<p>Ren’Py выделяется:</p>
69
<p>Ren’Py выделяется:</p>
70
<ul><li>кроссплатформенностью - данная среда ориентирована на написание игрового контента для разных устройств;</li>
70
<ul><li>кроссплатформенностью - данная среда ориентирована на написание игрового контента для разных устройств;</li>
71
<li>множеством инструментов;</li>
71
<li>множеством инструментов;</li>
72
<li>наличием огромного количества уроков и туториалов по ее использованию.</li>
72
<li>наличием огромного количества уроков и туториалов по ее использованию.</li>
73
</ul><p>Ren’Py - это не классическая Python-библиотека. Она представляет собой преимущественно готовую среду игровой разработки. Установка данного продукта будет производиться не через pip install. Для ее работы необходимо инициализировать SDK Ren’Py.</p>
73
</ul><p>Ren’Py - это не классическая Python-библиотека. Она представляет собой преимущественно готовую среду игровой разработки. Установка данного продукта будет производиться не через pip install. Для ее работы необходимо инициализировать SDK Ren’Py.</p>
74
<h3>Panda 3D</h3>
74
<h3>Panda 3D</h3>
75
<p>А вот движок, который подойдет для реализации 3D-игр. Речь идет о Panda 3D. Он предусматривает множество полезных инструментов программирования, а также идеально сочетается с различными операционными системами.</p>
75
<p>А вот движок, который подойдет для реализации 3D-игр. Речь идет о Panda 3D. Он предусматривает множество полезных инструментов программирования, а также идеально сочетается с различными операционными системами.</p>
76
<p>Panda 3D - это не просто библиотека, а полноценная платформа для игрового контента и всевозможных приложений. Она поддерживает интеграцию с различными библиотеками, благодаря чему работать с ней очень легко. Правда, для 2D-игр этот вариант подходит не лучшим образом.</p>
76
<p>Panda 3D - это не просто библиотека, а полноценная платформа для игрового контента и всевозможных приложений. Она поддерживает интеграцию с различными библиотеками, благодаря чему работать с ней очень легко. Правда, для 2D-игр этот вариант подходит не лучшим образом.</p>
77
<h3>PyCharm</h3>
77
<h3>PyCharm</h3>
78
<p>PyCharm - полноценная среда разработки на Python. Она поддерживает все необходимое для разработки, отладки и тестирования программного обеспечения. Стандартные возможности PyCharm расширяются за счет плагинов.</p>
78
<p>PyCharm - полноценная среда разработки на Python. Она поддерживает все необходимое для разработки, отладки и тестирования программного обеспечения. Стандартные возможности PyCharm расширяются за счет плагинов.</p>
79
<p>PyCharm работает на Windows, macOS и Linux. Она имеет платную и бесплатную версии - остается выбрать подходящий вариант. Для большинства простейших 2D-игр хватит бесплатной.</p>
79
<p>PyCharm работает на Windows, macOS и Linux. Она имеет платную и бесплатную версии - остается выбрать подходящий вариант. Для большинства простейших 2D-игр хватит бесплатной.</p>
80
<h2>PyGame</h2>
80
<h2>PyGame</h2>
81
<p>PyGame - основная библиотека, используемая для игровой разработки на Python. Данный движок будет рассмотрен отдельно. Именно на нем предстоит написать первую игру - "Змейку".</p>
81
<p>PyGame - основная библиотека, используемая для игровой разработки на Python. Данный движок будет рассмотрен отдельно. Именно на нем предстоит написать первую игру - "Змейку".</p>
82
<p>Некоторые называют PyGame фреймворком. С точки зрения разработки игрового контента - это не совсем так. PyGame просто имеет характерные черты как библиотеки, так и фреймворка. Он также называется игровым движком - готовым комплексом программного обеспечения для создания 2D- и 3D-игр.</p>
82
<p>Некоторые называют PyGame фреймворком. С точки зрения разработки игрового контента - это не совсем так. PyGame просто имеет характерные черты как библиотеки, так и фреймворка. Он также называется игровым движком - готовым комплексом программного обеспечения для создания 2D- и 3D-игр.</p>
83
<h3>Области использования</h3>
83
<h3>Области использования</h3>
84
<p>PyGame - это фреймворк, ориентированный на создание 2D-игр. В основном - пиксельных и платформеров. Трехмерная графика PyGame поддерживается, но не очень хорошо. Из-за этого сложный AAA-шутер с его помощью запрограммировать не представится возможным.</p>
84
<p>PyGame - это фреймворк, ориентированный на создание 2D-игр. В основном - пиксельных и платформеров. Трехмерная графика PyGame поддерживается, но не очень хорошо. Из-за этого сложный AAA-шутер с его помощью запрограммировать не представится возможным.</p>
85
<p>PyGame подойдет для создания мультимедийных приложений со сложными графическими интерфейсами. Чаще всего фреймворк встречается в игровой разработке:</p>
85
<p>PyGame подойдет для создания мультимедийных приложений со сложными графическими интерфейсами. Чаще всего фреймворк встречается в игровой разработке:</p>
86
<ul><li>при создании небольших инди-проектов;</li>
86
<ul><li>при создании небольших инди-проектов;</li>
87
<li>для прототипирования более масштабных игр.</li>
87
<li>для прототипирования более масштабных игр.</li>
88
</ul><p>Освоить PyGame не составляет никакого труда, поэтому этот движок обычно используется новичками. Он активно применяется в обучении основам игровой разработки. Более опытные программисты тоже могут успешно использовать в своей работе PyGame.</p>
88
</ul><p>Освоить PyGame не составляет никакого труда, поэтому этот движок обычно используется новичками. Он активно применяется в обучении основам игровой разработки. Более опытные программисты тоже могут успешно использовать в своей работе PyGame.</p>
89
<p>К его преимуществам относят:</p>
89
<p>К его преимуществам относят:</p>
90
<ul><li>простое освоение;</li>
90
<ul><li>простое освоение;</li>
91
<li>быстрый процесс разработки;</li>
91
<li>быстрый процесс разработки;</li>
92
<li>удобное прототипирование;</li>
92
<li>удобное прототипирование;</li>
93
<li>возможность работы на любых платформах.</li>
93
<li>возможность работы на любых платформах.</li>
94
</ul><p>Недостатками PyGame можно считать:</p>
94
</ul><p>Недостатками PyGame можно считать:</p>
95
<ul><li>относительно небольшую функциональность - для крупного игрового проекта эта библиотека не подойдет;</li>
95
<ul><li>относительно небольшую функциональность - для крупного игрового проекта эта библиотека не подойдет;</li>
96
<li>небольшое сообщество;</li>
96
<li>небольшое сообщество;</li>
97
<li>ресурсоемкость - игры на Python отнимают немало компьютерных ресурсов.</li>
97
<li>ресурсоемкость - игры на Python отнимают немало компьютерных ресурсов.</li>
98
</ul><p>Далее предстоит создать первую игру при помощи PyGame. Речь идет о классической "Змейке". Это всего лишь один пример того, как можно использовать рассматриваемый движок на практике с 2D-проектами.</p>
98
</ul><p>Далее предстоит создать первую игру при помощи PyGame. Речь идет о классической "Змейке". Это всего лишь один пример того, как можно использовать рассматриваемый движок на практике с 2D-проектами.</p>
99
<h2>Разработка "Змейки" - пошаговая инструкция</h2>
99
<h2>Разработка "Змейки" - пошаговая инструкция</h2>
100
<p>"Змейка" - проект, который часто используется для изучения основ разработки игрового программного обеспечения. Сегодня предстоит познакомиться с ее классической формой представления на основе PyGame.</p>
100
<p>"Змейка" - проект, который часто используется для изучения основ разработки игрового программного обеспечения. Сегодня предстоит познакомиться с ее классической формой представления на основе PyGame.</p>
101
<h3>Правила</h3>
101
<h3>Правила</h3>
102
<p>Перед программированием проекта необходимо определить игровые правила. В случае с классической интерпретацией "Змейки" они будут следующими:</p>
102
<p>Перед программированием проекта необходимо определить игровые правила. В случае с классической интерпретацией "Змейки" они будут следующими:</p>
103
<ul><li>змейка будет собирать объекты на игровом поле - ей управляет игрок;</li>
103
<ul><li>змейка будет собирать объекты на игровом поле - ей управляет игрок;</li>
104
<li>повороты возможны только на 90 градусов;</li>
104
<li>повороты возможны только на 90 градусов;</li>
105
<li>каждый собранный объект будет увеличивать длину змейки на +1 блок;</li>
105
<li>каждый собранный объект будет увеличивать длину змейки на +1 блок;</li>
106
<li>при каждом запуске змейка появляется в случайной области имеющегося игрового поля;</li>
106
<li>при каждом запуске змейка появляется в случайной области имеющегося игрового поля;</li>
107
<li>если змейка сталкивается со своим телом или границей поля, игра заканчивается - пользователю засчитывается проигрыш;</li>
107
<li>если змейка сталкивается со своим телом или границей поля, игра заканчивается - пользователю засчитывается проигрыш;</li>
108
<li>цель - как можно дольше продержаться в раунде и собрать максимально возможное количество объектов.</li>
108
<li>цель - как можно дольше продержаться в раунде и собрать максимально возможное количество объектов.</li>
109
</ul><p>Управление будет осуществляться при помощи "стандартных" клавиш - WASD. Это связано с тем, что данные кнопки часто используются в игровых проектах. Пользователям не придется привыкать к ним с нуля.</p>
109
</ul><p>Управление будет осуществляться при помощи "стандартных" клавиш - WASD. Это связано с тем, что данные кнопки часто используются в игровых проектах. Пользователям не придется привыкать к ним с нуля.</p>
110
<h3>Создание проекта и импорт библиотеки</h3>
110
<h3>Создание проекта и импорт библиотеки</h3>
111
<p>Весь процесс разработки "Змейки" на PyGame будет разбит на несколько шагов. Этот прием позволяет быстрее освоить упомянутую библиотеку, а также отследить появление новых функций.</p>
111
<p>Весь процесс разработки "Змейки" на PyGame будет разбит на несколько шагов. Этот прием позволяет быстрее освоить упомянутую библиотеку, а также отследить появление новых функций.</p>
112
<p>Начать предстоит с создания нового проекта в редакторе кода. Для этого рекомендуется использовать PyCharm. VS Code тоже подойдет для реализации поставленной задачи.</p>
112
<p>Начать предстоит с создания нового проекта в редакторе кода. Для этого рекомендуется использовать PyCharm. VS Code тоже подойдет для реализации поставленной задачи.</p>
113
<p>Сначала программист должен:</p>
113
<p>Сначала программист должен:</p>
114
<ol><li>Запустить среду разработки.</li>
114
<ol><li>Запустить среду разработки.</li>
115
<li>Выбрать File - New Project.</li>
115
<li>Выбрать File - New Project.</li>
116
<li>Указать имя проекта и задать место хранения исходных файлов (директорию). В рассматриваемом случае проект будет называться snake, а хранится он в стандартной папке. Остальные пункты рекомендуется для начала оставить в состоянии "по умолчанию".</li>
116
<li>Указать имя проекта и задать место хранения исходных файлов (директорию). В рассматриваемом случае проект будет называться snake, а хранится он в стандартной папке. Остальные пункты рекомендуется для начала оставить в состоянии "по умолчанию".</li>
117
<li>Перейти в файл main.py. Если он отсутствует - нужно создать его.</li>
117
<li>Перейти в файл main.py. Если он отсутствует - нужно создать его.</li>
118
<li>В самом начале соответствующего документа необходимо осуществить импорт библиотек для дальнейшей работы. Предстоит использовать Pygame для доступа к основным модулям Pygame и Randrange - для выбора случайного числа из заданного диапазона.</li>
118
<li>В самом начале соответствующего документа необходимо осуществить импорт библиотек для дальнейшей работы. Предстоит использовать Pygame для доступа к основным модулям Pygame и Randrange - для выбора случайного числа из заданного диапазона.</li>
119
</ol><p>Вот код, который поможет добиться желаемого результата:</p>
119
</ol><p>Вот код, который поможет добиться желаемого результата:</p>
120
<p># Импортируем библиотеки</p>
120
<p># Импортируем библиотеки</p>
121
<p><strong>import</strong>pygame<strong>as</strong>pg</p>
121
<p><strong>import</strong>pygame<strong>as</strong>pg</p>
122
<p><strong>from</strong>random<strong>import</strong>randrange</p>
122
<p><strong>from</strong>random<strong>import</strong>randrange</p>
123
<p>Соответствующий фрагмент кода должен быть вставлен в качестве первых строк main.py. Запись с решеткой не является обязательной. Это комментарий, который сделает исходный код более объемным, но пояснит, за что отвечает тот или иной блок кода.</p>
123
<p>Соответствующий фрагмент кода должен быть вставлен в качестве первых строк main.py. Запись с решеткой не является обязательной. Это комментарий, который сделает исходный код более объемным, но пояснит, за что отвечает тот или иной блок кода.</p>
124
<h3>Константы и переменные</h3>
124
<h3>Константы и переменные</h3>
125
<p>Теперь можно начать активную работу с PyGame. Необходимо создать переменные. Некоторые из них будут константами - они являются постоянными во всем проекте. Сюда относятся размеры окна в пикселях, а также частота кадров (FPS).</p>
125
<p>Теперь можно начать активную работу с PyGame. Необходимо создать переменные. Некоторые из них будут константами - они являются постоянными во всем проекте. Сюда относятся размеры окна в пикселях, а также частота кадров (FPS).</p>
126
<p>Задавать константы рекомендуется сразу после импорта PyGame и других библиотек. Пишутся они в Python заглавными буквами. Если в названии более одного слова, нужно отделять слова друг от друга символом нижнего подчеркивания.</p>
126
<p>Задавать константы рекомендуется сразу после импорта PyGame и других библиотек. Пишутся они в Python заглавными буквами. Если в названии более одного слова, нужно отделять слова друг от друга символом нижнего подчеркивания.</p>
127
<p>В "Змейке" будут такие константы:</p>
127
<p>В "Змейке" будут такие константы:</p>
128
<ul><li>WINDOW - отвечает за размер окна (равен 1000 пикселей);</li>
128
<ul><li>WINDOW - отвечает за размер окна (равен 1000 пикселей);</li>
129
<li>FPS - кадровая частота (60 кадров в секунду).</li>
129
<li>FPS - кадровая частота (60 кадров в секунду).</li>
130
</ul><p>Вот наглядный пример того, как это будет выглядеть в программном коде на PyGame:</p>
130
</ul><p>Вот наглядный пример того, как это будет выглядеть в программном коде на PyGame:</p>
131
<p>После этого в процессе разработки игрового контента при помощи PyGame необходимо проинициализировать игровые объекты. Для этого сначала создается экранный объект через функции set_mode модуля display.</p>
131
<p>После этого в процессе разработки игрового контента при помощи PyGame необходимо проинициализировать игровые объекты. Для этого сначала создается экранный объект через функции set_mode модуля display.</p>
132
<p>Set_mode принимает три аргумента:</p>
132
<p>Set_mode принимает три аргумента:</p>
133
<ul><li>размер окна;</li>
133
<ul><li>размер окна;</li>
134
<li>глубину цвета;</li>
134
<li>глубину цвета;</li>
135
<li>флаги дополнительных параметров.</li>
135
<li>флаги дополнительных параметров.</li>
136
</ul><p>Последние два параметра могут быть заданы позже. В проекте "Змейка" на PyGame будет задано окно размером 1000 на 1000 пикселей. Константа уже есть. Ее просто необходимо умножить на 2. После этого предстоит сразу инициализировать объект, который поможет задать в проекте на PyGame частоту обновления экрана.</p>
136
</ul><p>Последние два параметра могут быть заданы позже. В проекте "Змейка" на PyGame будет задано окно размером 1000 на 1000 пикселей. Константа уже есть. Ее просто необходимо умножить на 2. После этого предстоит сразу инициализировать объект, который поможет задать в проекте на PyGame частоту обновления экрана.</p>
137
<p>Можно переходить к следующему этапу - формирования игрового окна.</p>
137
<p>Можно переходить к следующему этапу - формирования игрового окна.</p>
138
<h3>Создание окна проекта</h3>
138
<h3>Создание окна проекта</h3>
139
<p>Проекты на PyGame будут работать в рамках бесконечного цикла. Он существует до тех пор, пока пользователь не закроет игровое окно. В соответствующем цикле поддерживаются другие условия и циклы, используемые для управления, обновления экрана и отрисовки объектов.</p>
139
<p>Проекты на PyGame будут работать в рамках бесконечного цикла. Он существует до тех пор, пока пользователь не закроет игровое окно. В соответствующем цикле поддерживаются другие условия и циклы, используемые для управления, обновления экрана и отрисовки объектов.</p>
140
<p>Необходимо создать цикл while True, а в нем установить ограничение частоты кадров, задействовав FPS:</p>
140
<p>Необходимо создать цикл while True, а в нем установить ограничение частоты кадров, задействовав FPS:</p>
141
<p>Теперь необходимо получать события и обрабатывать их. Для этого нужно создать for-цикл и с его помощью отслеживать пользовательские действия, а затем реагировать на них. Сразу же предстоит прописать обнаружение закрытия окна. В этом случае, если объект PyGame закрывается, окно игры тоже закрывается.</p>
141
<p>Теперь необходимо получать события и обрабатывать их. Для этого нужно создать for-цикл и с его помощью отслеживать пользовательские действия, а затем реагировать на них. Сразу же предстоит прописать обнаружение закрытия окна. В этом случае, если объект PyGame закрывается, окно игры тоже закрывается.</p>
142
<p>Далее необходимо воспользоваться функцией fill() для закрашивания ранее созданного экрана PyGame самым светлым цветом палитры. Этот прием даст возможность размещения в программном продукте более темную змейку и элементы, которые она будет собирать. Цвет будет указан в RGB-формате.</p>
142
<p>Далее необходимо воспользоваться функцией fill() для закрашивания ранее созданного экрана PyGame самым светлым цветом палитры. Этот прием даст возможность размещения в программном продукте более темную змейку и элементы, которые она будет собирать. Цвет будет указан в RGB-формате.</p>
143
<p>В самом конце предстоит добавить в разработку на PyGame функцию обновления экрана - flip().</p>
143
<p>В самом конце предстоит добавить в разработку на PyGame функцию обновления экрана - flip().</p>
144
<h3>Создание змейки</h3>
144
<h3>Создание змейки</h3>
145
<p>Следующий этап программирования на PyGame - это создание змейки. Чтобы она могла передвигаться, необходимо воспользоваться координатами. В коде поддерживается константа WINDOWS - она обозначает размер одной стороны окна. Теперь можно задать контакты FILE_SIZE - для размера стороны одной плитки сетки. После - задать сразу всю сетку.</p>
145
<p>Следующий этап программирования на PyGame - это создание змейки. Чтобы она могла передвигаться, необходимо воспользоваться координатами. В коде поддерживается константа WINDOWS - она обозначает размер одной стороны окна. Теперь можно задать контакты FILE_SIZE - для размера стороны одной плитки сетки. После - задать сразу всю сетку.</p>
146
<p>Далее - через кортеж предстоит внести в константу RANGE разметку всего поля. Это позволит задавать змейке координаты для передвижения и спауна "корма".</p>
146
<p>Далее - через кортеж предстоит внести в константу RANGE разметку всего поля. Это позволит задавать змейке координаты для передвижения и спауна "корма".</p>
147
<p>Далее предстоит:</p>
147
<p>Далее предстоит:</p>
148
<ol><li>Создать функцию PyGame, которая будет определять координаты случайной плитки на поле.</li>
148
<ol><li>Создать функцию PyGame, которая будет определять координаты случайной плитки на поле.</li>
149
<li>Обозначить лямбда-функцию get_random_position(). С ее помощью и через константу RANGE удастся получить координаты X и Y.</li>
149
<li>Обозначить лямбда-функцию get_random_position(). С ее помощью и через константу RANGE удастся получить координаты X и Y.</li>
150
<li>Поставить префиксную запись - "звездочку". Она укажет на то, что в функцию randrange() нужно передать все кортежные элементы.</li>
150
<li>Поставить префиксную запись - "звездочку". Она укажет на то, что в функцию randrange() нужно передать все кортежные элементы.</li>
151
</ol><p>Выглядит это так:</p>
151
</ol><p>Выглядит это так:</p>
152
<p>Остается нарисовать змейку и задать ей параметры. Сначала создается переменная snake. В ней определяется голова змеи - через экземпляр класса Rect(). Он в PyGame отвечает за обозначение прямоугольной области. В виде параметров в классовый конструктор будут переданы координаты X и Y, высота и ширина. Сразу после этого задается случайная позиция головы змеи в проекте на PyGame на сетке игрового поля. Для этого используется функция get_random_position().</p>
152
<p>Остается нарисовать змейку и задать ей параметры. Сначала создается переменная snake. В ней определяется голова змеи - через экземпляр класса Rect(). Он в PyGame отвечает за обозначение прямоугольной области. В виде параметров в классовый конструктор будут переданы координаты X и Y, высота и ширина. Сразу после этого задается случайная позиция головы змеи в проекте на PyGame на сетке игрового поля. Для этого используется функция get_random_position().</p>
153
<p>Далее нужно создать переменные для хранения длины змеи и ее сегментов - length со значением 1 и список segments (в нем размещается первый сегмент).</p>
153
<p>Далее нужно создать переменные для хранения длины змеи и ее сегментов - length со значением 1 и список segments (в нем размещается первый сегмент).</p>
154
<p>А вот код, с помощью которого можно отобразить змейку на экране. Пусть она будет зеленой, но более темной.</p>
154
<p>А вот код, с помощью которого можно отобразить змейку на экране. Пусть она будет зеленой, но более темной.</p>
155
<p>При каждом запуске программного продукта на PyGame теперь будет появляться голова змейки в случайном месте поля.</p>
155
<p>При каждом запуске программного продукта на PyGame теперь будет появляться голова змейки в случайном месте поля.</p>
156
<h3>Управление</h3>
156
<h3>Управление</h3>
157
<p>В качестве управления в "Змейке" на PyGame будут использоваться клавиши:</p>
157
<p>В качестве управления в "Змейке" на PyGame будут использоваться клавиши:</p>
158
<ul><li>W - вперед;</li>
158
<ul><li>W - вперед;</li>
159
<li>A - поворот влево;</li>
159
<li>A - поворот влево;</li>
160
<li>S - назад;</li>
160
<li>S - назад;</li>
161
<li>D - поворот вправо.</li>
161
<li>D - поворот вправо.</li>
162
</ul><p>Сначала нужно:</p>
162
</ul><p>Сначала нужно:</p>
163
<ol><li>Вернуться к коду, где задавались параметры змейки.</li>
163
<ol><li>Вернуться к коду, где задавались параметры змейки.</li>
164
<li>Создать переменную snake_dir для сохранения координат головы.</li>
164
<li>Создать переменную snake_dir для сохранения координат головы.</li>
165
<li>Задать значение (0, 0).</li>
165
<li>Задать значение (0, 0).</li>
166
<li>Задать в коде на PyGame обработку нажатий клавиш. Делается это в разделе цикла обработки событий. Нужно указать значения переменной snake_dir при нажатии.</li>
166
<li>Задать в коде на PyGame обработку нажатий клавиш. Делается это в разделе цикла обработки событий. Нужно указать значения переменной snake_dir при нажатии.</li>
167
</ol><p>Выглядит это так:</p>
167
</ol><p>Выглядит это так:</p>
168
<p>На каждом шаге змейка перемещается на один сегмент. Из списка сегментов каждый раз убирается лишний:</p>
168
<p>На каждом шаге змейка перемещается на один сегмент. Из списка сегментов каждый раз убирается лишний:</p>
169
<p>Вот код, который поможет контролировать скорость движения:</p>
169
<p>Вот код, который поможет контролировать скорость движения:</p>
170
<p>А теперь остается модифицировать часть кода с управлением:</p>
170
<p>А теперь остается модифицировать часть кода с управлением:</p>
171
<p>Проект на PyGame почти готов. Осталось несколько простых шагов.</p>
171
<p>Проект на PyGame почти готов. Осталось несколько простых шагов.</p>
172
<h3>Добавление еды</h3>
172
<h3>Добавление еды</h3>
173
-
<p>Еда для змейки по своим размерам идентична голове змеи сразу после запуска раунда. Можно создать перем��нную food с копией головы змеи. Food будет назначена случайная точка для появления. Для этого используется функция get_random_position():</p>
173
+
<p>Еда для змейки по своим размерам идентична голове змеи сразу после запуска раунда. Можно создать переменную food с копией головы змеи. Food будет назначена случайная точка для появления. Для этого используется функция get_random_position():</p>
174
<p>Еда отобразится на экране более темным цветом зеленого:</p>
174
<p>Еда отобразится на экране более темным цветом зеленого:</p>
175
<p>Теперь можно научить змейку кушать. Нужно создать условие, в котором проверяется положение головы. Если оно совпадает с едой, задается новое положение для еды, а длина змеи увеличивается на +1.</p>
175
<p>Теперь можно научить змейку кушать. Нужно создать условие, в котором проверяется положение головы. Если оно совпадает с едой, задается новое положение для еды, а длина змеи увеличивается на +1.</p>
176
<p>Выше - пример соответствующего кода на PyGame.</p>
176
<p>Выше - пример соответствующего кода на PyGame.</p>
177
<h3>Столкновение</h3>
177
<h3>Столкновение</h3>
178
<p>Последний шаг - определение столкновений. Программисту предстоит проверять положение координат головы змеи и размеров окна. Если она соприкасается с границами:</p>
178
<p>Последний шаг - определение столкновений. Программисту предстоит проверять положение координат головы змеи и размеров окна. Если она соприкасается с границами:</p>
179
<ul><li>устанавливаются новые случайные позиции для головы и еды;</li>
179
<ul><li>устанавливаются новые случайные позиции для головы и еды;</li>
180
<li>размер змеи уменьшается до исходного;</li>
180
<li>размер змеи уменьшается до исходного;</li>
181
<li>координаты передвижения обнуляются.</li>
181
<li>координаты передвижения обнуляются.</li>
182
</ul><p>Выглядит это так:</p>
182
</ul><p>Выглядит это так:</p>
183
<p>Змейка в PyGame может столкнуться со своим телом. Это тоже должно привести к концу игры. Для реализации соответствующей задачи создается переменная snake_collision. Она определяет факт пересечения хоть одного прямоугольника тела змеи с ее головой. Лучше всего воспользоваться для ее реализации готовой функцией collidelist() класса Rect из PyGame. После этого предстоит добавить переменную в условие проверки столкновения с границами.</p>
183
<p>Змейка в PyGame может столкнуться со своим телом. Это тоже должно привести к концу игры. Для реализации соответствующей задачи создается переменная snake_collision. Она определяет факт пересечения хоть одного прямоугольника тела змеи с ее головой. Лучше всего воспользоваться для ее реализации готовой функцией collidelist() класса Rect из PyGame. После этого предстоит добавить переменную в условие проверки столкновения с границами.</p>
184
<p>Вот и все. Классическая "Змейка" на PyGame готова. Ее исходный код включает в себя всего 78 строк. Лучше изучить PyGame, Python и игровую разработку помогут дистанционные компьютерные курсы.</p>
184
<p>Вот и все. Классическая "Змейка" на PyGame готова. Ее исходный код включает в себя всего 78 строк. Лучше изучить PyGame, Python и игровую разработку помогут дистанционные компьютерные курсы.</p>
185
<p>Интересует <a>Python</a>? Добро пожаловать на курс в Otus!</p>
185
<p>Интересует <a>Python</a>? Добро пожаловать на курс в Otus!</p>
186
186