HTML Diff
0 added 0 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