Pull to refresh
15
0
Send message

Как создать игровой ИИ: гайд для начинающих

Reading time31 min
Views95K


Наткнулся на интересный материал об искусственном интеллекте в играх. С объяснением базовых вещей про ИИ на простых примерах, а еще внутри много полезных инструментов и методов для его удобной разработки и проектирования. Как, где и когда их использовать — тоже есть.

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

UPD. Извиняюсь, но собственный перевод этой статьи на Хабре уже делал PatientZero. Прочитать его вариант можно здесь, но почему-то статья прошла мимо меня (поиском пользовался, но что-то пошло не так). А так как пишу в блог, посвященный геймдеву, решил оставить свой вариант перевода для подписчиков (некоторые моменты у меня оформлены по-другому, некоторые — намеренно пропущены по совету разработчиков).
Читать дальше →
Total votes 60: ↑60 and ↓0+60
Comments19

Генератор подземелий на основе узлов графа

Reading time11 min
Views28K
image

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

Введение


Алгоритм был написан как часть работы на получение степени бакалавра и основан на статье Ma et al (2014). Целью работы было ускорение алгоритма и дополнение его новыми функциями. Я вполне доволен результатом, потому что мы сделали алгоритм достаточно быстрым, чтобы использовать его во время выполнения игры. После завершения бакалаврской работы мы решили превратить её в статью и отправить на конференцию Game-ON 2018.

Алгоритм


Для создания уровня игры алгоритм получает в качестве входных данных набор полигональных строительных блоков и граф связности уровня (топологию уровня). Узлы графа обозначают комнаты, а рёбра определяют связи между ними. Цель алгоритма — назначить каждому узлу графа форму и расположение комнаты таким образом, чтобы никакие две формы комнат не пересекались, и каждая пара соседних комнат могла соединяться дверьми.
Total votes 51: ↑51 and ↓0+51
Comments11

Генерация типаж-объектов на лету (или безумие с Rust)

Reading time10 min
Views7.5K

В этой статье мы немного потешимся с языком программирования Rust, а в частности, с типаж-объектами.


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

Читать дальше →
Total votes 48: ↑45 and ↓3+42
Comments19

Rust новости #4 (декабрь 2018)

Reading time6 min
Views6.3K

Поскольку праздники кончились, предлагаю вашему вниманию субъективную подборку ржавых новостей за декабрь. В этой подборке: безумие с растом, страшен ли раст, волна пророчеств, Rust 2018, Rust Analyzer.


КДПВ


Rust 1.31 & Rust 2018


Самое важное событие декабря — выпуск Rust 1.31 и Rust 2018, конечно. Туда очень много всего вошло:


редакция 2018, нелексические времена жизни, изменения системы модулей, дополнительные правила вывода времен жизни, const fn, новые инструменты, инструментальные проверки качества кода, документация, новый веб-сайт, улучшения в cargo.

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



Также, имеет смысл полистать мозиловский хорошо структурированный обзор/ликбез 2018й редакции языка: Rust 2018 is here… but what is it? (перевод, обсуждение).

Читать дальше →
Total votes 36: ↑35 and ↓1+34
Comments11

Так ли страшен Rust, как его малюют

Reading time10 min
Views40K

Некоторое время назад я начал понимать необходимость разнообразить мой опыт программирования исключительно на C#. После некоторого изучения различных вариантов, таких как Haskell, Scala, Rust и некоторых других, выбор пал на последний. Со временем я начал обращать внимание, что Rust всё больше и больше рекламируется исключительно как "системный язык", который нужен для вырвиглазно сложных компиляторов и супер-нагруженных систем, с особыми требованиями к безопасности и многопоточности, а для вариантов попроще есть Go/Python/Java/..., в то время как я с удовольствием и весьма успешно использовал его как замену моей рабочей лошадке C#.



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

Читать дальше →
Total votes 95: ↑92 and ↓3+89
Comments399

Мысли о Rust 2019

Reading time6 min
Views17K
Коллеги, доброго вечера всем!

Мы с радостью предлагаем вам перевод по-настоящему программной статьи от Рафа Левина, чей титанический труд над развитием языка Rust вызывает уважение и пиетет:



Без ложной скромности и без шапкозакидательства, предметно и увлеченно уважаемый автор откликнулся на призыв сообщества Rust, опубликованный по ссылке в начале этой статьи. Надеемся, получилось интересно и жизнеутверждающе.
Читать дальше →
Total votes 46: ↑45 and ↓1+44
Comments13

Rust новости #3 (ноябрь 2018)

Reading time9 min
Views6.4K

КДПВ про Rust2018


Предлагаю вашему вниманию субъективную подборку ржавых новостей за ноябрь. В этой подборке: Rust 2018, RustRush, видео с конференций, Amazon Lambda и Firecracker, квизы, переход exonum на actix-web, 10 причин использовать Rust.


Результаты Rust опроса 2018


график из опроса про сложность изучения тем


Опубликованы результаты ежегодного Rust-опроса (обсуждение), который шел с августа.

Читать дальше →
Total votes 42: ↑41 and ↓1+40
Comments12

10 неочевидных преимуществ использования Rust

Reading time12 min
Views40K

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



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


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

Читать дальше →
Total votes 97: ↑93 and ↓4+89
Comments121

Схема разделения секрета Шамира

Reading time7 min
Views51K
Рассмотрим сценарий, когда необходимо обеспечить безопасность банковского хранилища. Оно считается абсолютно неприступным без ключа, который вам выдают в первый же день работы. Ваша цель — надёжно сохранить ключ.

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

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

Отчаявшись, вы уничтожаете дубликат и решаете разделить исходный ключ пополам. Теперь, вы думаете, два доверенных человека с фрагментами ключей должны физически присутствовать, чтобы собрать ключ и открыть хранилище. Это означает, что вору необходимо украсть два фрагмента, что вдвое труднее кражи одного ключа. Однако вскоре вы понимаете, что эта схема ненамного лучше, чем просто один ключ, потому что если кто-то потеряет половину ключа, полный ключ нельзя восстановить.
Читать дальше →
Total votes 72: ↑72 and ↓0+72
Comments22

Взгляд биолога на корни нашего старения

Reading time16 min
Views35K
Здравствуйте!

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

Дисклеймер: если вам кажется, что текст направлен определённому человеку, а не аудитории в целом, то так оно и есть, но менять я ничего не буду.

Эта статья написана полностью из головы, что называется на одном дыхании (правда в три захода), потому в ней минимальное количество ссылок и картинок – прошу понять и простить, либо написать в комментарии, возможно я что-то исправлю.
Читать дальше →
Total votes 79: ↑76 and ↓3+73
Comments156

Взламывая код старения: новая наука о старении и о том что значит оставаться молодым

Reading time8 min
Views21K

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

Эта научная книга года, лучшее что я читал в последнее время.

Миттельдорф эксперт в эволюционной теории — хотя и является астрофизиком — и проворно и мастерски излагает и критикует несколько текущих теорий старения. В следствии он предлагает свою собственную радикально отличающуюся теорию. Он очень убедителен. Какая бы не была судьба его теории, он приносит достаточно свидетельств как за так и против других теорий, что мне кажется, его теория заслуживает что бы с ней считались.
Читать дальше →
Total votes 36: ↑25 and ↓11+14
Comments72

Гейм-дизайн: новый подход к уровням сложности

Reading time14 min
Views23K
image

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

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

Но сначала я попробую вкратце перечислить наиболее распространённые претензии к традиционной схеме с уровнями сложности и к её альтернативам.
Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments34

Симулируем реалистичную реку в Houdini и Unreal Engine 4

Reading time6 min
Views38K


Когда только начался переход с DX9 на DX10 стало появляться много игр с круто смоделированной водой с правильными эффектами. Тогда разница была очень заметной, особенно если сравнивать игры прошлых поколений и тот же Crysis. Поэтому когда наткнулся на гайд, как сделать простую, но реалистичную симуляцию реки через плагин Houdini для UE4, то даже не стал задумываться и быстро перевел.
Total votes 46: ↑46 and ↓0+46
Comments3

Сетевой код Age of Empires: 1500 лучников на модем 28,8 кбит/с

Reading time19 min
Views39K
image

Примечание переводчика: этой статье уже 17 лет, и интересна она только с исторической точки зрения. Любопытно узнать, как удавалось разработчикам добиться плавной сетевой игры в эпоху 28,8k-модемов и первых «Пентиумов».

В этой статье рассказывается об архитектуре и реализации, а также о некоторых уроках, полученных при создании многопользовательского (сетевого) кода игр Age of Empires 1 и 2. Также в ней излагаются современные и будущие подходы с созданию сетевой архитектуры, используемые Ensemble Studios в своих игровых движках.

Мультиплеер Age of Empires: требования к структуре


В начале работы над многопользовательским кодом Age of Empires в 1996 году мы поставили перед собой очень конкретные цели, необходимые для реализации требуемого игрового процесса.
Читать дальше →
Total votes 94: ↑94 and ↓0+94
Comments11

Что почитать о блокчейн-технологиях: руководства, книги и статьи

Reading time6 min
Views25K
Мы собрали дайджест из материалов, посвященных принципам работы блокчейн-технологии и разработке децентрализованных приложений. В него вошли наши собственные статьи и ресурсы по теме, на которые рекомендовали обратить внимание резиденты Hacker News, Quora и Reddit.

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

Total votes 17: ↑16 and ↓1+15
Comments1

Моё разочарование в софте

Reading time11 min
Views389K

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


Я занимаюсь программированием уже 15 лет. Но в последнее время при разработке не принято думать об эффективности, простоте и совершенстве: вплоть до того, что мне становится грустно за свою карьеру и за IT-отрасль в целом.

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

Только в программном обеспечении считается нормальным, если программа работает на уровне 1% или даже 0,01% от возможной производительности. Ни у кого вроде нет возражений.
Total votes 505: ↑474 and ↓31+443
Comments2474

Жизнь и смерть митохондрий

Reading time14 min
Views90K
Митохондрии – маленькие труженики или большие начальники?

Если вы думаете, что самая важная для нас история совместной жизни начинается во время свадьбы, то это совсем не так. Самая важная история совместной жизни каждого человека началась более миллиарда лет назад, когда наши далекие одноклеточные предки вынуждены были подписать «брачный контракт» с теми, кого мы сейчас называем митохондрии (см. теория симбиогенеза).

Митохондрии имеют две мембраны (внутреннюю и внешнюю) и собственный наследственный материал в виде ДНК (рис.1). На внутренней мембране митохондрий находится система окислительного фосфорилирования, работа которой обеспечивает окисление энергетических субстратов с образованием АТФ.


Рис. 1. Схематическое строение митохондрии

В брачном контракте клетки и митохондрии нет пункта «в болезни и здравии», — и хорошо. Если митохондрия становится старой, клетка может ее убить в процессе митофагии, а митохондрии, в свою очередь, регулируют процесс апоптоза у недееспособных и старых клеток. Если процесс обоюдного контроля качества нарушается, запускаются механизмы старения. Нарушаются механизмы апоптоза, увеличивается количество свободных радикалов, не контролируемых митохондрией. Это вызывает системное воспаление, повреждение ДНК клетки. Таким образом, есть сильная взаимосвязь между МХ дисфункцией, возраст-зависимыми заболеваниями, старением организма и метаболическими дисфункциями [1]. Метаболическая дисфункция – неизменный всадник апокалипсиса старения.
Читать дальше →
Total votes 49: ↑48 and ↓1+47
Comments53

Как это работает: Деревья Меркла в биткойн сети

Reading time5 min
Views38K
Узлы в блокчейн-сети анонимны и работают в условиях отсутствия доверия. В этой ситуации встает проблема верификации данных: как проверить, что в блоке записаны корректные транзакции? Для оценки каждого блока понадобится большое количество времени и вычислительных ресурсов. Решить проблему и упростить процесс помогают деревья Меркла.

Что это такое, как используется, какие существуют альтернативы — расскажем далее.

Читать дальше →
Total votes 37: ↑35 and ↓2+33
Comments18

Зачем писать свой игровой движок?

Reading time20 min
Views28K
В декабре прошлого года, на конференции Games Gathering 2017, мы сделали доклад, в котором рассказали о том, надо ли компаниям, работающим в игровой индустрии, писать собственные движки.


Читать дальше →
Total votes 59: ↑56 and ↓3+53
Comments51

Браузерные расширения для GitHub, которые увеличат продуктивность вашей работы

Reading time3 min
Views19K


Сейчас GitHub — самый популярный среди разработчиков сервис для совместной разработки программного обеспечения и размещения исходников в «облаке». Его используют как независимые разработчики, у которых в портфолио 1-2 приложения, так и технологические гиганты, включая Microsoft, Google и Facebook, у которых тысячи проектов.

Собственно, рассказывать на Хабре о том, что такое GitHub, смысла нет; этот пост посвящен его браузерным расширениям, которые позволяют увеличить скорость и продуктивность работы. Вообще говоря, расширений этих очень много, поэтому мы выбрали те из них, которые используем в своей работе сами или которые порекомендовали коллеги.
Читать дальше →
Total votes 32: ↑32 and ↓0+32
Comments6

Information

Rating
Does not participate
Registered
Activity