Pull to refresh
1
0
Send message

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

Reading time10 min
Views18K

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

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

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

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

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

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

image

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

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

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

Обзор Java 9

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

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

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

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

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


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

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

Reading time14 min
Views22K
image


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

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

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

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

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

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


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

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

Reading time7 min
Views15K


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

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

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

Reading time6 min
Views381K

Интро



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

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

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

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

Reading time3 min
Views69K
Эта статья предназначена в первую очередь для программистов-одиночек, желающих попробовать свои силы на рынке платных мобильных приложений. Статья не претендует на истину первой инстанции, поэтому любые ваши замечания крайне приветствуются.

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

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

Reading time9 min
Views15K

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


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

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

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

Reading time5 min
Views264K

Вступление


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

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

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

Reading time15 min
Views37K

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

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

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

Reading time6 min
Views29K
bit blaster xl


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

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

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

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

Reading time10 min
Views35K
Standing at the foot of the mountain

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

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

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

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

Reading time4 min
Views9.3K

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


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



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

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

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

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

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

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

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

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

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


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

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

Reading time7 min
Views11K
imageПривет Хабр!

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

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

Reading time9 min
Views23K

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


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


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

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

Reading time127 min
Views199K
Доброго времени суток %username%. Не давно наткнулся на хороший туториал по созданию клона игры Flappy Bird используя LibGDX и этот туториал мне понравился своей простотой и детализацией.

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

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

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

Reading time12 min
Views17K
Обычно выбор в играх выглядит примерно так:



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

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



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

Information

Rating
Does not participate
Registered
Activity