Эссе о разработке игр, мышлении и книгах

Модная типизация в Python

Разработчики пришивают типы к Python.

Разработчики пришивают типы к Python.

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

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

В этот раз я:

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

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

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

Далее

Процедурная генерация и прочая математика

Открыл для себя доклады, которые Squirrel Eiserloh делал для математической секции GDC. Очень наглядно и доступно рассказывает о процедурной генерации, случайности и прочей математике.

Доклады:

Доклады о процедурной генерации особенно интересны.

Генерация подземелий — от простого к сложному

Что у нас должно получиться.

Что у нас должно получиться.

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

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

В итоге у нас получится генератор подземелий со следующими свойствами:

  • Комнаты будут соединены коридорами.
  • Топологически подземелье будет иметь форму дерева. Добавить циклы будет элементарно, но уже в качестве домашнего задания.
  • Будет настраиваться количество комнат, их размер, «уровень ветвления».
  • Подземелье будет располагаться на клеточной сетке (состоять из квадратных клеток).

Весь код можно найти на github.

Кода в посте не будет — все используемые подходы легко описываются словами.

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

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

Далее

Видео с изменениями карты мира «Сказки» с 2013 года

Изменения карты мира «Сказки» с 2013 года.

Смотреть лучше в максимальном качестве.

Карта изменяется динамически, исходя из действий игроков и своей внутренней логики.

По сути реализована небольшая модель формирования ландшафта с учётом климата и «точек влияния», контролируемых игроками.

Просчитываются и меняются: высота, температура почвы/воздуха, направление ветра, влажность, плодородность земли, типы растительности.

Поверх этого отображаются обобщённые биомы (пустыня, джунгли, горы, etc). Для каждой клетки выбирается биом, который лучше всего ей подходит.

По ссылкам с ютуба можно скачать более подробные ролики.

О книге «Искусство Войны»

Обложка книги «Искусство войны»

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

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

Перескажу суть ещё короче, чем в книге:

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

Центральная мысль: успешными людьми слывут те, кто тратит ресурсы только на мероприятия с гарантированным профитом и не тратит в любом другому случае.