Обновить
1
0

Пользователь

Отправить сообщение

Двоичный поиск в графах

Время на прочтение10 мин
Охват и читатели18K

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

При каждом сравнении алгоритм двоичного поиска разбиваем пространство поиска пополам. Благодаря этому всегда будет не более $\log(n)$ сравнений со временем выполнения $O(\log n)$. Красиво, эффективно, полезно.

Но всегда можно посмотреть под другим углом.

Что, если попробовать выполнить двоичный поиск по графу? Большинство алгоритмов поиска по графам, такие как поиск в ширину или поиск в глубину, требуют линейного времени и были придуманы довольно умными людьми. Поэтому если двоичный поиск по графу будет иметь какой-то смысл, то он должен использовать больше информации, чем та, к которой имеют доступ обычные алгоритмы поиска.
Читать дальше →

Разработка инди-игры одним человеком (история, советы)

Время на прочтение9 мин
Охват и читатели61K
Я хотел бы рассказать вам о своем опыте в разработке инди игры. Мой опыт ограничен всего одной игрой, которая на данный момент находится в “раннем доступе” в Steam. Это не много, но мне кажется мне есть чем поделиться. Если не хочется читать все — в конце самое интересное кратко.

image

Готовимся к публикации игры в Xiaomi Mi Game Center (Unity, C#)

Время на прочтение8 мин
Охват и читатели13K
Китайский рынок мобильных игр и приложений остается в значительной степени закрытым для остального мира. И не так давно Unity анонсировали сотрудничество с Xiaomi, призванное помочь разработчикам опубликовать свои игры с помощью сервисов Unity напрямую в Xiaomi Mi Game Center. А пока на официальном сайте висит табличка «Функция еще не включена, ждите новостей!», мы можем подготовить наш билд для Xiaomi. А если повезет, то и успешно опубликовать!

image
Читать дальше →

Обзор Java 9

Время на прочтение5 мин
Охват и читатели60K
Всем доброго времени суток. В ноябре 2017 в Санкт-Петербурге прошло одно из самых примечательных событий года для отечественных Java-разработчиков: конференция Joker. На конференции было озвучено много тем, такие как GC, Concurrency, Spring Boot, JUnit 5 и другие, презентации по которым вы можете найти в открытом доступе на сайте конференции. Перечислять все смысла нет, так как по каждому топику можно составить отдельную статью с примерами и выдержками. Поэтому остановимся на главном.

Основной темой были нововведения в Java 9: ей посвятили аж две лекции, по модулям, и по всему остальному. Саму девятку Oracle изначально планировали выпустить еще в середине лета 2016, однако релиз был перенесен сначала на полгода, а потом и вовсе на вторую половину 2017. И вот, 21 сентября 2017, выход девятки состоялся.

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

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

1. Появление литералов в коллекциях


На самом деле литералы в коллекциях можно использовать с 7 версии, никто не запрещает выполнить следующее, если у вас установлен ProjectCoin:
Читать дальше →

Дизайн классов в играх: не только RPG

Время на прочтение14 мин
Охват и читатели23K
image


Классы можно встретить везде. Бывшие когда-то принадлежностью исключительно RPG, сегодня системы классов используют во множестве видов игр. Всем нам известны стандартные «воины» или «волшебники» классической фэнтези, но чему мы можем научиться в дизайне классов из других игр?

Для начала нам нужно ответить на вопрос: что же такое класс? Определение этого термина в играх достаточно расплывчато, и правильных ответов можно дать несколько. В таких RPG, как Dungeons & Dragons классы определяются правилами и представляют собой список способностей, которые может иметь персонаж игрока.

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

Поэтому при обсуждении классов мы говорим не только о стандартных классах и расах из RPG, но и об армиях в Starcraft, персонажах Street Fighter и даже машинах из Mario Kart. Кажется странным засовывать их всех в одну категорию, но у них у всех есть нечто общее: выбор, который игрок делает за пределами игры, определяет его возможности в игровом процессе.
Читать дальше →

Сжимаем несжимаемое – как уменьшить дистрибутив мобильного приложения

Время на прочтение6 мин
Охват и читатели19K
Сегодня в магазинах приложений для платформ iOS и Android существует ограничение на размер приложения в 100 МБ. Магазин Apple для приложений, которые не укладываются в этот лимит, запрещает закачку при помощи мобильного интернета. В  Google Play же это строгий лимит на размер APK – все, что не укладывается в него, должно быть вынесено в файлы дополнений. Для пользователей с платным трафиком закачка большого приложения может быть довольно затратной, поэтому его размер нужно стараться уменьшить всеми силами.


В рамках этой статьи мы расскажем, с помощью каких приемов мы смогли уложиться в это ограничение на проекте Gardenscapes для платформы iOS. Статья касается в основном мобильных игр, но методы сжатия универсальны и могут пригодиться для любых проектов с тяжелой графикой. Для того, чтобы говорить о методах сжатия, нужно определиться с тем, как формируется архив приложения.
Читать дальше →

Russian AI Cup 2017 — отчет о бета-тесте, старт чемпионата. Хотели StarCraft, получили странный Total War

Время на прочтение7 мин
Охват и читатели15K


Седьмого ноября официально стартовала неделя бета-теста Russian Ai Cup 2017. Чемпионат ежегодный, и в этом году мы решили предложить участникам проект под названием CodeWars — конкурс по программированию ботов для игры, которую сами участники сходу окрестили «симулятором игрока в RTS». Бета-тест подошел к концу, чемпионат официально стартовал, и под катом мы хотели бы отчитаться, поделиться новостями о том, что же мы теперь можем предложить. Ну и еще раз зазвать всех поучаствовать, не без этого конечно.

Читать дальше →

Структуры данных: бинарные деревья. Часть 1

Время на прочтение6 мин
Охват и читатели395K

Интро



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

В своих статьях я буду приводить примеры кода сразу на двух языках: на Java и на Haskell. Благодаря этому можно будет сравнить императивный и функциональный стили программирования и увидить плюсы и минусы того и другого.

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

О правомерности работы физического лица с магазином App Store в РФ

Время на прочтение3 мин
Охват и читатели69K
Эта статья предназначена в первую очередь для программистов-одиночек, желающих попробовать свои силы на рынке платных мобильных приложений. Статья не претендует на истину первой инстанции, поэтому любые ваши замечания крайне приветствуются.

Итак, суть статьи заключается в том, чтобы понять: можно ли в РФ физическому лицу законно получать прибыль от продаж программ в App Store? Просмотр тематических форумов с подобными вопросами привел к выводу: мнения людей на этот счет расходятся. Одни считают, что можно, другие — что такая деятельность будет квалифицироваться как незаконная предпринимательская деятельность, т.к. договор от Apple — это агентский договор и в нем нет ни слова про авторские вознаграждения, и, как следствие, нужно регистрироваться в качестве индивидуального предпринимателя (ИП).
Читать дальше →

Некоторые особенности программирования временных событий в играх

Время на прочтение9 мин
Охват и читатели16K

Дóжили. Недавно была обнаружена проблема синхронизации игрового процесса с реальным временем не где-нибудь, а в игре "Quake Champions". Название игры "Quake" раньше было синонимом чего-то крутого, высокотехнологичного и идеального. И в голову не могло придти, что через какую-то пару десятков лет и камня на камне не останется от былого превосходства, а в новой игре с именем "Quake" появятся грубые ошибки, приводящие к тому, что один из игроков может получить преимущество только потому, что у него лучше "железо". Дело в том, что скорость стрельбы в новом шутере зависит от fps, то есть, количество пуль, выпущенных игроками с разным значением fps за один и тот же промежуток времени будет разным, а значит один из них может получить преимущество.


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

Читать дальше →

Алгоритмы на графах — Часть 0: Базовые понятия

Время на прочтение5 мин
Охват и читатели268K

Вступление


Как оказалось тема алгоритмов интересна Хабра-сообществу. Поэтому я как и обещал, начну серию обзоров «классических» алгоритмов на графах.
Так как публика на Хабре разная, а тема интересна многим, я должен начать с нулевой части. В этой части я расскажу что такое граф, как он представлен в компьютере и зачем он используется. Заранее прошу прощения у тех кто это все уже прекрасно знает, но для того чтобы объяснять алгоритмы на графах, нужно сначала объяснить что такое граф. Без этого никак.

Читать дальше →

Разработка браузерной онлайн игры без фреймворков и движков

Время на прочтение15 мин
Охват и читатели38K

Привет, Хабр!

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

Секреты разработчика, продавшего полмиллиона копий игр

Время на прочтение6 мин
Охват и читатели29K
bit blaster xl


За время нашей получасовой беседы Адам Никерсон, он же Nickervision Studios, по крайней мере дюжину раз повторил разные вариации фразы «На самом деле я не знаю, как делать видеоигры». Однако ему удалось в одиночку продать полмиллиона копий своих игр для PC.

Вероятно, вы ни разу не слышали, например, о Bit Blaster XL, но в Steam она разошлась тиражом 260 000 копий. Адам разработал её в одиночку всего за две недели. Её продолжение, которое близится к такому же успеху, было разработано за 75 часов.

Как ему это удалось? Он нашёл способ стать замеченным на Steam в наше время почти бесконечного потока новых релизов, время, разрушившее надежды и мечты многих других мелких разработчиков.

Взбираясь на непокорённую гору: сложности создания игры в одиночку

Время на прочтение10 мин
Охват и читатели36K
Standing at the foot of the mountain

Делать видеоигры сложно. Но ещё сложнее делать их в одиночку.

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

Эта статья предназначена для разработчиков, отправляющихся в одиночное путешествие, а также для тех, кто уже давно в пути и пытается выпустить свой первый соло-проект.

С чего начать молодым разработчикам мобильных игр из России [Часть 3]

Время на прочтение4 мин
Охват и читатели9.3K

Всем доброго!


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



Ранние публикации можно прочитать тут:

Часть 1
Часть 2

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

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

С этим были связаны основные проблемы. Чтобы их нивелировать мы вывели несколько основных правил (многие из них освещались и не раз, но возможно для кого-то они станут новостью):

1) Коммит в репозитории делается после каждого плюс – минус значительного изменения;
2) Тестирование на «живых» устройствах проводится не менее трех раз в день, чтобы в случае чего можно было безболезненно откатить изменения;
3) Разработка ведется небольшими итерациями и продолжается только после полного теста небольшого кусочка;
4) Оптимизация – наше всё;
5) Билд для внешних тестировщиков не заливается раньше, чем выполнен внутренний полный тест и не убраны «жесткие баги»;
6) Глобальное обновление ни в коем случае не должно выходить перед праздниками и выходными.
7) Чем больше внешних тестировщиков – тем лучше;

Пойдем по пунктам:
Читать дальше →

Руководство по выживанию в Steam для мобильных разработчиков

Время на прочтение11 мин
Охват и читатели14K
Друзья, суровым разработчикам в Steam эта статья, вероятно, покажется наивной и поверхностной, но поверьте: в России есть множество разработчиков, которые настолько ориентированы на мобильные рынки, что совершенно не представляют, как работает этот ресурс. Если это ваша ситуация и вы сейчас резко ощутили желание заработать на новом рынке, то этот материал будет вам полезен. Приятного чтения!


Читать дальше →

LibGDX. Практические вопросы и ответы

Время на прочтение7 мин
Охват и читатели12K
imageПривет Хабр!

Закончился конкурс от ВКонтакте и мой 2-х недельный марафон в интернете по поиску нужной информации. Хочу поделится небольшим опытом работы с графическим движком LibGDX. В интернете полно примеров, но большинство далеки от практики (нарисованный спрайт это далеко еще не игра) или уже устарели.
Читать дальше →

Атака клонов. Как бороться с дублированием кода?

Время на прочтение9 мин
Охват и читатели25K

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


В рамках данной статьи мне бы хотелось напомнить, что такое программные клоны, какие они влекут за собой проблемы и как с ними можно бороться. В статье приводятся примеры рефакторинга реальных клонов из популярного фреймворка Spring. В качестве инструментов используются Java 8, IDE IntelliJ IDEA 2017.1 и плагин Duplicate Detector 1.1.


Читать дальше →

[LibGDX] Создаем клон Flappy Bird — Zombie Bird

Время на прочтение127 мин
Охват и читатели200K
Доброго времени суток %username%. Не давно наткнулся на хороший туториал по созданию клона игры Flappy Bird используя LibGDX и этот туториал мне понравился своей простотой и детализацией.

Я отдаю себе отчет, что тема создания клонов данной игрушки изъела себя, но возможно кому-то пригодится еще один хороший туториал.

Туториал разбит на 12 дней, содержит множество картинок, полотен кода и исходный код разбит по дням. Кому интересно, добро пожаловать под кат.
Подробнее

Аналоговый мир и его иллюзия

Время на прочтение12 мин
Охват и читатели17K
Обычно выбор в играх выглядит примерно так:



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

Вот другой пример выбора:



Игрок может избежать снаряда, спустившись вниз или поднявшись наверх. Этот выбор очень похож на приведённый выше. Однако здесь никакой явной подсказки, спрашивающей игрока о выбираемом им направлении. Вместо этого выбор косвенно передаётся через механику игры. И в отличие от явного выбора, здесь варианты определены не так чётко. В этом случае выбору может быть и не хватает этической составляющей предыдущего примера, но он намного более интересный. Кроме того, он кажется неотъемлемой частью игрового процесса, а не искусственно созданной ситуацией.
Читать дальше →

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность