Как написать мобильную игру
Перейти к содержимому

Как написать мобильную игру

Как создать игру на Андроид с нуля

Создание игр

Наверняка любой пользователь смартфонов под управлением Андроид задумывался о создании собственной игры с уникальным и увлекательным сюжетом. Однако останавливался на уровне идеи из-за отсутствия опыта в программировании и разработке сюжетов, а также значительной конкуренции со стороны крупных корпораций, на которые работают целые команды гейм-девелоперов. Существует огромное количество способов написания игр на различных движках и с использованием сред разработки. Как грамотно подойти к решению данного вопроса и начать создание игры с нуля?

Выбираем способ разработки

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

  • Онлайн на специальных сайтах. Существует огромное количество ресурсов в сети Интернет, предлагающих создание собственной игры на базе предлагаемых шаблонов. От пользователя может даже не потребоваться регистрация на сайте. Для создания игровой сцены потребуется подобрать персонажей, настроить окружение, добавить объекты для взаимодействия, а также использовать определенный сценарий и установить необходимые дополнительные опции. Для данного метода не потребуется тратить много времени и глубокие познания языков программирования. Однако же в этом случае и не получится создать уникальный компонент, так как в распоряжении исключительно готовые инструменты.
  • Если вы желаете создавать игры без подключения к Интернет или вам необходимо большее количество шаблонов, то в таком случае оптимальным будет выбор в пользу специализированных программ, принцип действия которых аналогичен онлайн-сервисам, но предоставляется выбор большего количества стандартных компонент. При желании можно расширить функциональность софта за счет установки дополнительных шаблонов или кастомизации графики.
  • Использование специальных сред разработки подойдет для опытных программистов, которые умеют писать на языках C, Python, Java и других. Этот способ позволяет сделать игру на Андроид практически полностью своими руками с нуля. Для ускорения процесса создания можно вставлять готовые стандартные блоки кода. То есть в средах разработки нет никаких ограничений в полете фантазии, вы сможете создать свою игру в полном соответствии с разработанным сценарием. Затраты времени на разработку будут в несколько раз превышать предыдущие 2 способа, но оно того стоит.

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

Что потребуется для создания игры?

Перед тем как создать игру на Андроид необходимо продумать следующий ряд вопросов:

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

Создавать с нуля игру не просто, но достигнутый результат сможет вас порадовать.

Выбираем жанр

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

  • Головоломки. Они помогают развивать мышление и реакцию, поскольку решения нужно принимать быстро и грамотно. Данный тип игр считается одним из самых распространенных благодаря тому, что они имеют минимальные требования к аппаратному и программному обеспечению, а также интересны широкому кругу пользователей. Обязательно нужно продумать механики взаимодействия персонажа с предметами или отдельных объектов.
  • Казуальные игры. Ориентированы на игроков всех возрастов, так как позволяют проходить уровни на одном дыхании, наслаждаясь локациями. Пользователь управляет персонажем и выполняет задачи, преимущественно сбор каких-то предметов или убивая врагов, а при выполнении миссий переходит на следующий уровень. Геймплей захватывающий за счет качественной графики и незатейливого сюжета.
  • MMORPG. Многопользовательские онлайн-игры, происходящие на определенных картах или в открытом игровом мире, где основной сюжет связан с непосредственным взаимодействием с персонажами, управляемыми другими пользователями. Преимущество данного типа игр как раз в этом и заключается, что влияние ИИ минимально, а поведение других геймеров совершенно непредсказуемо.
  • Battle Royale. Целью является победа над противниками на выбранной локации, которая со временем уменьшается и заставляет врагов сближаться для финального сражения. То есть выигрывает последний выживший.
  • MOBA. Совмещает в себе элементы стратегии и экшена. Игрок управляет персонажем, который должен построить свою базу, создать юнитов, а затем победить противников.

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

Выбираем движок

Прежде чем создать игру на Андроид необходимо подобрать движок, на котором она будет разрабатываться:

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

  • Unreal Engine. Движок с потрясающими возможностями в графике, который реализован на C++. Благодаря использованию передовых технологий можно создавать конкурентные мобильные игры.

  • Solar2D. Движок, в котором сценарии прописываются при помощи языка Lua. В нем есть множество стандартных плагинов и инструментов для разработки. Недостатком является отсутствие возможности создания 3D моделей.

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

Этапы разработки

Создание игр выполняется в несколько этапов:

  • Создание идеи и плана. Важно, чтобы был уникальным сценарий и геймплей, чтобы готовый проект понравился аудитории. В данной ситуации внесение небольших изменений в готовые игры и выдача их за уникальные не получится, поскольку в таком случае затраты не будут окуплены в будущем из-за низкого интереса геймеров.
  • Выбор движка и инструментов разработки. На этом этапе потребуется заранее определить, какие цели стоят и размер бюджета, стоит ли пользоваться услугами наемных программистов. Если есть собственный опыт и знания, то с небольшими проектами можно справиться своими силами. В противном случае пока будет проходить разработка, то идея может стать неактуальной.
  • Создать графическое оформление. Оно подбирается с целью создания единой атмосферы, в которую мог бы полностью погрузиться геймер. Важны проработки всех деталей, чтобы представить миру достойный продукт и эффективно противостоять конкурентам.
  • Тщательное тестирование проекта для выявления багов и своевременного их устранения.
  • Публикация и монетизация. Большинство игр создается ради заработка или хотя бы возврата вложенных в ее разработку средств. Поэтому ее не стоит откладывать на полку, а лучше опубликовать в Play Market. Таким образом появится возможность представить проект широкой аудитории, а также получить отзывы.

Стоит отметить тот факт, что для заработка на проекте требуется его постоянно развивать и совершенствовать.

Заключение

Сфера гейм девелопмента для Андроид является одним из самых популярных направлений в программировании. Поэтому стоит попробовать свои силы в создании уникального игрового проекта.

Специалист в области программного обеспечения, локальных сетей, безопасности данных. Разработчик веб-сайтов и мобильных приложений. Администратор работы служб технической поддержки и серверов.

Создание мобильной игры ⁠ ⁠

В продолжение комментария http://pikabu.ru/story/quotya_sdelal_igruquot_nakipelo_4059294#comment_62458685, в котором я на крик души пользователя @Perja предложил выложить пост о разработке НЕ говно-игры (как мне кажется) собственного производства, если кому-то это будет интересно.

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

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

Те, кто скажут, что этот пост — просто реклама игры, — ради Бога, я не обижусь, и мне это сложно полностью отрицать. Здесь, действительно, присутствует небольшой элемент хвастовства и большое желание поделиться тем, что я сделал пару лет назад, будучи практически полным нулём в реальном программировании, но желающим понять, на что я способен (таблички Excel, взлом шестнадцатиричных кодов, да рисовка в Гимпе — вот весь мой «запас»).

Те, кто решат, что это — игра на говнокоде и автор #@$^#, — отличная критика в мой адрес, и нет мне оправдания! У меня действительно на тот момент было больше желания и рвения, чем каких-либо практических знаний по разработке игр.

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

Прим. Материалы актуальны для 2013-2014 годов, поэтому сразу извиняюсь, если какие либо элементы повествования будут не совпадать с нынешним раскладом в IT мире.

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

Итак, вводная прошла, давайте попробуем пройти по порядку от и до. Сама игра называется Robot’s eye, доступна только в Google Play для мобильных устройств (разработка была кросплатформенной, но выложить по объяснённым далее простым причинам я её мог только для Android платформы), и представляет собой головоломку, основанную на физических законах и цветовом восприятии.

Никакой рекламы в игре нет, только 40 уровней (20 в первом разделе и ещё 20 в обучении).

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

Поначалу, когда было только огромное желание удариться в разработчики игр, было очень тяжело понять, что же должно быть тем проектом, который мне нужно выполнить. Тут, за основу попадалось много хороших вариантов, наподобии Angry birds или Doodle Jump, но меня заинтересовала Cut the rope, весьма добротная игровая серия от отечественных разработчиков, которая интересна не только маленьким пользователям телефонов, но также и взрослым, ввиду наличия уникальной и интересной игровой механики. И тут, желание что-то создать, которое было, но на уровне ниже среднего, примерно в течение года до этого, вдруг прорвало порог лени и страха.

Создание мобильной игры Пример разработки мобилных игр, Android, Gamedev, Игровой движок, Мобильные игры, Длиннопост

Я стал думать о создании собственного продукта для мобильных устройств. Почитал дневники разработчиков Cut the rope на Хабре (кстати, рекомендую) и увидел, что ребята, действительно, творят какую-то магию, которая проходила всегда где-то мимо меня. Но я не мог просто взять, и скопировать их или чью-то ещё идею — это не красит человека, и решил выдумать эдакую головоломку, которая может и похожа, но скорее по жанру, чем по механике геймплея. В итоге, решение пришло само собой — создать геймплей с физическими законами цветовым восприятием. И не использовать верёвки.

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

Дизайн решено было делать самому — хотелось оценить свои силы на всех стадиях разработки, от дизайнера до тестера, чтобы проверить, что именно подходит мне по ощущениям.

Сказано-сделано. На тот момент, я достаточно неплохо владел бесплатным графическим редактором Gimp, который и использовал для создания статичной картинки робота (да и остальных картинок). К сожалению, два пятиминутных наброска ручкой на бумаге канули в историю, поэтому есть только окончательный вариант рисовки из Gimp. Все кнопки, уровни и задники рисовались по ходу написания уровней, но робот был нарисован ещё до создания игры — это было сделано для того, чтобы, во-первых, всё, по-возможности, плясало от стиля робота, а во-вторых, чтобы я понимал, что уже сделано хоть что-то, и на полпути останавливаться не стоит.

Создание мобильной игры Пример разработки мобилных игр, Android, Gamedev, Игровой движок, Мобильные игры, Длиннопост

Далее, камнем преткновения стал выбор среды разработки, которую нужно использовать для создания всей архитектуры приложения. Так, как игра должна была использовать физические законы, то выбор сужался до выбора игровых движков, которые предоставляют такие возможности. После ознакомления с основными доступными движками на тот момент, я отфильтровал два основных кандидата — Corona SDK и Stencyl. Оба из них имели достаточно неплохой послужной список, набор возможностей и кроссплатформенность. Сейчас, конечно, есть и другие достаточно неплохие варианты (особенно Unity хорош в последнее время по соотношению качества и доступности), но тогда именно Stencyl и Corona SDK попали в мой личный топ. Я слышал на тот момент про Eclipse+Android SDK, но я был «не бум-бум» в написании кода, а также хотел получить именно кроссплатформенный продукт, поэтому, его рассматривал только в последнюю очередь.

И как я ни старался освоить LUA (язык написания скриптов для Corona SDK), на тот момент я понять его не смог (хотя, оборачиваясь сейчас назад, понимаю, что это был бы немного лучший вариант, в основном, из-за гибкости и доступности разработки в последующем). Что, в итоге, привело меня к Stencyl.

Сразу оговорюсь, что сама разработка на Stencyl абсолютно бесплатна, однако для публикации хоть где-нибудь, кроме Flash или HTML5, нужно в обязательном порядке приобрести лицензию за $200. Забегая вперёд, скажу, что разработка в Stencyl действительно была удобна и проста, и, в знак благодарности, я решил подкинуть ребятам деньжат.

Да, было жалко. Да, я понимал, что это мне нужно только на момент создания этой игры. Но уж очень пригорало в одном месте — очень хотелось потестировать игру на мобильнике и поделиться с друзьями, и, видимо из-за этого, палец случайно соскочил на мышке как раз в тот момент, когда курсор проносился над кнопкой «Купить».

Итак, система выбрана, осталось только её запустить и сделать игру. Просто! Как бы не так!Было крайне тяжело понимать, что необходимо от меня на самом первом этапе. Поэтому, для начала, я просто скачал и разворотил до основания несколько примеров, которые поставлялись с движком.

Далее скриншоты, в основном, пойдут на английском, но русская версия почти у всех ресурсов также присутствует.

Создание мобильной игры Пример разработки мобилных игр, Android, Gamedev, Игровой движок, Мобильные игры, Длиннопост

Создание мобильной игры Пример разработки мобилных игр, Android, Gamedev, Игровой движок, Мобильные игры, Длиннопост

Создание мобильной игры Пример разработки мобилных игр, Android, Gamedev, Игровой движок, Мобильные игры, Длиннопост

После же этого, поняв, как устроен данный движок со всеми своими сценами, поведениями, персонажами, я просто нажал «Add new game» и начал экспериментировать.

Создание мобильной игры Пример разработки мобилных игр, Android, Gamedev, Игровой движок, Мобильные игры, Длиннопост

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

В данном случае, для создания более-менее оконченного продукта, мне пришлось создать много персонажей (как основных, так и второстепенных, типа кнопок, преград или подсказок), сцен, которые этими персонажами надо заполнить, а также много поведенческих последствий на все основные действия. Например, в данной игре, в физическое взаимодействие вступают только элементы с одинаковым цветом, а элементы с разными цветами друг друга совсем не замечают. и таким образом, взаимодействуя с определёнными элементами, игроку необходимо вернуть потерянный глаз обратно роботу. Это, по сути, и является фишкой данного приложения.

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

Поэтому, лучше сразу (что я сделал, только когда напоролся на это спустя десяток файлов), создать дополнительные папки-категории внутри основной с проектом.

Я распихал элементы вот так для самих сцен:

Создание мобильной игры Пример разработки мобилных игр, Android, Gamedev, Игровой движок, Мобильные игры, Длиннопост

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

Создание мобильной игры Пример разработки мобилных игр, Android, Gamedev, Игровой движок, Мобильные игры, Длиннопост

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

Когда элементов немного, называйте их хоть 00, 01, 02, 03. Но, если элементов больше десяти, сразу задумайтесь над именованием, чтобы потом не запутаться. Простые аббривеатуры или сокращения спасут вам много времени и сил.

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

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

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

Создание мобильной игры Пример разработки мобилных игр, Android, Gamedev, Игровой движок, Мобильные игры, Длиннопост

Создание мобильной игры Пример разработки мобилных игр, Android, Gamedev, Игровой движок, Мобильные игры, Длиннопост

Самое интересное, это как в данном движке подаётся программирование:

Создание мобильной игры Пример разработки мобилных игр, Android, Gamedev, Игровой движок, Мобильные игры, Длиннопост

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

Были правда и четырёхэтажные формулы

Создание мобильной игры Пример разработки мобилных игр, Android, Gamedev, Игровой движок, Мобильные игры, Длиннопост

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

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

Создание мобильной игры Пример разработки мобилных игр, Android, Gamedev, Игровой движок, Мобильные игры, Длиннопост

Используйте библиотеки, созданные до этого. Нет смысла изобретать велосипед, тем более когда вокруг столько мотоциклов.

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

После того, как 20 первых уровней были наполнены и оттестированы (достаточно большой промежуток времени ушёл на многочисленные перезапуски и отладки каждого уровня), я задумался о создании звукового сопровождения, которое тоже добавил в игру к каждому соответствующему персонажу. Почти все звуки я создавал сам, пыхая и угукая в микрофон ноутбука, а после отправляя их в программу Audacity (бесплатная), которая позволяет изменять звуки, обрезая их, регулируя их громкость, тембр, скорость и прочее. И, в итоге, все основные элементы, требующие звукового сопровождения (вентиляторы, звуки отскока, гусеницы и прочее), таки получили его. Но это всё смотрелось скучно без какой-то музыки. Поэтому, было решено вставить какую-нибудь ненавящивую тему. В интернете много различных Musicbox, которые позволяют создать музыкальный бэкграунд из смеси заготовленных звуков. ОСТОРОЖНО, в таких Musicbox часто могут обитать вирусы. Также, Freesound, Royaltymusic и библиотека звуков Youtube Вам в помощь — там можно найти много композиций, доступных для использования в любых целях.

Далее, необходимо было сделать стандартные настройки, типа «Выключить музыку», «Выключить звук» и т.д. Для этого было создано пара глобальных переменных, которые переносились неизменными между сценами и представляли собой всего лишь значения True/False, при которых музыка и звуки, соответственно, работали или не работали. Все звуки происходят в момент какого-либо события, а музыка же идёт на своём канале между сценами и не прерывается до тех пор, пока пользователь не отключит её в настройках либо не выйдет из игры совсем.

Когда с этой проблемой было покончено, настало время показа приложения друзьям. Самым удобным вариантом была демонстрация у каждого на телефоне — тут-то мне и пригодилась лицензия, которую я приобрёл. До этого, у меня уже был настроен аккаунт разработчика Google Play, был приобретён заранее пару месяцев до этого (как я говорил, желание было, но ещё не достаточное, поэтому дело остановилось), и я спокойно смог отправить на публикацию свой первый, скажем так, релиз из 20 уровней.

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

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

Что мы имеем в итоге? Игра из 40 уровней была создана (вместе с рисовкой и изучением движка) за десять дней на коленке. Не спорю, это были десять достаточно упорных дней — я погряз в это с головой и надолго не вылезал. Поэтому этот срок можно спокойно растягивать втрое. Но, так или иначе, могу смело утверждать, что данная вещь вполне посильная человеку, который совсем не знаком с программированием. Тут ведь, самое главное — это начать! Правда, серьёзно я до сих пор не занимаюсь разработкой игр — у меня разработка Web-систем и 3D web-приложений, но порой, опять начинает припекать создать что-нибудь.

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

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