Pull to refresh
12
0
Algorithm engineer @CrazyFizik

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

Send message

Удлинение геймплея и создание реиграбельности

Reading time4 min
Views14K
Иногда игра, над которой вы/ты работал/ли, оказалась слишком короткой и вам в голову просто вбилось, что нужно её растянуть. Какими способами это можно сделать? Почему удлинение игрового процесса схожа с реиграбельностью? Да потому что они оба преследуют цель, чтобы в игру играли как можно больше. Заранее предупрежу, что это не всегда хорошая идея, удлинять геймплей игры.


Читать дальше →
Total votes 16: ↑11 and ↓5+6
Comments6

Создание истории карточным методом: упрощаем жизнь сценаристам

Reading time7 min
Views43K

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


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


Lead

Читать дальше →
Total votes 50: ↑50 and ↓0+50
Comments59

Игровая механика: давайте разберём ядро игры по косточкам

Reading time11 min
Views114K
Термин «игровая механика» имеет много значений, но сегодня я буду говорить об игровой механике как об абстракции, определяющей состояние игры. Очень упрощённо это выглядит вот так:



Есть только два фактора, которые определяют любое текущее состояние игры: механика (правила) и игроки своими действиями.

Уровень ядра


Такт 1: определение состояния
Всегда есть некое текущее состояние системы (например, начало хода). Оно определяется на первом такте инициализирующей последовательностью, когда игроки «загружают» игру, раскладывая поле, выбирая фишки, распределяя начальные ресурсы и так далее. Затем оно меняется в зависимости от происходящего в игре.
Читать дальше →
Total votes 60: ↑56 and ↓4+52
Comments18

Ликбез по типизации в языках программирования

Reading time12 min
Views511K
image

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

В полной версии находится подробное описание всех видов типизации, приправленное примерами кода, ссылками на популярные языки программирования и показательными картинками.
Читать дальше →
Total votes 239: ↑232 and ↓7+225
Comments180

«Камень-ножницы-бумага» и теория игр

Reading time8 min
Views61K
image

Игра «камень-ножницы-бумага» отлично подходит для того, чтобы решить, кому придётся выносить мусор. Но замечали ли вы, что происходит, когда вместо трёх выбрасываний игра продолжается раунд за раундом? Сначала вы выбираете принцип, который даёт вам преимущество, но потом противник быстро понимает его и обращает в свою пользу. В процессе изменения стратегий вы постепенно достигаете точки, в которой ни одна из сторон не может дальше совершенствоваться. Почему же такое происходит?

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

Так как же выглядит равновесие Нэша в игре «камень-ножницы-бумага»? Давайте смоделируем ситуацию, в которой есть вы (Игрок A) и ваш противник (Игрок B), снова и снова играющие в игру. В каждом раунде победитель получает очко, проигравший теряет очко, а ничья засчитывается как ноль очков.
Читать дальше →
Total votes 25: ↑25 and ↓0+25
Comments29

Почему я не подписываю соглашения о неконкуренции

Reading time8 min
Views51K
После университета я устроился в IT-отдел компании по обработке платежей и взысканию долгов. Мой стол стоял рядом с колл-центром: я целыми днями выслушивал, как люди на пособии делают покупки не по карману и влазят в долги. Когда несколько продажников ушли и начали собственный бизнес, прихватив с собой клиентов, компания предприняла меры. Она заставила всех в офисе, от сотрудников на вводе данных до операторов поддержки, подписать соглашения о неконкуренции. Это было первое соглашение о неконкуренции, которое я отказался подписать. В течение следующих пятнадцати лет меня ещё несколько раз попросят подписать такие бумаги, всегда перед приёмом на работу. Я всегда отказывался, и до недавнего времени это никогда не становилось препятствием для приёма на должность.

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

В 2017 году Иллинойс принял закон, запрещающий такие соглашения для низкооплачиваемых работников, обычно со ставкой ниже $13 в час. Даже в штатах, где подобные контракты не запретили, их часто признают не имеющими законной силы. С чисто этической точки зрения они ограничивают одну из самых основных предпосылок капитализма: свободу выбора, на кого работать. Это соглашение фактически ставит работника в положение должника по отношению к нынешнему работодателю, хотя долг не финансовый.
Читать дальше →
Total votes 95: ↑91 and ↓4+87
Comments180

Мифология Data Science

Reading time6 min
Views23K


The future belongs to the companies and people that turn data into products

Человечество никогда не стояло на месте – суровый закон выживания постоянно заставлял его двигаться вперед. В истории развития человечества революции происходили всегда – одно общество сменялось другим, а устаревшие технологии заменялись более прогрессивными. Последняя информационная революция связана с появлением персональных компьютеров в 80-е годы ХХ века.
Читать дальше →
Total votes 22: ↑18 and ↓4+14
Comments18

Прекрасные конечные автоматы на Rust

Reading time16 min
Views13K

Перевод статьи Andrew Hobden "Pretty State Machine Patterns in Rust". Ссылка на оригинал в конце.


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


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


Один интересный шаблон, часто применяемый к таким проблемам — "Конечный автомат". Предлагаю потратить немного времени, чтобы понять, что именно имеется ввиду под этим словосочетанием, и почему же это так интересно.

Читать дальше →
Total votes 49: ↑47 and ↓2+45
Comments2

Укрощаем числа с плавающей точкой. Возможна ли отладка шейдеров для мобильных устройств на ПК?

Reading time4 min
Views5.6K
В игровой индустрии работа над визуальным качеством эффектов ведется на стыке искусства и технологий. Особенно это касается мобильных приложений.

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

image
Читать дальше →
Total votes 21: ↑19 and ↓2+17
Comments11

Построение минимальных выпуклых оболочек

Reading time7 min
Views136K

Проведя небольшое научное исследование (проще говоря, выполнив поиск на сайте), обнаружил, что на хабре имеется всего две статьи с тегом вычислительная геометрия, причем одна из них оказалась моей. Т.к. в последнее время я несколько заинтересовался этой тематикой, то решил продолжить тему алгоритмической геометрии рассмотрением задачи построения так называемых минимальных выпуклых оболочек. Хотя рисунок справа и дает проницательному хаброчитателю исчерпывающее объяснение того, что это такое, тем не менее под катом будут даны чуть более формальные определения и описаны два классических алгоритма построения минимальных выпуклых оболочек.
Читать дальше →
Total votes 99: ↑94 and ↓5+89
Comments56

Популярные вопросы на собеседовании по C++ и ответы на них

Reading time9 min
Views337K
Здравствуйте!

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

О том, что спрашивают на собеседовании у C++ программистов, а также об ответах на эти вопросы и пойдет речь в данном посте.
Читать дальше →
Total votes 199: ↑196 and ↓3+193
Comments174

Советы и рекомендации по работе с Unity3D

Reading time33 min
Views94K


Я опубликовал первую статью «50 советов по работе с Unity» 4 года назад. Несмотря на то, что бóльшая её часть всё ещё актуальна, многое изменилось по следующим причинам:

  • Unity стал лучше. Например, теперь я могу доверять счётчику FPS. Возможность использования Property Drawers снизила необходимость написания пользовательских редакторов (Custom Editors). Способ работы с префабами стал меньше требовать заданных встроенных префабов (nested prefabs) и их альтернатив. Скриптуемые объекты стали более дружелюбными.

  • Улучшилась интеграция с Visual Studio, отладка стала намного проще и уменьшилась потребность в «обезьяньем» дебаггинге.

  • Стали лучше сторонние инструменты и библиотеки. В Asset Store появилось очень много ассетов, упрощающих такие аспекты, как визуальная отладка и логирование. Большая часть кода нашего собственного (бесплатного) плагина Extensions описана в моей первой статье (и многое из него описано здесь).

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

  • Я стал более опытным. За последние 4 года я поработал над многими проектами в Unity, в том числе над кучей прототипов игр, завершёнными играми, такими как Father.IO, и над нашим основным ассетом Unity Grids.

Эта статья является версией первоначальной статьи, переработанной с учётом всего вышеперечисленного.
Читать дальше →
Total votes 45: ↑42 and ↓3+39
Comments41

Boid'ы, птички и Unity3D

Reading time10 min
Views49K


Вторая часть: Оптимизируем Boid'ов на Unity

Задумывались ли вы когда-нибудь о то, почему птицы летая большими стаями никогда не сталкиваются и не коллапсируют в огромный галдящий перьевой ком? Хм, если подумать, это было бы круто. В любом случае, однажды в 1986 нашёлся человек по имени Крейг Рейнольдс, который решил создать простую модель поведения птиц в стаях и назвал её Boids. В модели у каждого боида есть три базовых правила: Separation, Alignment и Cohesion. Первое заключается в избегании столкновения с соседями, второе заставляет лететь примерно в ту же сторону что и соседи, а третье говорит не летать в одиночку и держаться группы. Эти простые правила позволяют создать правдоподобные стаи птиц, рыб и другой живности, чем и пользуются в кино и игровой индустрии.

В статье я расскажу как можно реализовать эту модель на практике. Для разработки я использую Unity и C#, но большинство вещей верны для других движков и языков. В этом туториале я не разжёвываю основы работы с Unity, подразумевается, что вы знаете эффект комбинации Ctrl+Shift+N на сцене, умеете работать с инспектором, дублировать и двигать объекты. Если нет, то советую начать с этой статьи. Или можете просто посмотреть на картинки.
Прошу-с проследовать под кат, только после вас!
Total votes 63: ↑59 and ↓4+55
Comments19

Один в поле не воин: плюсы от работы в компании на «удалёнке»

Reading time3 min
Views15K
При первой беседе на вопрос «Был ли у Вас опыт удалённой работы?» кандидаты часто рассказывают о своем опыте фриланса. Понятия «фриланс» и «удалённая работа» при этом зачастую смешиваются. Даже в словаре разделов Хабра нет отдельной сущности «удалённая работа», и, его, кстати, пора бы уже добавить. Фрилансер сам занимается маркетингом и продажами своих услуг. Удалёнка же – это отказ от необходимости работать в офисе. Это свобода, которая должна быть сбалансирована ответственностью. По нашим оценкам только 20-30% из тех, кто хочет работать удалённо, смогут это делать эффективно. Остальным ещё нужна «внешняя мотивация» в виде офисных стен, «руководителей надзирателей» и пр.

image
Читать дальше →
Total votes 25: ↑16 and ↓9+7
Comments14

Алгоритм Брезенхэма в приложениях реального времени

Reading time4 min
Views16K
Есть вот такие устройства — называются сканаторами или сканерами, обычно с прилагательным «лазерный»



используют их в различных технологиях лазерного сканирования.

С точки зрения программиста лазерный сканатор — это два поворотных зеркала, которые отклоняют лазерный луч в двух взаимно перпендикулярных плоскостях, углы задается с помощью пары ЦАПов (и стоящими после ЦАПов усилителями с обратной связью). Обычно ЦАПы могут быть 12-16 разрядными. Фактически задача рисования картинки или, говоря чуть более научным языком, вывода информации на таком устройстве ничуть не отличается от вывода информации на древних аналоговых графических дисплеях.

image

Управляются такие сканатары обычно с помощью отдельного (микро)контроллера, на который с компьютера подаются «высокоуровневые команды». Основная команда — это «нарисовать линию от сих до сих с такой-то скоростью». Раз «нарисовать линию» и микроконтроллер, то вспоминаем классический алгоритма Брезенхэма. Алгоритм Брезенхэма хорош тем, что он не использует никаких «медленных» операций с плавающей точкой, хотя для современных 32 разрядных микроконтроллеров это уже не так существенно, как для 8 или 16 разрядных.

Читать дальше →
Total votes 33: ↑26 and ↓7+19
Comments9

Метод оптимизации Trust-Region DOGLEG. Пример реализации на Python

Reading time7 min
Views14K


Trust-region метод (TRM) является одним из самых важных численных методов оптимизации в решении проблем нелинейного программирования (nonlinear programming problems). Метод базируется на определении региона вокруг лучшего решения, в котором квадратичная модель аппроксимирует целевую функцию.

Методы линейного поиска (line search) и методы trust-region генерируют шаги с помощью аппроксимации целевой функции квадратичной моделью, но использую они эту модель по-разному. Линейный поиск использует её для получения направления поиска и дальнейшего нахождения оптимального шага вдоль направления. Trust-region метод определяет область (регион) вокруг текущей итерации, в котором модель достаточно аппроксимирует целевую функцию. В целях повышения эффективности направление и длина шага выбираются одновременно.

Trust-region методы надежны и устойчивы, могут быть применены к плохо обусловленным задачам и имеют очень хорошие свойства сходимости. Хорошая сходимость обусловлена тем, что размер области TR (обычно определяется модулем радиус-вектора) на каждой итерации зависит от улучшений сделанных на предыдущих итерациях.
Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments2

Метод оптимизации Нелдера — Мида. Пример реализации на Python

Reading time5 min
Views65K


Метод Нелдера — Мида — метод оптимизации (поиска минимума) функции от нескольких переменных. Простой и в тоже время эффективный метод, позволяющий оптимизировать функции без использования градиентов. Метод надежен и, как правило, показывает хорошие результаты, хотя и отсутствует теория сходимости. Может использоваться в функции optimize из модуля scipy.optimize популярной библиотеки для языка python, которая используется для математических расчетов.
Читать дальше →
Total votes 33: ↑33 and ↓0+33
Comments17

Шпаргалка для технического собеседования

Reading time8 min
Views212K


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

Читать дальше →
Total votes 81: ↑68 and ↓13+55
Comments85

Потоки в C# .NET первые шаги

Reading time4 min
Views345K
Уважаемые читатели, в этой статье я хочу рассказать о таком важном средстве многозадачного программирования среды .NET, как многопоточность. Данная статья содержит начальные сведения, и предназначена для быстрого освоения азов многопоточности на языке C#. Однако не буду разглагольствовать о преимуществах параллельного выполнения задач, и перейду к примеру кода.
Читать дальше →
Total votes 32: ↑21 and ↓11+10
Comments16

Метод BFGS или один из самых эффективных методов оптимизации. Пример реализации на Python

Reading time4 min
Views50K


Метод BFGS, итерационный метод численной оптимизации, назван в честь его исследователей: Broyden, Fletcher, Goldfarb, Shanno. Относится к классу так называемых квазиньютоновских методов. В отличие от ньютоновских методов в квазиньютоновских не вычисляется напрямую гессиан функции, т.е. нет необходимости находить частные производные второго порядка. Вместо этого гессиан вычисляется приближенно, исходя из сделанных до этого шагов.

Существует несколько модификаций метода:
L-BFGS (ограниченное использование памяти) — используется в случае большого количества неизвестных.
L-BFGS-B — модификация с ограниченным использованием памяти в многомерном кубе.

Метод эффективен и устойчив, поэтому зачастую применяется в функциях оптимизации. Например в SciPy, популярной библиотеки для языка python, в функции optimize по умолчанию применяется BFGS, L-BFGS-B.

Читать дальше →
Total votes 27: ↑24 and ↓3+21
Comments4

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity