Собственно почти сразу выпускаю второй пост с небольшой информацией.
Я добавил функционал.
Присоединение пользователя к комнате.
Отметка "готовности" пользователя.
Перемешивание карт и раздача их игрокам, когда все пользователи нажали "готово"
Ход картой
Далее по плану реализация "крытия" карт и "бито".
Не знаю насколько интересно выкладывать такие мелкие доработки, но с другой стороны - если этого не делать, то получится 2 поста: "Я начал делать игру" и "Я сделал игру". Так что думаю так будет лучше :)
И да, стэк будет такой: Бэкенд - Nest.JS, Фронт - Flutter (и, возможно, будет веб-версия на Vue)
Всем привет, я - Fullstack разработчик. Решил начать в свободное время делать игру "Дурак". В первую очередь из-за известной игры "Дурак онлайн", в которой очевидная подкрутка карт для того, чтобы игроки больше донатили.
Параллельно с разработкой решил делиться успехами здесь (а вдруг кому-то зайдет). Ну и плюс если мои посты будут набирать, то больший шанс, что я не забью на эту идею :d
Ну а если я вас заинтересовал - то на данный момент реализованы: авторизация, создание комнаты, раздача карт (серверная часть).
Привет, пикабу! Сегодня мы рассмотрим один из возможных жизненных циклов игровых сессий на примере моей онлайн игры Make World. А своим опытом или мыслями вы можете поделиться в комментариях. Рассматривать мы всё будем с технической стороны с небольшими вкраплениями того, как это выглядит для пользователя. А в конце есть ссылка, где вы можете попробовать и покликать это всё на практике, а так же подписаться на мои соцсети :)
Итак, всё начинается с создания игровой сессии, это может быть как создание лобби, так и создание сессии через матчмейкинг (автоматический поиск соперников). В нашем случае рассмотрим простой пример с ручным созданием лобби: пользователь жмёт кнопку "Создать" и создается игровая сессия.
Создание сессии на клиенте
На стороне сервера же у нас имеются следующие методы (синтаксис языка c#, методы пронумерованы на скриншоте ниже):
1) Создать игру с заданными параметрами (примеры параметров на скриншоте выше)
2) Начать игру (когда пользователь жмёт кнопку)
3) Начать игровые ходы (когда сервер инициализировал все необходимые параметры и готов транслировать состояние игры)
Методы игровой сессии на стороне сервера
Учитывая, что игра у нас многопользовательская, и к ней могут подключаться другие игроки, то необходимо приправить нашу сессию вспомогательными методами подключения/отключения игроков (см. скриншот ниже):
1) Подключается игрок. Что мы при этом делаем?
- Смотрим, был ли он уже в этой сессии (это могло произойти, если он играл в игру и отключился из-за пропавшего интернета).
- Если был, то ставим его на нужную ячейку игрока (чтобы у него был доступ ко всем его городам и юнитам в игре).
- Если не был - создаем новую ячейку игрока с базовыми ресурсами для основания города.
2) Убрать игрока. Этот метод доступен, например, хосту игры - если ему по какой либо причине не нравится игрок, а так же доступен самому серверу - если например игра не активна и её необходимо закрыть для экономии ресурсов (об этом будет дальше)
3) Игрок выходит из сессии по одной из причин:
- Потерялось подключение. В этом случае мы оставляем ячейку игрока за ним (чтобы в будущем вернуть ему доступ ко всем его городам и юнитам)
- Он сам нажал кнопку выхода. В этом случае всё интереснее: если мы видим, что в игре не осталось ни одной активной ячейки игрока (т.е. теоретически никто не может вернуться в игру с "восстановившимся" интернет соединением) - то мы переходим к пункту (4) и закрываем игру, таким образом освобождаем ресурсы сервера, чтобы другие игроки тоже могли наслаждаться своими играми "без лагов"
4) Закрытие сессии. Если упустить этот пункт при разработке своей игры/приложения, то рано или поздно сервер будет "захламлен" и производительность может сильно упасть. Поэтому мы вызываем этот метод рано или поздно ВСЕГДА для каждой сессии, в случае моей игры причины этому могут быть: - Все игроки вышли из игры вручную. Когда последний игрок жмёт кнопку выхода - сразу инициализируется закрытие игры.
- Не осталось активных соединений и прошел какой-то промежуток времени (который даётся игроку, чтоб восстановить соединение и продолжить игру).
- Игровые ходы закончились и в игре определился победитель.
Методы манипуляции игроками и закрытия сессии
Ну чтож, сегодня мы разобрали базовый цикл игровой сессии (а в более широком смысле почти все "сессии" в компьютерных приложениях работают именно так), и, как и говорил, попробовать всё это бесплатно вы можете тут (и даже на мобильных устройствах): https://plugfox.dev/make-world-ru/
Рынок растет, к 2027 году аудитория мобильных игр увеличится на треть — до 35 миллионов человек. Рассказываем, какие языки программирования учить, чтобы войти в IT через геймдев.
Игровым разработчикам требуются программисты под разные проекты, от уровня казуальной Among Us до action RPG вроде Genshin Impact. Но выбор языка определяется не только графикой.
Есть две основные платформы для разработки мобильных игр:
Android;
iOS.
Ниже привели примеры популярных языков программирования, совместимые с этими операционными системами.
Основой язык для разработки игр для смартфонов с полной поддержкой Android. Его относительно просто освоить с нуля благодаря развитому сообществу и обилию библиотек. А встроенная виртуальная машина Java (JVM) обеспечивает производительность.
Kotlin
Новый перспективный язык, который призван заменить Java. Он тоже работает на JVM, но при этом его код легче и проще. В основном на Kotlin создают игры на Android, но при желании можно кодить и под iOS: например, прописывать логику через Kotlin Multiplatform (KMP).
Swift
Язык программирования от Apple, который пришел на смену устаревшему Objective-C. На нем пишут игры для iOS. В Swift интуитивный код, доступно много фреймворков для работы с 2D и 3D (SpriteKit, SceneKit, Metal), постоянно обновляются функции и библиотеки.
Lua
Скриптовый производительный язык, который используют в игровых движках и фреймворках вроде Solar2D, Defold. Благодаря этому он кроссплатформенный: на нем пишут игры для Android и iOS.
Универсальный язык программирования для игр, который поддерживает в том числе Android и iOS. Он очень мощный, поэтому используется для портирования крупных проектов на мобильные платформы. Совместим с движком Unreal Engine.
С#
«Облегченная» версия С++, на которой основан игровой движок Unity. Язык понятный для новичков в программировании. С его помощью можно создавать 2D и 3D игры любого уровня сложности.
Для тех, кто хочет создавать мобильные игры, мы в Яндекс Практикуме подготовили онлайн-курсы по направлениям «Android-разработчик» и «iOS‑разработчик». С ними вы освоите все нужные языки программирования, чтобы устроиться в геймдев или начать свой проект.
Вчера я рассказал как 12 лет назад бросил школу и начал свою карьеру программиста. Описал свой путь, как я попал на первую работу и об первом увольнение которое меня многому научило.
Сегодня продолжу как я нашёл свой первый заказ на фрилансе уже после увольнения и как попал на работу в США.
От 0 на фрилансе до 300$ за заказ
Делали что-то похожее
После увольнения было легко, пока были деньги. А потом они закончились, и встал вопрос: "На что жить дальше?". Я хотел зарабатывать, при этом заниматься своими проектами, поэтому пошёл фрилансить. Профессия разработчика игр этим очень удобна. Можно делать проект мечты и для поддержания штанов параллельно выполнять заказы.
На биржах фриланса мне долго не удавалось найти работу. Там либо какие-то неадекваты типа: "Сделайте мне убийцу ГТА за 2000 рублей", либо без очень жирного портфолио даже рассматривать не хотели.
Заказы было сильно проще искать в профильных группах и чатах по разработке игр. Там всегда тусуются заказчики, с которыми можно адекватно и по-человечески договорится. На бирже я протусовался неделю и тишина. А по дедовскому методу уже к вечеру нашёл первый заказ на 320$ по Drag Racing игре.
Самый кайф в том, что где-то через месяц тусовки в чатах я перестал искать новых заказчиков. Начинают просто обращаться те, с кем ты постоянно работаешь и подкидывать что-нибудь интересное!
3 золотых правила,чтобы заказчики сами обращались к вам:
1) Оформите, блин, портфолио!
2) Ищите заказы по своему уровню в профильных сообществах, а не лезьте на биржи.
3) Будьте адекватны, и заказчик быстро станет постоянником, с которым вы будете чисто в кайф работать.
Портфолио - это вообще болезненная история для новичков. Могу позже рассказать как можно за кратчайший срок сделать себе хорошее портфолио, если интересно то с вас плюсик. :)
Работа в США за 400 000 р.
Проект которым мы занимались
Как я попал на работу в США
Это был 2019-ый год и я со своей зарплатой в валюте жил прям ну очень хорошо.
Даже сейчас, будучи предпринимателем, 400 000 рублей в месяц для меня внушительная сумма, которая закроет все мои потребности. А тогда я работал рядовым программистом на Unity. Ради интереса мы с командой посчитали, что сейчас средняя зарплата IT заграницей уже 600 000 -1 000 000 рублей в месяц.
Попал я буквально за красивые глаза:
1) Я вообще не знал английского;
2) У меня не было диплома.
А взяли меня за качество кода, те самые красивые глаза. Их главный по технической части глянул мои репозитории и такой: "Этот парень нам нужен, хоть них*я нас и не понимает".
Меня взяли на испытательный срок вместе с двумя коренными американцами. Через месяц работы их уволили, а меня оставили))
К слову, по этому мой YouTube канал полностью крутится вокруг качества кода, а моя книга которую я недавно выпустил тоже продолжает эту традицию. Это для многих "главное чтобы работало". А мне выдроченный стиль, который я преподаю, в жизни дал и хорошую работу, и кайфовый дом, и полный холодильник.
Аминь.
Чуть позже напишу как после работы в США открыл свою студию разработки игр с которой мы сделали около 200 игр разного качества и направленности но сделали и получили много опыта.
Привет Пикабу! Недавно я выпустил свою книгу по программированию и вы поддержали меня 20 000 лайками O_o
Сказать что я шоке - это словно промолчать. Очень приятно, спасибо! Хочу поблагодарить вас и всем моих читателей и разыграть 5 ноутбуков чтобы добавить вам мотивации в изучение IT. В конце поста будут подробности.
А пока хочу рассказать о своём первом ноутбуке и как я стал программистом, нашёл свою первую работу и меня первый раз уволили.
Эта история началась в 2011 году в Казахстане
На мое 14-летие родителе подарили мой первый пк - HP 620. К этой адской машине я каким-то образом приколхозил телефон в качестве модема и шиковал на 50 мегабайт в день за какие-то астрономические деньги (все школьные пайки туда улетали).
HP 620 (Фото не мое, но модель та же)
О С++ тогда в интернете было написано только то, что мне нужно установить Visual Studio. Который я так и не смог скачать и очень долго грустил. Где-то начитался, что в такой ситуации нужно установить Linux и взять компилятор GCC, который уже в нём на борту :)
Злой школьник
Нельзя давать юноше Linux. После того, как я добыл диск с Ubuntu, меня выключило из жизни лет на 5. Я херачил на плюсах, собирал Debian и с утра до вечера вдуплял в сканер портов.
Но это совсем другая история.
Параллельно с этим у меня появилось жгучее желание стать хакером. А еще я хотел писать сайты, реверсинжирить программы, заниматься системным администрированием и, конечно же, делать игры. Я, как голодная собака на фуршете: Пытался запихнуть в себя всё и сразу.
Где-то через годик я уже сделал свой первый сайт и написал первый работающий вирус. Он заражал компьютеры и заменял локально сайт VK на специальный фейк, который присылал мне введённые данные. За год у меня накопилось около 500 аккаунтов.
В моменте я чувствовал себя королём горы. Умею всё! Знаю столько языков! И жнец, и певец, и на дуде игрец… Но как лопатой по голове, мне сбило корону, когда я попытался на этом заработать. Оказалось, что я всё знаю поверхностно и только копирую примитивные примеры с книг и разных статей.
Эго сбило. И я чувствовал себя раздавленным. Оказывается, я не хакер, а злой школьник, который не может взяться за что-то одно и нормально в этом разобраться. Каждый раз, когда я брался за что-то одно, меня мучали вопросы:
1) А вдруг на чём-то другом будет больше денег?
2) А пока я буду учить, не станет ли это не актуальным?
3) А точно ли это моё?
Робко начинаю что-то понимать
Все изменилось вместе с этим скриншотом и моим первым проектом на Unity. Тогда я впервые сфокусировался на чём-то одном, отбросил все вопросы и начался настоящий прогресс.
Мой первый проект в Unity
Проект мы так и не закончили, хоть и работали над ним 2 года. Но это не важно. С этого момента я стал разработчиком игр. И это самое важное, что случилось в моей жизни.
Тогда мы с моим школьным другом оба хотели стать разработчиками. Вместе искали первые книжки и тыкались в Unity. Но, к сожалению, он бросил после первых неудач, а я выдержал и продолжил идти этим творческим путём.
Оно того стоило. Самым сложным периодом стало время до первой оплачиваемой работы. А дальше с денюжкой уже повеселей пошло.
Новогоднее чудо и первая 1000 долларов
В 15 (!) лет я начал работать программистом за деньги. Я был очень-очень счастлив, когда меня наняли. Это был просто какой-то взрыв чувств на толчке от которого я лечу уже 12 лет.
Мне повезло, но есть поговорка: "Удача сама не приходит: ее работа за руку приводит."
В 2012-ом году я просто учился программировать и работать в Unity. А ещё я сидел в группе VK по тематике, в которой было около 100 человек. На тот момент это было единственное сообщество)
И так как я был книжным червём, то каждый раз, когда там кто-то что-то спрашивал, я просто отвечал и помогал разобраться. Бесплатно. Потому что любил это.
Родители, правда, были против. Я забил на школу и меня оставили тогда на второй год. Каждую неделю папа приходил с серьёзным разговором: "Переставай ерундой заниматься. Чем себя кормить будешь?". Так я просидел весь 2012-ый год.
Чудо произошло под Новый год. Родители пришли с ультиматумом, что либо я найду работу и буду обеспечивать себя сам и жить как хочу, либо болты затянут полностью. Я почти отчаялся, но буквально через два дня мне в личку постучался незнакомый человек.
Он такой: "Слушай, мы ищем разработчика в компанию. Видели, что ты всем отвечаешь. Не хочешь попробовать?"
Я помню, как под ёлкой загадал желание: "Хоть бы меня взяли".
И меня взяли))
Проект был онлайн-файтингом под VK. Скриншот прикрепил.
Конечно, были проблемы из-за того, что мне было всего 15. Но компания пошла на встречу и деньги я получал на папу. Платили каждую неделю. И мы стабильно раз в неделю ездили в банк и снимали наличку. Папа просил не тратить деньги, вдруг "назад попросят", но меня больше не трогал. Платили мне тогда 1000$ в месяц. В Липецке на эти деньги в 15 лет я был прям королём и мог купить всё.
Ну и перестала ходить в школу, перешёл на домашнее обучение и кое, как через несколько лет получил аттестат за 9 классов с тройками по всем предметам.
Выстрел в колено
Меня сгубило полное отсутствие Софт Скиллов. Если по-человечески, то был обычным задротом.
На моей первой работе я быстро разобрался с новой системой анимации в Unity и с сетевым программированием. Сетевой файтинг - это, конечно, то ещё задротство. Это считается одним из сложнейших жанров. У меня от этого ЧСВ до небес взлетело. Кстати, именно это мы часто наблюдаем у наших учеников, когда после учебы они получают сочное портфолио и многих начинает заносить.
Косяки у меня были простые:
1) Мог выполнить задачу и сдать её, не протестировав.
2) Закрыл задачу - поехал тусоваться и тратить деньги. А когда звонят и спрашивают, почему не за компом, то искренне удивлялся: "Ну я же всё сделал, вам какая разница".
3) Мог искренне считать, что геймдизайнер не прав и начать саботировать задачи. Мол, они дураки и всё равно хрень получится.
Тогда мне казалось, что я самый крутой, ведь я был единственным разработчиком на проекте. За это меня через пол года справедливо выгнали. А я потом ещё несколько месяцев гордый ходил, мол: "такого специалиста потеряли". Но правда была в том, что программистом я был начинающим, а вы*бывался за десятерых.
Не будьте тупыми мудаками
После того как отсутствие денег меня приземлило, я пошёл хреначить на фрилансе.
После увольнения было легко, пока были деньги. А потом они закончились, и встал вопрос: "На что жить дальше?". Я хотел заниматься своими проектами, поэтому пошёл фрилансить. Профессия разработчика игр этим очень удобна. Можно делать проект мечты и для поддержания штанов параллельно выполнять заказы.
На биржах фриланса мне долго не удавалось найти. Там либо какие-то неадекваты типа: "Сделайте мне убийцу ГТА за 2000 рублей", либо без очень жирного портфолио даже рассматривать не хотели.
Заказы было сильно проще искать в профильных группах и чатах по разработке игр. Там всегда тусуются заказчики, с которыми можно адекватно и по-человечески договорится. На бирже я протусовался неделю и тишина. А по дедовскому методу уже к вечеру нашёл первый заказ.
У меня заказали сделать Драг Рейсинг игру. Буквально базовую механику, натянуть UI и добавить три готовых машины. За это мне заплатили 320$. Я его сделал не спеша, где-то дней за 5. Мне всё оплатили и я довольный делал проект мечты, но это уже другая история.
А что с ноутбуком?
Потом было много чего еще, работа в США, переезд в Питер, основание своей игровой студии, открытие собственной школы. Но старичок HP уже не справлялся и остался в моей детской комнате в Липецке. Он до сих пор со мной и до сих пор лежит там с уже высаженным аккумулятором и с Ubuntu 14.10 на борту.
Это я все к чему? Подарок родителей стал для меня знаковым, и вместо того, чтобы пить пиво за гаражами я стал программировать, а потом пить пиво за гаражами.
И сейчас когда у меня у самого есть возможность делать такие подарки, я хочу ей воспользоваться и дарю 5 моим подписчикам ноутбуки. Розыгрыш делаю через функцию в телеграмме, платформа сама выберет 5 победителей. Принять участие можно здесь - https://t.me/sakutin_csharp/2282
Если вам интересно позже сделаю вторую часть где расскажу как попал на работу в США, потом собрал свою команду и открыл свою студию разработки игр.