Как не повесить три телевизора на восемь зубочисток, спроектировать четыре кронштейна и один очередной симулятор пультов, победить переходники и подключить это всё так, чтобы оно работало.
Гусаров Алексей @Thar0l
Embedded SW developer
Процедурная генерация случайных игровых подземелий
6 мин
65KПеревод
В посте подробно рассматривается техника генерации случайных подземелий. Основной алгоритм генерации, пример работы которого можно посмотреть здесь, используется разработчиками игры TinyKeep. Оригинальный пост от разработчика был размещён на reddit.
Оригинальное описание алгоритма
1. Сначала я задаю нужное количество комнат – к примеру, 150. Естественно, цифра произвольная, и чем она больше, тем сложнее будет подземелье.
2. Для каждой комнаты я создаю прямоугольник со случайными шириной и высотой, находящимися в пределах заданного радиуса. Радиус не имеет большого значения, хотя разумно предположить, что он должен быть пропорционален количеству комнат.
Вместо равномерно распределённых случайных чисел (какие выдаёт генератор Math.random в большинстве языков), я использую нормальное распределение Парка-Миллера. В результате вероятность появления маленьких комнат превышает вероятность появления больших. Зачем это надо, объясню позже.
Кроме того я проверяю, что соотношение длины и ширины комнаты не слишком велико. Нам не нужны как идеально квадратные комнаты, так и сильно вытянутые.
3. И вот у нас есть 150 случайных комнат, расположенных на небольшом пространстве. Большинство из них наезжают друг на друга. Теперь мы осуществляем их разделение по технологии separation steering, чтобы разделить прямоугольники так, чтоб они не пересекались. В результате они не пересекаются, но находятся достаточно близко друг от друга.
4. Заполняем промежутки клетками размером 1х1. В результате у нас получается квадратная решётка из комнат различного размера.
5. И тут начинается основное веселье. Определяем, какие из клеток решётки являются комнатами – это будут любые клетки с шириной и высотой, превышающими заданные. Из-за распределения Парка-Миллера мы получим сравнительно небольшое количество комнат, между которыми есть довольно много свободного пространства. Но оставшиеся клетки нам также пригодятся.
6. Следующий шаг – связывание комнат вместе. Для этого мы строим граф, содержащий центры всех комнат при помощи триангуляции Делоне. Теперь все комнаты связаны меж собой непересекающимися линиями.
7. Поскольку нам не нужно, чтобы все комнаты были связаны со всеми, мы строим минимальное остовное дерево. В результате получается граф, в котором гарантированно можно достичь любой комнаты.
8. Дерево получается аккуратным, но скучным – никаких вам замкнутых ходов. Поэтому мы случайным образом добавляем обратно примерно 15% ранее исключённых рёбер графа. В результате получится граф, где все комнаты гарантированно достижимы, с несколькими замкнутыми ходами.
9. Чтобы превратить его в коридоры, для каждого ребра строится серия прямых линий (в форме Г), идущих по рёбрам графа, соединяющим комнаты. Тут нам пригождаются те клетки, которые остались неиспользованными (те, что не превратились в комнаты). Все клетки, накладывающиеся на Г-образные линии, становятся коридорами. А из-за разнообразия размеров клеток стены коридоров будут неровными, что как раз хорошо для подземелья.
И вот пример результата!
Осторожно — под катом много
+45
Эффективное использование Github
13 мин
124KGithub — важная часть жизни современного разработчика: он стал стандартом для размещения opensource-проектов. В «2ГИС» мы используем гитхаб для разработки проектов web-отдела и хостинга проектов с открытым кодом.
Хотя большинство из нас пользуются сервисом практически каждый день, не все знают, что у него есть много фишек, помогающих облегчить работу или рутинные операции. Например, получение публичного ключа из URL; отслеживание того, с каких сайтов пользователи приходят в репозиторий; правильный шаринг ссылок на файлы, которые живут в репозиториях гитхаба; горячие клавиши и тому подобное. Цель этой статьи — рассказать о неочевидных вещах и вообще о том, что сделает вашу работу с гитхабом продуктивнее и веселее (я не буду рассматривать здесь работу с API гитхаба, так как эта тема заслуживает отдельной статьи).
Содержание
- Трюки с URL
- Горячие клавиши
- Тикеты и пулл-реквесты
- Github markdown
- Аккаунт
- Работа с репозиториями
- Поиск кода
- Командная строка и Github
- User scripts
- Github-вандализм
- Дополнительные Github-ресурсы
- Полезные ссылки
+147
Сборник песен под гитару ко дню системного администратора (с аккордами!)
8 мин
20KДоброго времени суток, товарищи!
Выкладываю сборник пародийных тематических песен на известные мотивы. Тексты переписаны лично мной. Патчи принимаются на гитхабе
Кусочек кода отправлять кому-то
Оригинал: "Философы в тринадцать с половиной"
Em Am
Перелистав известные тома,
D G E
Мы научились понимать английский.
Am H C
Но разве это не свинцовая тюрьма -
Am H
Плутать всю жизнь меж строчек манов к циске?
E Am
И каждый час, и каждую минуту,
D G E
О чьём-то софте вечная забота.
Am H C
Кусочек кода отправлять кому-то –
Am H Em (E)
Такая, брат, у нас с тобой работа.
Они порою знают больше нас -
Мэйнтэйнеры в тринадцать с половиной.
И в спорах забываются подчас,
Пуская в ход банхаммеры админа.
И каждый час, и каждую минуту,
О чьём-то софте вечная забота.
Коммиты патчем направлять кому-то -
Слова ничто, когда они без кода.
А если не справляешься один -
Бредёшь на форум в поисках подмоги.
Часами в ожидании сидишь,
Под спойлер заворачивая логи.
И каждый час, и каждую минуту,
О чьём-то софте вечная забота.
Скупой багрепорт отсылать кому-то -
Такая, брат, у нас с тобой работа.
С трудом по клаве мечется рука -
Луна на стол сквозь окна блики стелит,
Да плещется в измученных зрачках
Счастливый сон о выспавшемся теле.
И каждый час, и каждую минуту,
Об общем софте вечная забота.
Лицом на клаве засыпать под утро -
Такая, брат, сейчас цена свободы.
Который год врезаются в лицо
Сквозняк из окон, град прогнивших яблок.
Плечом к плечу - не дав сомкнуть кольцо -
Лиса, пингвин и с жёлтой вилкой дьявол.
И каждый час, и каждую минуту,
Об общем софте вечная забота.
Держать для сна одну шестую суток -
Такая, брат, сейчас цена свободы.
+13
Информация
- В рейтинге
- Не участвует
- Откуда
- Зеленоград, Москва и Московская обл., Россия
- Дата рождения
- Зарегистрирован
- Активность