У серпні 2021 року китайський уряд назвав онлайн-ігри електронними наркотиками. Зважаючи на те, що деякі молоді китайці – затяті гравці і, як відомо, витрачають більше восьми годин на безперервну гру, нехтуючи навчанням і сім’єю та відмовляючись від будь-яких спроб соціального життя, було б важко сказати, що китайські урядовці абсолютно неправі.
У багатьох відношеннях ігрова залежність повторює і «дзеркалить» залежність від наркотиків, і наслідки можуть бути такими ж руйнівними.
Отже, що це означає для ваших пригод Genshin Impact? Напевно нічого.
З іншого боку, згідно з політикою Китаю щодо зменшення шкоди, розвиток виробництва може сповільнитися – нової зброї та полів битви може бути менше, і вони будуть далеко (українці схрестили пальці), але, можливо, лише для геймерів у Китаї.
Genshin Impact написаний мовою C++, мовою програмування роботів і керування цілим рядом інших систем. Однак ми маємо запитати... наскільки важко було б написати код гри повністю на Python?
Виявляється, це зовсім не складно. Читайте далі, щоб дізнатися, що виявив Superprof, граючись із Python.
Що таке комп’ютерна гра?
Зізнайтеся, ви вже встигли подумати: ну що це за запитання? Хто не знає, що таке комп'ютерна гра? Ну, звичайно, ми всі знаємо, що там є приголомшлива графіка, захоплюючі сюжетні лінії та інтригуючі персонажі тощо. Але що таке комп'ютерна гра за суттю?
Ігри, у які можна грати на мобільних пристроях і на ігрових консолях, повинні мати графічний інтерфейс користувача.

Ці інтерфейси, кумедно названі GUIs ( від Graphic User Interface, вимовляється як «ґуіз»), дають змогу користувачам взаємодіяти зі своїми пристроями. Якщо ви проведете пальцем по екрану на вашому смартфоні, то може з’явитися нове меню чи розгортатися якийсь додаток. Або, якщо ви відкриєте програму для написання чи малювання, ви побачите лінію, що з’являтиметься під вашим пальцем.
Для розблокування деяких телефонів на екрані потрібно намалювати графічний ключ.
Усі ці та інші приклади, наприклад, дотик до іконки на екрані для відкриття програми, свідчать, що ви взаємодієте зі своїм телефоном. Гра на телефоні чи на ігровій консолі нічим не відрізняється: ви провокуєте дії на екрані за допомогою рухів, які ви робите фізично.
Тепер, коли ми розуміємо, що комп’ютерні ігри — це, по суті, графічний інтерфейс користувача, давайте подивимося на деякі з найкращих мов програмування для їх написання.
Раніше ми згадували, що Genshin Impact написаний на C++. Для багатьох програмістів і авторів ігрового коду ця мова є улюбленою мовою, оскільки вона швидка та відображає складну красиву графіку. Однак недоліком цієї мови є її складність і те, що вона може бути непоступливою.
Також врахуйте, що для написання коду гри потрібно близько 100 людей. Або навіть більше. Це означає, що кожен кодер повинен знати мову програмування приблизно так само добре, як і інші 99 з команди. З огляду на те, наскільки важким є синтаксис C++, це непоганий результат і багато що говорить про саму мову програмування С++.
І про затятість програмістів, які цю мову обрали.
Все ж C++ програє на кросплатформному кодуванні. Незважаючи на наявність великої кількості бібліотек, які допомагають адаптувати код гри до різних операційних систем, непростий синтаксис мови ускладнює її використання. Ви справді повинні знати C++ від азів і до нескінченності та як адаптувати її до конкретних платформ, щоб написати код своєї гри цією мовою.
JavaScript привносить у гру більше цікавого (принаймні для кодерів). Навіть якщо ви не гравець, ви напевно знаєте найвідомішу гру, повністю написану на JavaScript: Minecraft.
Java — чудова кросплатформна мова: 97% усіх веб-сайтів керують поведінкою своїх сторінок за допомогою Java. Однак вона, як правило, дуже повільна – якщо ви щось знаєте про Minecraft, ви погодитесь, що це не дуже динамічна гра. Крім того, Java не дуже добре адаптована до комп’ютерів низького класу, хіба що ви не використовуєте модуль оптимізації, такий як Optifine.
Програмісти стверджують, що VB.net/C# є золотим стандартом для написання ігрового коду, але в нього є величезна ахіллесова п’ята: він працює не на всіх платформах. У наступному розділі ми розберемося, що це означає.
Python, з іншого боку, позбавляється складного синтаксису та нівелює проблему кросплатформності.
По-перше, на відміну від C++, Python є мовою інтерпретації. Немає потреби перекладати вихідний код у машинний код. Звичайно, ви трохи втрачаєте у перформності і продуктивності — але це той аспект мови Python, який робить його ідеальною мовою для машинного навчання.
По-друге, Python легко читається і не передбачає надлишкового кодування. Крім того, завдяки своїй модульній структурі у програмістів буде менша ймовірність допущення помилок, оскільки кодування стає простим питанням отримання потрібного модуля з великої бібліотеки Python і вставлення його у потрібному місці коду. Для початківців, зокрема дітей, корисним може бути проходження онлайн-курси програмування для дітей.
Ми похизувалися перевагами Python, але ми були б не ми, якби не розказали про зворотний бік медалі: якщо ви створюєте екшн-гру, що потребує великої кількості кадрів за секунду (FPS) і великої обчислювальної потужності, Python може бути не єдиною мовою, яка вам знадобиться.

Питання кросплатформності
У вас є iPhone чи ваш смартфон працює на базі Android? Ви любите грати на ПК чи Mac більше вам до душі? Або, можливо, ви глибоко стурбовані питаннями конфіденційності та безпеки, тому обрали операційну систему Linux?
Ці та інші операційні системи відомі як платформи. І саме вони, тобто їх значна кількість, і створюють головний біль кодерам.
Ви знаєте, що є магазин Google Play для програм з Android, магазин Apple для завантаження програм для iOS, а Microsoft має свій магазин для завантаження програм для персональних комп’ютерів. Відвідайте будь-який із цих «магазинів», і ви знайдете всі ті самі програми: Facebook, Snapchat і багато тих самих ігор. Це тому, що вони однакові. За наповненням і суттю, але не за своїм кодом.
Розробники ігор і кодери в цілому повинні завжди пам’ятати про те, на якій платформі (чи платформах) вони хочуть запускати свої програми. Якщо ви розробляєте виключно для Apple, ви точно втратите ринки Android і Windows, а якщо ви розробляєте лише для Windows... ну, оскільки Windows має найменшу частку ринку смартфонів, ви втратите практично весь ринок мобільних ґаджетів.
Старіші мови програмування не пристосовуються до різних платформ; ви повинні кодувати окремо для кожної платформи, на якій ви хочете запускати свою гру. Новіші, більш адаптивні мови, серед яких Python, добре працюють на багатьох платформах (ну ось воно нарешті, визначення кросплатформності!), що робить її однією з найпопулярніших мов для написання ігор.
Звичайно, Python не є новою мовою; він існує вже понад 30 років, але нещодавно став популярним, частково завдяки своїй універсальності. Дійсно, зараз Python рекламується як одна з найкращих мов для веб-розробки, поряд з Vue.js і Angular.
Як писати комп’ютерні ігри на Python
Майте на увазі, що, хоча Python простий у роботі та має багато додатків, продуктивність не є однією з його найкращих характеристик чи сильних сторін. Тому, якщо у вашій грі багато графіки та екшену, ви, ймовірно, зіткнетеся з проблемами, якщо кодуватимете лише на Python.
Однак, якщо ви пишете код для двовимірної гри з низьким рівнем графіки, як-от «Хрестики-нулики» чи класична «Змійка», Python підійде вам ідеально.
Pygame — це бібліотека модулів Python, написана та скомпільована спеціально для створення комп’ютерних ігор. Pygame містить звукові бібліотеки та комп’ютерну графіку, що готові до використання у будь-якій ігровій програмі Python. Як це працює? Потрібно пройти кілька рівнів:
- познайомитися з Tkinter, стандартним графічним інтерфейсом Python;
- навчитися малювати геометричні фігури за допомогою віджета Canvas;
- використовувати віджет прив’язки, щоб визначити, яку дію мають викликати кліки мишки;
- зробити нарис гри, намалювавши блок-схему гри;
- закодувати функції ініціалізації вашої гри;
- закодувати функції малювання вашої гри;
- закодувати логічні функції вашої гри.
Логічні функції фактично запускають гру. Вони відстежують дані користувачів, стан/етап, на якому перебуває гра, і просувають прогрес у грі. Вони ведуть облік балів, визначають, чи закінчилася гра, і виносять вердикт – перемогу чи поразку у грі.
Ці надокучливі повідомлення про «невірний хід» також надходять від логічних функцій гри.
Це, звичайно, лише короткий опис того, як кодувати гру за допомогою Pygames. Природно, ви захочете трохи прикрасити своє творіння, використовуючи різні палітри кольорів, і ви навіть можете додати ефекти – все це можна знайти в бібліотеці коду Python.
Створення простих ігор — це лише один із способів використання Python; відкрийте для себе деякі інші можливості мови програмування Python!

Недоліки написання ігор на Python
Ви вже зрозуміли (а ми про це ненав’язливо згадали кілька разів), що найбільшим недоліком написання ігрового коду на Python є низька продуктивність. У порівнянні з деякими найпопулярнішими іграми, як і з вищезгаданим Genshin Impact з його розкішною графікою та швидкою дією, Python просто не може конкурувати з іншими мовами програмування ні за швидкістю, ні за візуальними ефектами.
І ще один момент. Яким би універсальним не був Python, він не підходить для мобільного середовища. Небагато мобільних пристроїв використовують Python, оскільки його сильні сторони полягають у розробці на сервері, а не в запуску потужних програм. Тобто на смартфонах та планшетах, які зазвичай використовуються для розваг, ігри на Python не закріпляться через свою природу та структуру.
Нарешті, слід визнати, що розробка гри на Python може бути трохи виснажливою. Незважаючи на те, що його бібліотеки багаті, добре структуровані та прості у використанні, процес створення ігор на Python все ще досить заплутаний. Більшість розробників стверджують, що зусилля не варті спрощеного результату.
Тим не менш, кілька ігор на основі Python виділяються і досить відомі, серед них Frets of Fire і Save the Date. Може, дехто навіть пригадає, що Save the Date був фіналістом Indicade у 2013 році. Не знаєте, що таке Indicade? Ми би порівняли його з кінофестивалем Sundance, тільки для комп’ютерних ігор.
У підсумку наголосимо, що писати ігри на Python цілком можливо, хоч і трудомістко. А от де Python справді проявляється у всій своїй цифровій красі, то це наука про дані на Python...









