• Структура и случайность простых чисел

    • Перевод

    Разбросаны ли простые числа по числовой оси подобно рассеянным ветром семенам? Разумеется нет: простота — это не вопрос случайности, а результат элементарной арифметики. Число является простым тогда и только тогда, когда ни одно меньшее положительное целое число кроме единицы не делит его нацело.

    Но на этом история не заканчивается. Распределение простых чисел выглядит случайным, с неравномерными разрывами и скоплениями, которые выглядят довольно хаотично. Если и существует какая-то схема, то она непостижима. На самом деле, простые числа выглядят достаточно случайными, чтобы можно было сыграть с ними в кости. Создайте список последовательных простых чисел (допустим, начав с 11, 13, 17, 19,... ) и разделите их по модулю 7. Другими словами, разделите каждое простое число на 7 и сохраните только остаток. Результатом будет последовательность целых чисел из множества {1, 2, 3, 4, 5, 6}, которая выглядит почти как результат нескольких бросков правильной кости.

    $\begin{align*}
 11 \bmod 7 & \rightarrow 4 \qquad 47 \bmod 7 \rightarrow 5 \\
 13 \bmod 7 & \rightarrow 6 \qquad 53 \bmod 7 \rightarrow 4 \\
 17 \bmod 7 & \rightarrow 3 \qquad 59 \bmod 7 \rightarrow 3 \\
 19 \bmod 7 & \rightarrow 5 \qquad 61 \bmod 7 \rightarrow 5 \\
 23 \bmod 7 & \rightarrow 2 \qquad 67 \bmod 7 \rightarrow 4 \\
 29 \bmod 7 & \rightarrow 1 \qquad 71 \bmod 7 \rightarrow 1 \\
 31 \bmod 7 & \rightarrow 3 \qquad 73 \bmod 7 \rightarrow 3 \\
 37 \bmod 7 & \rightarrow 2 \qquad 79 \bmod 7 \rightarrow 2 \\
 41 \bmod 7 & \rightarrow 6 \qquad 83 \bmod 7 \rightarrow 6 \\
 43 \bmod 7 & \rightarrow 1 \qquad 89 \bmod 7 \rightarrow 5 \\
 \end{align*}$

    Читать дальше →
  • Пишем движок трёхмерного ретро-шутера с нуля

    • Перевод

    Мне всегда нравились классические шутеры от первого лица 90-х. Я часами просиживал за моим 386-м, играя Doom, потрясённый тем, как кому-то удалось написать код, отрисовывающий на моём экране 3D-графику в реальном времени с отличным разрешением 320x200. Я немного знал программирование (только что начал изучать BASIC), поэтому осознавал, что глубоко внутри это всего лишь куча математики и байтов, записываемых в видеопамять. Но в то время даже массивы для меня были довольно сложным понятием, поэтому я не мог даже начать постигать всю сложность 3D-рендеринга.

    В то время все писали 3D-движки с нуля, потому что другого способа не было. Но сегодня написание логики 3D-рендеринга с нуля скорее всего окажется плохой идеей. Очень плохой. Почти как изобретение колеса! При наличии огромного количества 3D-движков и библиотек, намного более хорошо протестированных и оптимизированных, чем то, что вы можете сделать сами, нет никаких причин для разумного разработчика начинать писать собственный движок.

    Если только…

    Представьте, что вы можете вернуться в машине времени назад в 90-е, когда ещё не было OpenGL и DirectX, не было видеопроцессоров. Всё что у вас есть — ЦП и экран, заполненный пикселями. Вам всё придётся писать самому.

    Если эта идея кажется вам интересной, то вы не одиноки: это именно то, что можно сделать на такой выдуманной консоли, как TIC-80.
    Читать дальше →
  • Ищем сокровища в исходном коде Aladdin

    • Перевод
    image


    На момент своего выхода в 1993 году Disney’s Aladdin на Sega Genesis (или Mega Drive, если в начале 90-х вы жили с другой стороны лужи) была удивительно красивой игрой.

    Благодаря использованию технологии, которая позже стала известной, как Digicel, правильному выбору промежуточного ПО и впечатляющему таланту авторов Aladdin смогла выделиться на фоне других игр Genesis той эпохи. Красивая нарисованная от руки графика Aladdin установила новую планку качества для того, чего можно добиться на «железе» Genesis. Это стало возможным не с помощью особенно интересных растровых эффектов или тайных аппаратных приёмов, а благодаря сочетанию эффектной графики, дизайна и правильно выбранной технологии.

    Эта уникальная смесь графики и технологий стала основной причиной, позволившей игре Aladdin занять особое место в истории видеоигр. Поэтому мне так радостно было найти архив с полным исходным кодом игры в коллекции Video Game History Foundation! Кроме бесценного источника данных, этот архив является для меня отличной возможностью создать стандарты для сохранения исходного кода, отслеживания зависимостей инструментов и многих других процессо-ориентированных аспектов в VGHF.
    Читать дальше →
    • +105
    • 18,6k
    • 8
  • Как правильно предложить свою игру ютуберу/стримеру

    • Перевод
    image

    Привет всем! Меня зовут Welsknight, я профессиональный ютубер и стрим-партнёр Twitch. Получив особенно плохое письмо от кого-то, предложившего мне спонсируемую серию видео (он неправильно написал моё имя и, что более важно, не предоставил никакой информации о своей игре), я решил, что будет полезно поделиться моей точкой зрения на то, как правильно общаться с ютуберами и стримерами. Итак, без лишних предисловий…

    Совет 1: упростите мне работу!


    • Не заставляйте меня искать информацию о вашей игре. Добавьте в письмо скриншоты, ссылку на трейлер, краткое текстовое описание вашей игры, расскажите, на что она похожа и т.д.
    • Просто пришлите мне ключ. Если мне придётся ответить на письмо, чтобы попросить его, то, скорее всего, я не буду этого делать.
    • Приложите пресс-кит. Мне нужны хорошие PNG вашего логотипа с прозрачностью и красивые фоновые изображения, чтобы использовать в иконке видео. Если вы действительно хотите меня впечатлить, добавьте PNG с основными персонажами и врагами, которые я тоже смогу использовать. Помните, что мне придётся собрать из ваших иллюстраций целостную и красивую иконку размером 1280x720.
    • Если ваша игра ещё не вышла, укажите дату выхода, и будет ли эмбарго на видеообзор.
    Читать дальше →
  • Как создать качественную карту для метроидвании

    • Перевод

    Авторы Hollow Knight рассказывают о процессе построения сложного взаимосвязанного мира от набросков до готовой игры


    image

    Есть что-то удивительно приятное в исследовании сложных 2D-пространств игр, сделанных по модели Metroid и Castlevania. Такого чувства невозможно получить в других играх: чёткое осознание того, как части мира подогнаны друг к другу, умение распознать наличие скрытой комнаты, удовлетворение от получения новых способностей, позволяющих попасть на ранее недостижимые высоты. Качественная карта метроидвании заставляет игрока хотеть освоить каждый квадратный сантиметр и остаётся интересной, даже когда он проходит тем же маршрутом второй, и десятый, и двадцатый раз.

    Так как же создать карту для метроидвании? Как создать взаимосвязанный мир, возвращаться назад в котором интересно, который даёт игроку свободу исследований, но при этом частично сохраняет за собой путь его развития? Есть ли секретная формула, тайное знание? Я задал эти вопросы создателям Hollow Knight, вдохновлённого Metroid фантастического приключения в антураже разлагающегося королевства Hallownest, которое напоминает мне анимационный фильм Дона Блута «Секрет НИМХ» (только вместо крыс здесь насекомые).

    Мы поговорили о том, что важно для такой игры, и о том, почему сами авторы никогда не упоминают термин «метроидвания». Потом мы добрались до самого интересного: посмотрели наброски, схемы и рабочие дизайны мира Hollow Knight, от самого начала до финальной версии.
    Читать дальше →
    • +19
    • 4,7k
    • 4
  • О выборе структур данных для начинающих

    • Перевод
    image

    Часть 1. Линейные структуры


    Массив


    Когда вам нужен один объект, вы создаёте один объект. Когда нужно несколько объектов, тогда есть несколько вариантов на выбор. Я видел, как многие новички в коде пишут что-то типа такого:

    // Таблица рекордов
    int score1 = 0;
    int score2 = 0;
    int score3 = 0;
    int score4 = 0;
    int score5 = 0;

    Это даёт нам значение пяти рекордов. Этот способ неплохо работает, пока вам не потребуется пятьдесят или сто объектов. Вместо создания отдельных объектов можно использовать массив.

    // Таблица рекордов
    const int NUM_HIGH_SCORES = 5;
    int highScore[NUM_HIGH_SCORES] = {0};

    Будет создан буфер из 5 элементов, вот такой:



    Заметьте, что индекс массива начинается с нуля. Если в массиве пять элементов, то они будут иметь индексы от нуля до четырёх.
    Читать дальше →
  • Обобщённый поиск путей для ИИ в платформерах

    • Перевод

    Предисловие


    Если вы создаёте игру-платформер в стиле «беги и прыгай», то, возможно, уже задумывались о добавлении в неё ИИ. Он может управлять противниками, объектами, которые игрок должен преследовать, и так далее… И слишком часто ради простоты программист реализации отказывается от умного ИИ, что в результате приводит к тому, что ИИ не может справиться с хитрыми прыжками, особо умным игроком или движущимися объектами уровня.

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

    Мы рассмотрим основную идею и создадим полную реализацию. Более сложные случаи, в том числе подвижные платформы/разрушаемые стены, мы рассмотрим в другой статье.

    Эта техника использована в игре Nomera, см. на www.dotstarmoney.com или в Twitter.

    e3iKSJ7.png


    Прежде чем начать, проверьте, возможно, вы удастся реализовать более простой алгоритм, соответствующий упрощённой геометрии карты. Например, если коллизии в уровнях распознаются по сетке квадратов (как в большинстве 2D-игр). В таких случаях можно реализовать надёжный поиск путей ИИ с помощью более простых техник. Мой метод в основном подойдёт тем, кто хочет более «человечного» поведения ИИ.
    Читать дальше →
    • +25
    • 4,7k
    • 3
  • Математика игры 2048

    • Перевод

    Часть 1. Расчёт минимального количества ходов для победы с помощью цепей Маркова


    Screenshot of 2048

    После недавнего обновления экран «You win!» игры 2048 начал показывать количество ходов, потребовавшихся для победы, и я задался вопросом: сколько же нужно ходов, чтобы выиграть?

    В первой части статьи мы ответим на этот вопрос, смоделировав игру 2048 в виде цепи Маркова и проанализировав её, чтобы показать, что вне зависимости от мастерства игрока для победы в среднем нужно не менее 938,8 ходов. Это даёт нам неплохое мерило отсчёта — если вы можете выигрывать примерно за такое количество ходов, то неплохо играете.

    Количество ходов, необходимых для победы, зависит от случайности, потому что игра добавляет тайлы 2 и 4 случайным образом. Анализ также покажет, что распределение минимального количества ходов до победы имеет стандартное отклонение в 8,3 хода, и что его общая форма хорошо аппроксимируется смесью биномиальных распределений.
    Читать дальше →
  • Магия разработки видеоигр id Software

    • Перевод
    От переводчика: эта статья написана Дэвидом Кушнером в 2002 году, годом позже он издал известную книгу «Masters of Doom». Статья показалась мне интересной, потому что в ней есть подробности реализации технологий id, почему-то отсутствующие в книге.

    За кулисами экшена и агрессии игр id скрыта революция в технологии настольных компьютеров



    image
    В течение последних 12 лет эволюция реализма графики Id Software поднимает планку для всей отрасли видеоигр. Среди игр-новаторов находятся [снизу вверх, справа налево] Commander Keen (1990) [прим. пер.: на самом деле на скриншоте Dangerous Dave in the Haunted Mansion], Hovertank (1991), Wolfenstein 3D (1992), Doom (1993), Quake (1996) [прим. пер.: на самом деле Quake II] и Return to Castle Wolfenstein (2001).

    После полуночи начинается схватка. Солдаты преследуют нацистов по коридорам замка. Огнемёт изрыгает чудовищный язык пламени. Это Return to Castle Wolfenstein, компьютерная игра, ставшая не только спинномозговым приключением, но и чудом науки. Она же — последний продукт Id Software (Мескит, штат Техас). Благодаря своим технологически инновационным играм id оказала огромное влияние на мир компьютерных вычислений: от привычных в современных PC высокоскоростных полноцветных графических карт высокого разрешения до появления армии программистов и игроков в онлайновые игры, внёсших вклад в поп-культуру.
    Читать дальше →