Игровая индустрия стремительно развивается. Одним из самых распространенных языков разработки игр и иного развлекательного контента является C++. Он достаточно сложный, особенно на первых порах. Также популярностью пользуется его предшественник – C.
Если верить Google, написать собственную игру может каждый. Для этого предстоит выбрать язык разработки, а затем выучить его. Далее – определиться с типом приложения, реализовать в виде кода.
В данной статье будет рассказано о том, как написать собственную игру на C++. Рассмотрим ключевые моменты процесса, разберемся с мотивацией. Информация пригодится и новичкам, и продвинутым разработчикам.
Мотивационный вопрос
Перед тем, как программировать, нужно задуматься над истинной мотивацией идеи. Google указывает на то, что создать собственную игру «просто так» не получится. Что-то должно двигать человеком.
Игровой код на C++ — это отличный способ потренироваться в разработке, изучить ее азы. А еще – создать проект, который может принести прибыль при грамотной реализации.
Почему C++
Игра – это простой программный код. Но на C++ можно создавать совершенно разные приложения. Игры – лишь начало. Данный язык программирования является универсальным и самым популярным.
Он выбирается разработчиками по нескольким причинам:
- широкая распространенность;
- возможность создавать не только простые проекты, но и сложные;
- кроссплатформенность;
- функциональность;
- удобство работы с кодом.
Google указывает на то, что нынешний рынок труда остро нуждается в программистах на C++. Начиная с мелких игр, человек сможет отработать навыки и знания, дорасти до крупных масштабных работ.
Ключевые компоненты проекта
Перед написанием собственной игры, нужно разобраться с тем, из чего она состоит. Google указывает на то, что любое приложение включает в себя:
- графику;
- логику;
- интерфейс;
- звук;
- историю;
- игровой процесс (физику).
Каждый компонент требует тщательной проработки. Новички могут использовать для быстрого создания игры готовые движки. Они включают в себя необходимые элементы для разработки развлекательного контента.
Графическая составляющая
Это – картинка на экране. Включает в себя изображения и эффекты. Сюда можно отнести:
- 3D-компоненты;
- текстуры;
- 2D-плитки;
- 2D-модели;
- видео с полным движением (FMV).
Над графикой лучше работать дизайнерам. Программистам рекомендуется сконцентрироваться на создании «внутренности» будущей игры. А визуальную составляющую оставить тем, кто занимается этим вопросом профессионально.
Звуковые эффекты
Звук – еще один важный компонент игры. Google подчеркивает, что сюда относят не только музыку, но и эффекты. Они будут воспроизводиться во время работы приложения. Сюда также относят эффекты Фоули («отголоски» окружающей среды) и мод-треки.
История
Предыстория игры, включающая в себя всю информацию, полученную от игрока в процессе работы приложения. Пример – выигрыши и проигрыши. История является игровым элементом. Это – неизменяемая последовательность. Можно охарактеризовать ее «прогрессом».
Физика
То, как будут взаимодействовать объекты на экране. Проработка физической составляющей, согласно Google – это трудный и важный процесс. «С нуля» им занимаются преимущественно опытные разработчики. Остальные предпочитают пользоваться готовыми библиотеками, фреймворками и движками.
Как можно создавать игры
В Google удается отыскать тысячи ответов на вопрос о том, как можно создавать игры на любом выбранном языке. Это относится и к простым программным кодам, и к сложным. Пользователь может воспользоваться:
- Написанием кода через библиотеки и фреймворки, с нуля. Неплохой вариант для небольших проектов.
- Собственным движком. Такой подход присущ большинству крупных компаний. Пример – ReEngine от Capcom.
- Готовым движком. Наиболее подходящий вариант для быстрого старта. Игровые движки включают в себя «все необходимое» для того, чтобы человек мог написать собственную игру без существенных навыков в программировании.
Далее рассмотрим первый вариант. За основу возьмем несколько элементарных игр. Если хочется получить на выходе более сложный и совершенный проект, рекомендуется присмотреться к движкам.
Алгоритм работ
Писать программы, согласно Google, рекомендуется, следуя конкретному алгоритму. В противном случае процесс рискует затянуться на месяцы, а то и годы. Особенно если речь идет о команде новичков.
Программный игровой код лучше составлять так:
- Продумать общую концепцию. Составить историю игры.
- Собрать команду помощников. Самостоятельно работать над небольшим проектом – это нормально. Но, если на C++ планируется релиз игры не по типу «змейки» или «угадай число», лучше запастись поддержкой. Это поможет ускорить процесс разработки.
- Продумать интерфейс, графику и физику. Этот шаг пропускается, если разработчик предпочел пользоваться движками.
- Непосредственно создать игровой код. Это – самый сложный и важный этап. Он требует определенных навыков программирования.
- Провести тест. Без тестирования и проверок ни один контент не может рассчитывать на успешный релиз.
- Исправить обнаруженные ошибки и неполадки. В конце – снова проверить работоспособность кода.
Когда все готово, можно использовать последний шаг – релиз игры. Пример – на своем сайте или в фирменных интернет-магазинчиках.
Данный алгоритм универсален. Он, по Google, подойдет не только для игры на C++, но и для любого другого языка программирования.
Змейка
«Змейка» — популярная и простая игра, которая нравилась всем детям 90-х. Она подходит для любых платформ, включая мобильные операционные системы. Сейчас можно отыскать огромное количество вариантов «Змейки», включая онлайн верси��.
За несколько свободных вечеров, обладая минимальными знаниями в C++, удастся написать собственную «Змейку из начала 90-х». Она не выделяется графикой, но общий смысл создания игры на выбранном языке программирования станет понятен. Данный проект назовем Oldschool Snake.
Принцип игры
Для того, чтобы начать процесс, нужно продумать правила и особенности управления:
- Движение змейки осуществляется за счет курсора мыши.
- При нажатии на Esc происходит выход из игры.
- Если система спрашивает «Еще раз?», требуется кликнуть по N на клавиатуре. Это приведет к завершению игрового процесса.
- На собственных хвост и стенки змея на экране не должна натыкаться. Это приводит к проигрышу. То есть, к смерти змейки.
- Движение «хвостом вперед» не поддерживается. Если так попытаться сделать, последует мгновенная смерть.
- Для роста змеи необходимо кормить ее. Для этого – собирать доллары на экране. Чем больше съела змейка, тем крупнее (длиннее) она становится.
- Каждая «подкормка» приносит определенное количество баллов. Они помогут сформировать ТОП-10 рейтинг.
Рейтинг, получаемый в игре, прямо пропорционален длине змейки, а также обратно пропорционален времени, потраченному на съедение очередной порции «подпитки».
В Google можно отыскать немало других правил и игровых особенностей для «змеек». Только начинать разработку рекомендуется с такого элементарного алгоритма. Он не позволит пользователю запутаться.
Лицензия
Google указывает на то, что любая игрушка или иной компьютерный софт должны обладать лицензией. Рекомендуется на первых порах отдать предпочтение GNU GPL.
Это – вариант для «свободных программистов». Позволяет спокойно распространять контент, изучать исходные коды и корректировать их под собственные нужды. Но только для некоммерческих целей.
Особенности реализации
Играть в такую игру достаточно легко. Она обладает простой логикой и графикой. Можно написать подобное приложение за несколько вечеров. Здесь стоит запомнить следующее:
- Изначально приложение создавалось для Windows 2000 Professional и выше.
- Для того, чтобы перенести игру на другие ОС, потребуется переписать класс CScreen и иметь порт библиотеки conio.h.
- Компиляция происходила через TDM-GCC 4.8.1. на 64-бит. Можно попробовать запуск через иные компиляторы.
Данное приложение проблематично назвать «современной игрой», но на первых порах ее достаточно. Вот архив с исходным кодом.
Виселица
А вот еще один довольно интересный пример – «Виселица». Игра, которая, согласно Google, известная многим. Здесь она представлена своеобразным механизмом, коим является любое приложение. Обладает:
- основой – каркасом;
- дополняющими направлениями – теми, что задают границы возможностей;
- концом.
С данными компонентами в элементарном приложении проблем не возникнет. Особенно если посмотреть в Google правила «Виселицы». Для крупных проектов над каждой составляющей утилиты предстоит немало потрудиться.
Правила и принципы
«Виселица» — это игра в стиле «угадай слово». Предложенный пример реализовывается в пределах одного диалогового поля. Случайным образом программа загадывает слово. Пользователю предлагаются 10 попыток. Если он ошибается – засчитывается проигрыш.
После запуска система предложит сыграть. Для ответа необходимо нажать на клавиатуре «Д» (да) или «Н» (нет). В первом случае происходит запуск операции. Во втором – выход из системы.
После загадывания слова приложение покажет количество букв в соответствующей «комбинации». Весь процесс происходит на русском языке. При вводе неправильной буквы (не на той раскладке) система должна сообщить о том, что введены неверные данные. Попытка хода не засчитывается.
Ввод данных – с маленькой буквы. При попытке указать заглавную, игра попросит исправится. Если клиент угадал букву, она отобразится в положенных местах вместо «знака вопроса». Повторный ввод ранее указанных букв не отнимает ход. Программа просто просит пользователя заменить ее на другую.
Также стоит обратить внимание на то, что после каждого хода игрока приложение отображает количество попыток, отведенных на угадывание слова. Они снимаются, если допущена ошибка. В противном случае – сохраняются.
Реализация
При написании кода «Виселицы» в приведенном далее примере непосредственный процесс начинается с 84 строки. Тут необходимо запомнить следующее:
- Начинает работать бесконечный цикл. Google характеризует его как петлю.
- Цикл работает до тех пор, пока игрок не угадает слово или не допустит установленное количество ошибок.
- В коде есть проверка на соответствие символов буквам русского алфавита.
- В процессе реализации проверяется повторный ввод ранее указанных букв.
- При запуске система выдаст сообщение с правилами. Не придется лезть в Google и разбираться с принципами работы «Виселицы».
Выйти можно в любой момент. Здесь – исходный код приложения.
Как быстро научиться программировать
Создание собственной игры – дело не самое трудное, если речь идет о небольших проектах. Когда у пользователя есть заинтересованность в крупных и сложных работах, предстоит многое изучить. Быстрее вникнуть в тему можно, грамотно выбрав концепцию обучения:
- Поступление в техникум. Вариант для тех, кто думает развиваться в сфере программирования. В техникумы берут после 9 или 11 классов. Здесь не учат писать игры. Google указывает на то, что в подобных учреждениях дают «базу» для дальнейшего развития. Обучение 3-4 года. В конце выдается диплом о среднем специальном образовании.
- ВУЗы. Поступление в университет на «разработку и программирование» – лучшее решение для тех, кто готов полноценно погрузиться в азы соответствующих процессов. ВУЗы изучают различные ЯП, включая C++. Обучение отнимает 4-6 лет. В конце выдается диплом о высшем образовании в выбранном направлении. На 2-3 курс можно зачислиться при предварительном обучении в техникуме «на программиста». Образовательный процесс сопровождается кураторством и практикой.
- Самообучение. Неплохой вариант для тех, кто обладает особой усидчивостью. В Google можно отыскать множество туториалов и видео о разработке игр на любом языке, а не только на C++. Скорость обучения контролируется пользователем. Он может сконцентрироваться на более «проблемных» для себя областях и отдать предпочтение практике. Из минусов – отсутствие документального подтверждения навыков. Остается собирать портфолио и участвовать во всевозможных конкурсах.
Если же хочется побыстрее освоить навыки игрового программирования, стоит присмотреться к дистанционным онлайн курсам. Пример – от OTUS. Этот образовательный центр предлагает учиться в режиме онлайн инновационным IT-профессиям. В срок от нескольких месяцев до года пользователя научат с «нуля» не только писать сложные программы, но и создавать собственный развлекательный контент. Образовательный процесс разбит на «блоки» — для новичков и опытных разработчиков. Можно выбрать сразу одно или несколько направлений обучения. Весь процесс сопровождается кураторством, а также многочисленной практикой и интересными домашними заданиями. В конце каждого курса клиенты получают не только собственное портфолио, но и электронный сертификат, подтверждающий знания в выбранной области.
Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus! Ниже – один из них:
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Создание игры на СИ++: что знать, план, примеры OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Игровая индустрия стремительно развивается. Одним из самых распространенных языков разработки игр и иного развлекательного контента является C++. Он достаточно сложный, особенно на первых порах. Также популярностью пользуется его предшественник – C. Если верить Google, написать собственную игру может каждый. Для этого предстоит выбрать язык разработки, а затем выучить его. Далее – определиться с типом приложения," />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/sozdanie-igry-na-si-chto-znat-plan-primery/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/sozdanie-igry-na-si-chto-znat-plan-primery\/#article","name":"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u0433\u0440\u044b \u043d\u0430 \u0421\u0418++: \u0447\u0442\u043e \u0437\u043d\u0430\u0442\u044c, \u043f\u043b\u0430\u043d, \u043f\u0440\u0438\u043c\u0435\u0440\u044b OTUS","headline":"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u0433\u0440\u044b \u043d\u0430 \u0421\u0418++: \u0447\u0442\u043e \u0437\u043d\u0430\u0442\u044c, \u043f\u043b\u0430\u043d, \u043f\u0440\u0438\u043c\u0435\u0440\u044b","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/11\/oj-1080x720-26.png","width":1080,"height":720},"datePublished":"2022-11-02T18:58:15+00:00","dateModified":"2022-11-02T19:19:17+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/sozdanie-igry-na-si-chto-znat-plan-primery\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/sozdanie-igry-na-si-chto-znat-plan-primery\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, c++"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/sozdanie-igry-na-si-chto-znat-plan-primery\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/sozdanie-igry-na-si-chto-znat-plan-primery\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/sozdanie-igry-na-si-chto-znat-plan-primery\/#listItem","position":2,"name":"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u0433\u0440\u044b \u043d\u0430 \u0421\u0418++: \u0447\u0442\u043e \u0437\u043d\u0430\u0442\u044c, \u043f\u043b\u0430\u043d, \u043f\u0440\u0438\u043c\u0435\u0440\u044b","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/sozdanie-igry-na-si-chto-znat-plan-primery\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/sozdanie-igry-na-si-chto-znat-plan-primery\/#webpage","url":"https:\/\/otus.ru\/journal\/sozdanie-igry-na-si-chto-znat-plan-primery\/","name":"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u0433\u0440\u044b \u043d\u0430 \u0421\u0418++: \u0447\u0442\u043e \u0437\u043d\u0430\u0442\u044c, \u043f\u043b\u0430\u043d, \u043f\u0440\u0438\u043c\u0435\u0440\u044b OTUS","description":"\u0418\u0433\u0440\u043e\u0432\u0430\u044f \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u044f \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0433\u0440 \u0438 \u0438\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f C++. \u041e\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0439, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u043e\u0440\u0430\u0445. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a \u2013 C. \u0415\u0441\u043b\u0438 \u0432\u0435\u0440\u0438\u0442\u044c Google, \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0438\u0433\u0440\u0443 \u043c\u043e\u0436\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u044f\u0437\u044b\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0443\u0447\u0438\u0442\u044c \u0435\u0433\u043e. \u0414\u0430\u043b\u0435\u0435 \u2013 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0442\u0438\u043f\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f,","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/sozdanie-igry-na-si-chto-znat-plan-primery\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/11\/oj-1080x720-26.png","@id":"https:\/\/otus.ru\/journal\/sozdanie-igry-na-si-chto-znat-plan-primery\/#mainImage","width":1080,"height":720},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/sozdanie-igry-na-si-chto-znat-plan-primery\/#mainImage"},"datePublished":"2022-11-02T18:58:15+00:00","dateModified":"2022-11-02T19:19:17+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/4869" /><link rel='shortlink' href='https://otus.ru/journal/?p=4869' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fsozdanie-igry-na-si-chto-znat-plan-primery%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fsozdanie-igry-na-si-chto-znat-plan-primery%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-4869 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-4869" class="the-post post-4869 post type-post status-publish format-standard has-post-thumbnail category-polza tag-c">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Создание игры на СИ++: что знать, план, примеры
</h1>
<a href="https://otus.ru/journal/sozdanie-igry-na-si-chto-znat-plan-primery/" class="date-link" data-wpel-link="internal"><time class="post-date">2 ноября, 2022</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-26.png" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Создание игры на СИ++: что знать, план, примеры" title="Создание игры на СИ++: что знать, план, примеры" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-26-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-26-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-26-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-26-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-26-270x180.png 270w" data-src="https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-26-770x515.png" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#%D0%9C%D0%BE%D1%82%D0%B8%D0%B2%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81" title="Мотивационный вопрос">Мотивационный вопрос</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83_C" title="Почему C++">Почему C++</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%9A%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0" title="Ключевые компоненты проекта">Ключевые компоненты проекта</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%93%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%81%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B0%D1%8F" title="Графическая составляющая">Графическая составляющая</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%97%D0%B2%D1%83%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82%D1%8B" title="Звуковые эффекты">Звуковые эффекты</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F" title="История">История</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%A4%D0%B8%D0%B7%D0%B8%D0%BA%D0%B0" title="Физика">Физика</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%9A%D0%B0%D0%BA_%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%B2%D0%B0%D1%82%D1%8C_%D0%B8%D0%B3%D1%80%D1%8B" title="Как можно создавать игры">Как можно создавать игры</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B0%D0%B1%D0%BE%D1%82" title="Алгоритм работ">Алгоритм работ</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%97%D0%BC%D0%B5%D0%B9%D0%BA%D0%B0" title="Змейка">Змейка</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%B8%D0%B3%D1%80%D1%8B" title="Принцип игры">Принцип игры</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F" title="Лицензия">Лицензия</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8" title="Особенности реализации">Особенности реализации</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-14" href="#%D0%92%D0%B8%D1%81%D0%B5%D0%BB%D0%B8%D1%86%D0%B0" title="Виселица">Виселица</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-15" href="#%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D0%B8_%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B" title="Правила и принципы">Правила и принципы</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-16" href="#%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" title="Реализация">Реализация</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-17" href="#%D0%9A%D0%B0%D0%BA_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE_%D0%BD%D0%B0%D1%83%D1%87%D0%B8%D1%82%D1%8C%D1%81%D1%8F_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C" title="Как быстро научиться программировать">Как быстро научиться программировать</a></li></ul></nav></div>
<p>Игровая индустрия стремительно развивается. Одним из самых распространенных языков разработки игр и иного развлекательного контента является C++. Он достаточно сложный, особенно на первых порах. Также популярностью пользуется его предшественник – C.</p>
<p>Если верить Google, написать собственную игру может каждый. Для этого предстоит выбрать язык разработки, а затем выучить его. Далее – определиться с типом приложения, реализовать в виде кода.</p>
<p>В данной статье будет рассказано о том, как написать собственную игру на C++. Рассмотрим ключевые моменты процесса, разберемся с мотивацией. Информация пригодится и новичкам, и продвинутым разработчикам.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D0%BE%D1%82%D0%B8%D0%B2%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81"></span>Мотивационный вопрос<span class="ez-toc-section-end"></span></h2>
<p>Перед тем, как программировать, нужно задуматься над истинной мотивацией идеи. Google указывает на то, что создать собственную игру «просто так» не получится. Что-то должно двигать человеком.</p>
<p>Игровой код на C++ — это отличный способ потренироваться в разработке, изучить ее азы. А еще – создать проект, который может принести прибыль при грамотной реализации.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83_C"></span>Почему C++<span class="ez-toc-section-end"></span></h3>
<p>Игра – это простой программный код. Но на C++ можно создавать совершенно разные приложения. Игры – лишь начало. Данный <a href="https://otus.ru/journal/yazyki-programmirovaniya-harakteristika-opisanie-vidy/" data-wpel-link="internal">язык программирования</a> является универсальным и самым популярным.</p>
<p>Он выбирается разработчиками по нескольким причинам:</p>
<ul><li>широкая распространенность;</li><li>возможность создавать не только простые проекты, но и сложные;</li><li>кроссплатформенность;</li><li>функциональность;</li><li>удобство работы с кодом.</li></ul>
<p>Google указывает на то, что нынешний рынок труда остро нуждается в программистах на C++. Начиная с мелких игр, человек сможет отработать навыки и знания, дорасти до крупных масштабных работ.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0"></span>Ключевые компоненты проекта<span class="ez-toc-section-end"></span></h2>
<p>Перед написанием собственной игры, нужно разобраться с тем, из чего она состоит. Google указывает на то, что любое приложение включает в себя:</p>
<ul><li>графику;</li><li>логику;</li><li>интерфейс;</li><li>звук;</li><li>историю;</li><li>игровой процесс (физику).</li></ul>
<p>Каждый компонент требует тщательной проработки. Новички могут использовать для быстрого создания игры готовые движки. Они включают в себя необходимые элементы для разработки развлекательного контента.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%93%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%81%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B0%D1%8F"></span>Графическая составляющая<span class="ez-toc-section-end"></span></h3>
<p>Это – картинка на экране. Включает в себя изображения и эффекты. Сюда можно отнести:</p>
<ul><li>3D-компоненты;</li><li>текстуры;</li><li>2D-плитки;</li><li>2D-модели;</li><li>видео с полным движением (FMV).</li></ul>
<p>Над графикой лучше работать дизайнерам. Программистам рекомендуется сконцентрироваться на создании «внутренности» будущей игры. А визуальную составляющую оставить тем, кто занимается этим вопросом профессионально.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%97%D0%B2%D1%83%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82%D1%8B"></span>Звуковые эффекты<span class="ez-toc-section-end"></span></h3>
<p>Звук – еще один важный компонент игры. Google подчеркивает, что сюда относят не только музыку, но и эффекты. Они будут воспроизводиться во время работы приложения. Сюда также относят эффекты Фоули («отголоски» окружающей среды) и мод-треки.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F"></span>История<span class="ez-toc-section-end"></span></h3>
<p>Предыстория игры, включающая в себя всю информацию, полученную от игрока в процессе работы приложения. Пример – выигрыши и проигрыши. История является игровым элементом. Это – неизменяемая последовательность. Можно охарактеризовать ее «прогрессом».</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A4%D0%B8%D0%B7%D0%B8%D0%BA%D0%B0"></span>Физика<span class="ez-toc-section-end"></span></h3>
<p>То, как будут взаимодействовать объекты на экране. Проработка физической составляющей, согласно Google – это трудный и важный процесс. «С нуля» им занимаются преимущественно опытные разработчики. Остальные предпочитают пользоваться готовыми библиотеками, фреймворками и движками.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%B2%D0%B0%D1%82%D1%8C_%D0%B8%D0%B3%D1%80%D1%8B"></span>Как можно создавать игры<span class="ez-toc-section-end"></span></h2>
<p>В Google удается отыскать тысячи ответов на вопрос о том, как можно создавать игры на любом выбранном языке. Это относится и к простым программным кодам, и к сложным. Пользователь может воспользоваться:</p>
<ol><li>Написанием кода через <a href="https://otus.ru/journal/frejmvork-i-biblioteka-v-javascript-raznica-osnovnye-elementy/" data-wpel-link="internal">библиотеки и фреймворки</a>, с нуля. Неплохой вариант для небольших проектов.</li><li>Собственным движком. Такой подход присущ большинству крупных компаний. Пример – ReEngine от Capcom.</li><li>Готовым движком. Наиболее подходящий вариант для быстрого старта. Игровые движки включают в себя «все необходимое» для того, чтобы человек мог написать собственную игру без существенных навыков в программировании.</li></ol>
<p>Далее рассмотрим первый вариант. За основу возьмем несколько элементарных игр. Если хочется получить на выходе более сложный и совершенный проект, рекомендуется присмотреться к движкам.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%80%D0%B0%D0%B1%D0%BE%D1%82"></span>Алгоритм работ<span class="ez-toc-section-end"></span></h3>
<p>Писать программы, согласно Google, рекомендуется, следуя конкретному алгоритму. В противном случае процесс рискует затянуться на месяцы, а то и годы. Особенно если речь идет о команде новичков.</p>
<p>Программный игровой код лучше составлять так:</p>
<ol><li>Продумать общую концепцию. Составить историю игры.</li><li>Собрать команду помощников. Самостоятельно работать над небольшим проектом – это нормально. Но, если на C++ планируется релиз игры не по типу «змейки» или «угадай число», лучше запастись поддержкой. Это поможет ускорить процесс разработки.</li><li>Продумать интерфейс, графику и физику. Этот шаг пропускается, если разработчик предпочел пользоваться движками.</li><li>Непосредственно создать игровой код. Это – самый сложный и важный этап. Он требует определенных навыков программирования.</li><li>Провести тест. Без тестирования и проверок ни один контент не может рассчитывать на успешный релиз.</li><li>Исправить обнаруженные ошибки и неполадки. В конце – снова проверить работоспособность кода.</li></ol>
<p>Когда все готово, можно использовать последний шаг – релиз игры. Пример – на своем сайте или в фирменных интернет-магазинчиках.</p>
<p>Данный алгоритм универсален. Он, по Google, подойдет не только для игры на C++, но и для любого другого языка программирования.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%97%D0%BC%D0%B5%D0%B9%D0%BA%D0%B0"></span>Змейка<span class="ez-toc-section-end"></span></h2>
<p>«Змейка» — популярная и простая игра, которая нравилась всем детям 90-х. Она подходит для любых платформ, включая мобильные операционные системы. Сейчас можно отыскать огромное количество вариантов «Змейки», включая онлайн версии.</p>
<p>За несколько свободных вечеров, обладая минимальными знаниями в C++, удастся написать собственную «Змейку из начала 90-х». Она не выделяется графикой, но общий смысл создания игры на выбранном языке программирования станет понятен. Данный проект назовем Oldschool Snake.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%B8%D0%B3%D1%80%D1%8B"></span>Принцип игры<span class="ez-toc-section-end"></span></h3>
<p>Для того, чтобы начать процесс, нужно продумать правила и особенности управления:</p>
<ol><li>Движение змейки осуществляется за счет курсора мыши.</li><li>При нажатии на Esc происходит выход из игры.</li><li>Если система спрашивает «Еще раз?», требуется кликнуть по N на клавиатуре. Это приведет к завершению игрового процесса.</li><li>На собственных хвост и стенки змея на экране не должна натыкаться. Это приводит к проигрышу. То есть, к смерти змейки.</li><li>Движение «хвостом вперед» не поддерживается. Если так попытаться сделать, последует мгновенная смерть.</li><li>Для роста змеи необходимо кормить ее. Для этого – собирать доллары на экране. Чем больше съела змейка, тем крупнее (длиннее) она становится.</li><li>Каждая «подкормка» приносит определенное количество баллов. Они помогут сформировать ТОП-10 рейтинг.</li></ol>
<p>Рейтинг, получаемый в игре, прямо пропорционален длине змейки, а также обратно пропорционален времени, потраченному на съедение очередной порции «подпитки».</p>
<p>В Google можно отыскать немало других правил и игровых особенностей для «змеек». Только начинать разработку рекомендуется с такого элементарного алгоритма. Он не позволит пользователю запутаться.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F"></span>Лицензия<span class="ez-toc-section-end"></span></h3>
<p>Google указывает на то, что любая игрушка или иной компьютерный софт должны обладать лицензией. Рекомендуется на первых порах отдать предпочтение GNU GPL.</p>
<p>Это – вариант для «свободных программистов». Позволяет спокойно распространять контент, изучать исходные коды и корректировать их под собственные нужды. Но только для некоммерческих целей.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8"></span>Особенности реализации<span class="ez-toc-section-end"></span></h3>
<p>Играть в такую игру достаточно легко. Она обладает простой логикой и графикой. Можно написать подобное приложение за несколько вечеров. Здесь стоит запомнить следующее:</p>
<ol><li>Изначально приложение создавалось для Windows 2000 Professional и выше.</li><li>Для того, чтобы перенести игру на другие ОС, потребуется переписать класс CScreen и иметь порт библиотеки conio.h.</li><li>Компиляция происходила через TDM-GCC 4.8.1. на 64-бит. Можно попробовать запуск через иные компиляторы.</li></ol>
<p>Данное приложение проблематично назвать «современной игрой», но на первых порах ее достаточно. <a href="https://code-live.ru/media/upload/files/2014/09/02/snake.zip" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Вот<span class="wpel-icon wpel-image wpel-icon-6"></span></a> архив с исходным кодом.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92%D0%B8%D1%81%D0%B5%D0%BB%D0%B8%D1%86%D0%B0"></span>Виселица<span class="ez-toc-section-end"></span></h2>
<p>А вот еще один довольно интересный пример – «Виселица». Игра, которая, согласно Google, известная многим. Здесь она представлена своеобразным механизмом, коим является любое приложение. Обладает:</p>
<ul><li>основой – каркасом;</li><li>дополняющими направлениями – теми, что задают границы возможностей;</li><li>концом.</li></ul>
<p><a href="https://otus.ru/journal/chto-mozhno-delat-s-dannymi/" data-wpel-link="internal">С данными</a> компонентами в элементарном приложении проблем не возникнет. Особенно если посмотреть в Google правила «Виселицы». Для крупных проектов над каждой составляющей утилиты предстоит немало потрудиться.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D0%B8_%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B"></span>Правила и принципы<span class="ez-toc-section-end"></span></h3>
<p>«Виселица» — это игра в стиле «угадай слово». Предложенный пример реализовывается в пределах одного диалогового поля. Случайным образом программа загадывает слово. Пользователю предлагаются 10 попыток. Если он ошибается – засчитывается проигрыш.</p>
<p>После запуска система предложит сыграть. Для ответа необходимо нажать на клавиатуре «Д» (да) или «Н» (нет). В первом случае происходит запуск операции. Во втором – выход из системы.</p>
<p>После загадывания слова приложение покажет количество букв в соответствующей «комбинации». Весь процесс происходит на русском языке. При вводе неправильной буквы (не на той раскладке) система должна сообщить о том, что введены неверные данные. Попытка хода не засчитывается.</p>
<p>Ввод данных – с маленькой буквы. При попытке указать заглавную, игра попросит исправится. Если клиент угадал букву, она отобразится в положенных местах вместо «знака вопроса». Повторный ввод ранее указанных букв не отнимает ход. Программа просто просит пользователя заменить ее на другую.</p>
<p>Также стоит обратить внимание на то, что после каждого хода игрока приложение отображает количество попыток, отведенных на угадывание слова. Они снимаются, если допущена ошибка. В противном случае – сохраняются.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F"></span>Реализация<span class="ez-toc-section-end"></span></h3>
<p>При написании кода «Виселицы» в приведенном далее примере непосредственный процесс начинается с 84 строки. Тут необходимо запомнить следующее:</p>
<ol><li>Начинает работать бесконечный <a href="https://otus.ru/journal/cikl-osobennosti-i-opredelenie/" data-wpel-link="internal">цикл</a>. Google характеризует его как петлю.</li><li>Цикл работает до тех пор, пока игрок не угадает слово или не допустит установленное количество ошибок.</li><li>В коде есть проверка на соответствие символов буквам русского алфавита.</li><li>В процессе реализации проверяется повторный ввод ранее указанных букв.</li><li>При запуске система выдаст сообщение с правилами. Не придется лезть в Google и разбираться с принципами работы «Виселицы».</li></ol>
<p>Выйти можно в любой момент. <a href="http://andryuhan.ru/si/567" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Здесь<span class="wpel-icon wpel-image wpel-icon-6"></span></a> – исходный код приложения.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE_%D0%BD%D0%B0%D1%83%D1%87%D0%B8%D1%82%D1%8C%D1%81%D1%8F_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C"></span>Как быстро научиться программировать<span class="ez-toc-section-end"></span></h2>
<p>Создание собственной игры – дело не самое трудное, если речь идет о небольших проектах. Когда у пользователя есть заинтересованность в крупных и сложных работах, предстоит многое изучить. Быстрее вникнуть в тему можно, грамотно выбрав концепцию обучения:</p>
<ol><li>Поступление в техникум. Вариант для тех, кто думает развиваться в сфере программирования. В техникумы берут после 9 или 11 классов. Здесь не учат писать игры. Google указывает на то, что в подобных учреждениях дают «базу» для дальнейшего развития. Обучение 3-4 года. В конце выдается диплом о среднем специальном образовании.</li><li>ВУЗы. Поступление в университет на «разработку и программирование» – лучшее решение для тех, кто готов полноценно погрузиться в азы соответствующих процессов. ВУЗы изучают различные ЯП, включая C++. Обучение отнимает 4-6 лет. В конце выдается диплом о высшем образовании в выбранном направлении. На 2-3 курс можно зачислиться при предварительном обучении в техникуме «на программиста». Образовательный процесс сопровождается кураторством и практикой.</li><li>Самообучение. Неплохой вариант для тех, кто обладает особой усидчивостью. В Google можно отыскать множество туториалов и <a href="https://www.youtube.com/playlist?list=PLLnZvlhOi4CwP2h1ADCAR1hpSgrYqPvjs" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">видео<span class="wpel-icon wpel-image wpel-icon-6"></span></a> о разработке игр на любом языке, а не только на C++. Скорость обучения контролируется пользователем. Он может сконцентрироваться на более «проблемных» для себя областях и отдать предпочтение практике. Из минусов – отсутствие документального подтверждения навыков. Остается собирать портфолио и участвовать во всевозможных конкурсах.</li></ol>
<p>Если же хочется побыстрее освоить навыки игрового программирования, стоит присмотреться к дистанционным онлайн курсам. Пример – от OTUS. Этот образовательный центр предлагает учиться в режиме онлайн инновационным IT-профессиям. В срок от нескольких месяцев до года пользователя научат с «нуля» не только писать сложные программы, но и создавать собственный развлекательный контент. Образовательный процесс разбит на «блоки» — для новичков и опытных разработчиков. Можно выбрать сразу одно или несколько направлений обучения. Весь процесс сопровождается кураторством, а также многочисленной практикой и интересными домашними заданиями. В конце каждого курса клиенты получают не только собственное портфолио, но и электронный сертификат, подтверждающий знания в выбранной области.</p>
<p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a href="https://otus.ru/?utm_source=oj" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Otus<span class="wpel-icon wpel-image wpel-icon-6"></span></a>!</em> Ниже – один из них:</p>
<figure class="wp-block-image"><a href="https://otus.ru/lessons/cpp-professional/?utm_source=oj&utm_medium=affilate&utm_campaign=cplus" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2022/06/C_970x90-1.png" alt="Создание игры на СИ++: что знать, план, примеры" class="wp-image-3822" srcset="https://otus.ru/journal/wp-content/uploads/2022/06/C_970x90-1.png 970w, https://otus.ru/journal/wp-content/uploads/2022/06/C_970x90-1-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2022/06/C_970x90-1-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2022/06/C_970x90-1-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
<p></p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/c/" rel="tag" data-wpel-link="internal">c++</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fsozdanie-igry-na-si-chto-znat-plan-primery%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fsozdanie-igry-na-si-chto-znat-plan-primery%2F&text=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B8%D0%B3%D1%80%D1%8B%20%D0%BD%D0%B0%20%D0%A1%D0%98%2B%2B%3A%20%D1%87%D1%82%D0%BE%20%D0%B7%D0%BD%D0%B0%D1%82%D1%8C%2C%20%D0%BF%D0%BB%D0%B0%D0%BD%2C%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fsozdanie-igry-na-si-chto-znat-plan-primery%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fsozdanie-igry-na-si-chto-znat-plan-primery%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2022%2F11%2Foj-1080x720-26.png&description=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B8%D0%B3%D1%80%D1%8B%20%D0%BD%D0%B0%20%D0%A1%D0%98%2B%2B%3A%20%D1%87%D1%82%D0%BE%20%D0%B7%D0%BD%D0%B0%D1%82%D1%8C%2C%20%D0%BF%D0%BB%D0%B0%D0%BD%2C%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/chto-programmirovat-idei-dlya-proektov-na-c/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/chto-programmirovat-idei-dlya-proektov-na-c/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Что программировать: идеи для проектов на C++" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-25-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-25-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-25-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-25-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-25-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-25-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-25-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-25.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-25-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Что программировать: идеи для проектов на C++" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/chto-programmirovat-idei-dlya-proektov-na-c/" data-wpel-link="internal">Что программировать: идеи для проектов на C++</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/chto-programmirovat-idei-dlya-proektov-na-c/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-11-02T18:46:11+00:00">2 ноября, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">7 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/cikl-osobennosti-i-opredelenie/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/cikl-osobennosti-i-opredelenie/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Цикл: особенности и определение" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-27-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-27-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-27-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-27-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-27-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-27-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-27-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-27.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/11/oj-1080x720-27-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Цикл: особенности и определение" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/cikl-osobennosti-i-opredelenie/" data-wpel-link="internal">Цикл: особенности и определение</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/cikl-osobennosti-i-opredelenie/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-11-02T19:05:37+00:00">2 ноября, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">4 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/sozdanie-igry-na-si-chto-znat-plan-primery\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 19:27:00 GMT -->